Lines Matching refs:dir

41 	DIR *dir;  member
66 const char *pattern, struct pvfs_dir *dir) in pvfs_list_no_wildcard() argument
72 dir->pvfs = pvfs; in pvfs_list_no_wildcard()
73 dir->no_wildcard = True; in pvfs_list_no_wildcard()
74 dir->end_of_search = False; in pvfs_list_no_wildcard()
75 dir->unix_path = talloc_strdup(dir, name->full_name); in pvfs_list_no_wildcard()
76 if (!dir->unix_path) { in pvfs_list_no_wildcard()
80 dir->single_name = talloc_strdup(dir, pattern); in pvfs_list_no_wildcard()
81 if (!dir->single_name) { in pvfs_list_no_wildcard()
85 dir->dir = NULL; in pvfs_list_no_wildcard()
86 dir->offset = 0; in pvfs_list_no_wildcard()
87 dir->pattern = NULL; in pvfs_list_no_wildcard()
95 static int pvfs_dirlist_destructor(struct pvfs_dir *dir) in pvfs_dirlist_destructor() argument
97 if (dir->dir) closedir(dir->dir); in pvfs_dirlist_destructor()
110 struct pvfs_dir *dir; in pvfs_list_start() local
117 dir = *dirp; in pvfs_list_start()
130 return pvfs_list_no_wildcard(pvfs, name, pattern, dir); in pvfs_list_start()
133 dir->unix_path = talloc_strdup(dir, name->full_name); in pvfs_list_start()
134 if (!dir->unix_path) { in pvfs_list_start()
138 dir->pattern = talloc_strdup(dir, pattern); in pvfs_list_start()
139 if (dir->pattern == NULL) { in pvfs_list_start()
143 dir->dir = opendir(name->full_name); in pvfs_list_start()
144 if (!dir->dir) { in pvfs_list_start()
148 dir->pvfs = pvfs; in pvfs_list_start()
149 dir->no_wildcard = False; in pvfs_list_start()
150 dir->end_of_search = False; in pvfs_list_start()
151 dir->offset = DIR_OFFSET_DOT; in pvfs_list_start()
152 dir->name_cache = talloc_zero_array(dir, in pvfs_list_start()
155 if (dir->name_cache == NULL) { in pvfs_list_start()
156 talloc_free(dir); in pvfs_list_start()
160 talloc_set_destructor(dir, pvfs_dirlist_destructor); in pvfs_list_start()
168 static void dcache_add(struct pvfs_dir *dir, const char *name) in dcache_add() argument
172 dir->name_cache_index = (dir->name_cache_index+1) % NAME_CACHE_SIZE; in dcache_add()
173 e = &dir->name_cache[dir->name_cache_index]; in dcache_add()
177 e->name = talloc_strdup(dir->name_cache, name); in dcache_add()
178 e->offset = dir->offset; in dcache_add()
184 const char *pvfs_list_next(struct pvfs_dir *dir, off_t *ofs) in pvfs_list_next() argument
187 enum protocol_types protocol = dir->pvfs->ntvfs->ctx->protocol; in pvfs_list_next()
190 if (dir->no_wildcard) { in pvfs_list_next()
191 dir->end_of_search = True; in pvfs_list_next()
194 return dir->single_name; in pvfs_list_next()
202 dir->offset = *ofs; in pvfs_list_next()
203 if (ms_fnmatch(dir->pattern, ".", protocol) == 0) { in pvfs_list_next()
204 dcache_add(dir, "."); in pvfs_list_next()
211 dir->offset = *ofs; in pvfs_list_next()
212 if (ms_fnmatch(dir->pattern, "..", protocol) == 0) { in pvfs_list_next()
213 dcache_add(dir, ".."); in pvfs_list_next()
219 rewinddir(dir->dir); in pvfs_list_next()
220 } else if (*ofs != dir->offset) { in pvfs_list_next()
221 seekdir(dir->dir, (*ofs) - DIR_OFFSET_BASE); in pvfs_list_next()
223 dir->offset = *ofs; in pvfs_list_next()
225 while ((de = readdir(dir->dir))) { in pvfs_list_next()
232 if (ms_fnmatch(dir->pattern, dname, protocol) != 0) { in pvfs_list_next()
233 char *short_name = pvfs_short_name_component(dir->pvfs, dname); in pvfs_list_next()
235 ms_fnmatch(dir->pattern, short_name, protocol) != 0) { in pvfs_list_next()
242 dir->offset = telldir(dir->dir) + DIR_OFFSET_BASE; in pvfs_list_next()
243 (*ofs) = dir->offset; in pvfs_list_next()
245 dcache_add(dir, dname); in pvfs_list_next()
250 dir->end_of_search = True; in pvfs_list_next()
257 const char *pvfs_list_unix_path(struct pvfs_dir *dir) in pvfs_list_unix_path() argument
259 return dir->unix_path; in pvfs_list_unix_path()
265 BOOL pvfs_list_eos(struct pvfs_dir *dir, off_t ofs) in pvfs_list_eos() argument
267 return dir->end_of_search; in pvfs_list_eos()
273 NTSTATUS pvfs_list_seek(struct pvfs_dir *dir, const char *name, off_t *ofs) in pvfs_list_seek() argument
278 dir->end_of_search = False; in pvfs_list_seek()
281 dir->offset = DIR_OFFSET_DOTDOT; in pvfs_list_seek()
282 *ofs = dir->offset; in pvfs_list_seek()
287 dir->offset = DIR_OFFSET_BASE; in pvfs_list_seek()
288 *ofs = dir->offset; in pvfs_list_seek()
292 for (i=dir->name_cache_index;i>=0;i--) { in pvfs_list_seek()
293 struct name_cache_entry *e = &dir->name_cache[i]; in pvfs_list_seek()
299 for (i=NAME_CACHE_SIZE-1;i>dir->name_cache_index;i--) { in pvfs_list_seek()
300 struct name_cache_entry *e = &dir->name_cache[i]; in pvfs_list_seek()
307 rewinddir(dir->dir); in pvfs_list_seek()
309 while ((de = readdir(dir->dir))) { in pvfs_list_seek()
311 dir->offset = telldir(dir->dir) + DIR_OFFSET_BASE; in pvfs_list_seek()
312 *ofs = dir->offset; in pvfs_list_seek()
317 dir->end_of_search = True; in pvfs_list_seek()
325 NTSTATUS pvfs_list_seek_ofs(struct pvfs_dir *dir, uint32_t resume_key, off_t *ofs) in pvfs_list_seek_ofs() argument
330 dir->end_of_search = False; in pvfs_list_seek_ofs()
343 rewinddir(dir->dir); in pvfs_list_seek_ofs()
344 if ((de=readdir(dir->dir)) == NULL) { in pvfs_list_seek_ofs()
345 dir->end_of_search = True; in pvfs_list_seek_ofs()
348 *ofs = telldir(dir->dir) + DIR_OFFSET_BASE; in pvfs_list_seek_ofs()
349 dir->offset = *ofs; in pvfs_list_seek_ofs()
353 for (i=dir->name_cache_index;i>=0;i--) { in pvfs_list_seek_ofs()
354 struct name_cache_entry *e = &dir->name_cache[i]; in pvfs_list_seek_ofs()
360 for (i=NAME_CACHE_SIZE-1;i>dir->name_cache_index;i--) { in pvfs_list_seek_ofs()
361 struct name_cache_entry *e = &dir->name_cache[i]; in pvfs_list_seek_ofs()
368 rewinddir(dir->dir); in pvfs_list_seek_ofs()
370 while ((de = readdir(dir->dir))) { in pvfs_list_seek_ofs()
371 dir->offset = telldir(dir->dir) + DIR_OFFSET_BASE; in pvfs_list_seek_ofs()
372 if (resume_key == (uint32_t)dir->offset) { in pvfs_list_seek_ofs()
373 *ofs = dir->offset; in pvfs_list_seek_ofs()
378 dir->end_of_search = True; in pvfs_list_seek_ofs()
390 DIR *dir = opendir(name->full_name); in pvfs_directory_empty() local
391 if (dir == NULL) { in pvfs_directory_empty()
395 while ((de = readdir(dir))) { in pvfs_directory_empty()
397 closedir(dir); in pvfs_directory_empty()
402 closedir(dir); in pvfs_directory_empty()