int main (int argc, char *argv[]) { struct arguments args; entries_allocated = entries_used = 0; entries = NULL; if (_get_arguments (&args, argc, argv)) { load_entries (&args); if (args.list_details) do_list_details (); if (args.list_by_account) do_list_by_account (); if (args.list_by_date) do_list_by_date (); if (args.list_total) do_list_total (); } return 0; }
static void hsts_provider_init(HSTSProvider *self) { /* initialize private fields */ HSTSProviderPrivate *priv = HSTS_PROVIDER_GET_PRIVATE(self); priv->whitelist = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, (GDestroyNotify)free_entry); /* load entries from hsts file */ load_entries(self, vb.files[FILES_HSTS]); }
Database *DB_create(const char *filename) { assert(filename); Database *db = (Database *)malloc(sizeof(Database)); db->filename = strdup(filename); load_entries(db->entries, filename); db->entry_num = 0; return db; }
static int get_entries(struct search *search) { size_t low = 0; size_t high = search->size; if (search->key == UINT64_C(0) || is_full(search)) return 0; while (low < high) { long middle = (high + low) / 2; struct entry entry; if (get_entry(search->file, middle, &entry) != 0) return -1; if (entry.key == search->key) { if (load_entries(search, middle) != 0) return -1; break; } else if (entry.key > search->key) { high = middle; } else if (high > low + 1) { low = middle; } else { if (get_entry(search->file, high, &entry) != 0) return -1; if (entry.key == search->key) { if (load_entries(search, high) != 0) return -1; } return 0; } } return 0; }
static void reload_users (Daemon *daemon) { GHashTable *users; GHashTable *old_users; GHashTable *local; GHashTableIter iter; gpointer name; User *user; /* Track the users that we saw during our (re)load */ users = create_users_hash_table (); /* * NOTE: As we load data from all the sources, notifies are * frozen in load_entries() and then thawed as we process * them below. */ /* Load the local users into our hash table */ load_entries (daemon, users, entry_generator_fgetpwent); local = g_hash_table_new (g_str_hash, g_str_equal); g_hash_table_iter_init (&iter, users); while (g_hash_table_iter_next (&iter, &name, NULL)) g_hash_table_add (local, name); /* Now add/update users from other sources, possibly non-local */ load_entries (daemon, users, wtmp_helper_entry_generator); load_entries (daemon, users, entry_generator_cachedir); /* Mark which users are local, which are not */ g_hash_table_iter_init (&iter, users); while (g_hash_table_iter_next (&iter, &name, (gpointer *)&user)) user_update_local_account_property (user, g_hash_table_lookup (local, name) != NULL); g_hash_table_destroy (local); /* Swap out the users */ old_users = daemon->priv->users; daemon->priv->users = users; /* Remove all the old users */ g_hash_table_iter_init (&iter, old_users); while (g_hash_table_iter_next (&iter, &name, (gpointer *)&user)) { if (!g_hash_table_lookup (users, name)) { user_unregister (user); accounts_accounts_emit_user_deleted (ACCOUNTS_ACCOUNTS (daemon), user_get_object_path (user)); } } /* Register all the new users */ g_hash_table_iter_init (&iter, users); while (g_hash_table_iter_next (&iter, &name, (gpointer *)&user)) { if (!g_hash_table_lookup (old_users, name)) { user_register (user); accounts_accounts_emit_user_added (ACCOUNTS_ACCOUNTS (daemon), user_get_object_path (user)); } g_object_thaw_notify (G_OBJECT (user)); } g_hash_table_destroy (old_users); }