/* Randomly select something to do with a directory */ static void operate_on_dir(struct dir_info *dir) { size_t r; struct dir_entry_info *entry; struct file_info *file; r = tests_random_no(14); if (r == 0 && grow) /* When growing, 1 time in 14 create a file */ file_new(dir, make_name(dir)); else if (r == 1 && grow) /* When growing, 1 time in 14 create a directory */ dir_new(dir, make_name(dir)); else if (r == 2 && grow && (file = pick_file()) != NULL) /* When growing, 1 time in 14 create a hard link */ link_new(dir, make_name(dir), file); else if (r == 3 && grow && tests_random_no(5) == 0) /* When growing, 1 time in 70 create a symbolic link */ symlink_new(dir, make_name(dir)); else { /* Otherwise randomly select an entry to operate on */ r = tests_random_no(dir->number_of_entries); entry = dir->first; while (entry && r) { entry = entry->next; --r; } if (entry) operate_on_entry(entry); } }
void integck(void) { pid_t pid; int64_t rpt; uint64_t z; char dir_name[256]; /* Make our top directory */ pid = getpid(); printf("pid is %u\n", (unsigned) pid); tests_cat_pid(dir_name, "integck_test_dir_", pid); if (chdir(dir_name) != -1) { /* Remove it if it is already there */ tests_clear_dir("."); CHECK(chdir("..") != -1); CHECK(rmdir(dir_name) != -1); } initial_free_space = tests_get_free_space(); log10_initial_free_space = 0; for (z = initial_free_space; z >= 10; z /= 10) ++log10_initial_free_space; top_dir = dir_new(NULL, dir_name); if (!top_dir) return; srand(pid); create_test_data(); if (!tests_fs_is_rootfs()) { close_open_files(); tests_remount(); /* Requires root access */ } /* Check everything */ dir_check(top_dir); check_deleted_files(); for (rpt = 0; tests_repeat_parameter == 0 || rpt < tests_repeat_parameter; ++rpt) { update_test_data(); if (!tests_fs_is_rootfs()) { close_open_files(); tests_remount(); /* Requires root access */ } /* Check everything */ dir_check(top_dir); check_deleted_files(); } /* Tidy up by removing everything */ close_open_files(); tests_clear_dir(dir_name); CHECK(rmdir(dir_name) != -1); }
static void peer_new_dir (void *msg) { fs_msg_s *m = msg; int rc; FN; m->dir_id = dir_new(); rc = send_tau(m->q.q_passed_key, m);//should use share key if (rc) { eprintf("peer_enw send_tau failed %d", rc); } }
directory * read_dir(FILE *f) { directory *dir; direntry entry; int n, pf, ret; char *line; time_t oldt, newt; dir = dir_new(); n = 0; pf = 0; oldt = 0; init_parse_time(); while ((line=ftp_gets(f)) != NULL) { while ((ret=pfunc[pf](&entry, line)) == -1) { pf++; if (pf >= npfunc) { pf = 0; ret = 1; break; } } if (ret == 0) { dir_add(dir, &entry); n++; } free(line); if ((newt=time(NULL)) != oldt) { disp_status(DISP_STATUS, "listed %d", n); oldt = newt; } } #if 0 if (n == 0) { dir->line = (direntry *)malloc(sizeof(direntry)); dir->line->line = strdup(""); dir->line->type = 'x'; dir->line->name = strdup(""); dir->line->link = NULL; n = 1; } #endif return dir; }
/* it doesn't really create the directory. it makes the tree to the directory * and returns a link to the last node */ struct dir *create_directory(const char *directory){ char **tokens=cut_directory(directory); int i=0; struct dir *dir,*ptr; if(!root_dir){ root_dir=dir_new(); root_dir->name=""; } dir=root_dir; for(i=0;tokens[i];++i){ ptr=list_find(dir->subdir,tokens[i]); if(!ptr){ ptr=dir_new(); ptr->name=strdup(tokens[i]); dir->subdir=list_add(dir->subdir,tokens[i],ptr); } dir=ptr; } for(i=0;tokens[i];++i) free(tokens[i]); free(tokens); return dir; }
/* Randomly select something to do with a directory */ static void operate_on_dir(struct dir_info *dir) { size_t r; struct dir_entry_info *entry; r = tests_random_no(12); if (r == 0 && grow) /* When growing, 1 time in 12 create a file */ file_new(dir, make_name(dir)); else if (r == 1 && grow) /* When growing, 1 time in 12 create a directory */ dir_new(dir, make_name(dir)); else { /* Otherwise randomly select an entry to operate on */ r = tests_random_no(dir->number_of_entries); entry = dir->first; while (entry && r) { entry = entry->next; --r; } if (entry) operate_on_entry(entry); } }
Dir* cache_lookup (Cache *cache, const gchar *key, gboolean create_if_missing, GError **err) { Dir* dir; g_assert(key != NULL); g_return_val_if_fail(cache != NULL, NULL); /* Check cache */ dir = g_hash_table_lookup(cache->cache, key); if (dir != NULL) { gconf_log(GCL_DEBUG, "Using dir %s from cache", key); return dir; } else { /* Not in cache, check whether we already failed to load it */ if (cache_is_nonexistent(cache, key)) { if (!create_if_missing) return NULL; } else { /* Didn't already fail to load, try to load */ dir = dir_load (key, cache->root_dir, err); if (dir != NULL) { g_assert(err == NULL || *err == NULL); /* Cache it and add to parent */ cache_insert (cache, dir); cache_add_to_parent (cache, dir); return dir; } else { /* Remember that we failed to load it */ if (!create_if_missing) { cache_set_nonexistent(cache, key, TRUE); return NULL; } else { if (err && *err) { g_error_free(*err); *err = NULL; } } } } } g_assert(dir == NULL); g_assert(create_if_missing); g_assert(err == NULL || *err == NULL); if (dir == NULL) { gconf_log(GCL_DEBUG, "Creating new dir %s", key); dir = dir_new(key, cache->root_dir, cache->dir_mode, cache->file_mode); if (!dir_ensure_exists(dir, err)) { dir_destroy(dir); g_return_val_if_fail((err == NULL) || (*err != NULL) , NULL); return NULL; } else { cache_insert (cache, dir); cache_add_to_parent (cache, dir); cache_unset_nonexistent (cache, dir_get_name (dir)); } } return dir; }