static int directory(struct nftw *state, struct stat64 *st) { struct dirent64 *dp; #ifndef FTW_USE_SEEKDIR struct dirent64 *cached; #endif int prefix, result; if ((result = enterdir(state)) == 0) { if ((state->flags & FTW_DEPTH) || ((result = (*state->invoke)(state, st, (!(state->flags & FTW_CHDIR) || eaccess(state->pathname, X_OK) != -1) ? FTW_D : FTW_DNR)) == 0 && state->action != FTW_SKD)) { if (!(state->flags & FTW_CHDIR) || (result = chdir(state->pathname)) == 0) { state->stem += strlen(&state->pathname[prefix = state->stem]) + (state->stem != 0 ? 1 : 0); ++state->depth; #ifdef FTW_USE_SEEKDIR while ((result = direntry(state, state->dirs, &dp)) == 0 && dp != NULL) { if ((result = process(state, dp)) != 0 || state->action == FTW_SKR) break; if (state->dirs->dir == NULL && (result = unspillfds(state, &state->pathname[(state->stem > 1) ? state->stem - 1 : 1])) != 0) break; } #else while ((result = direntry(state, state->dirs, &dp)) == 0 && dp != NULL) { if ((result = process(state, dp)) != 0 || state->action == FTW_SKR) break; if (state->dirs->dir == NULL) { if ((cached = state->dirs->contents) != NULL) { do { if ((result = process(state, cached)) != 0 || state->action == FTW_SKR) break; } while ((cached = (struct dirent64 *)((char *)cached + cached->d_reclen)) < (struct dirent64 *)((char *)state->dirs->contents + state->dirs->size)); } break; } } #endif --state->depth; state->pathname[(state->stem > 1) ? state->stem - 1 : 1] = '\0', state->stem = prefix; if (result == 0 && (!(state->flags & FTW_CHDIR) || (result = cd(state, &state->pathname[(prefix > 1) ? prefix - 1 : 1])) == 0)) { if (state->flags & FTW_DEPTH) result = (*state->invoke)(state, st, FTW_DP); } } else if (errno == EACCES) { result = (state->flags & FTW_DEPTH) ? (*state->invoke)(state, st, FTW_DNR) : 0; } else { state->error = errno; } } exitdir(state); } else if (state->error == EACCES) { result = (*state->invoke)(state, st, FTW_DNR); } return(result); }
static int spillfds(struct nftw *state) { struct directory *d; #ifndef FTW_USE_SEEKDIR struct dirent64 *dp, *grow; int len, result; #endif for (d = state->dirs; d->dir == NULL; d = d->link) ; #ifdef FTW_USE_SEEKDIR if ((d->posn = telldir(d->dir)) == -1) return(-1); #else (void)dircntl(d->dir, D_SETFLAG, dircntl(d->dir, D_GETFLAG) & ~D_FLAG_STAT); for (len = 0; (result = direntry(state, d, &dp)) == 0 && dp != NULL; len += dp->d_reclen) { if (len + dp->d_reclen > d->size) { if ((grow = realloc(d->contents, d->size += PATH_MAX)) == NULL) { free(d->contents), d->contents = NULL, d->size = 0; return(-1); } d->contents = grow; } memcpy((char *)d->contents + len, dp, dp->d_reclen); } if (result != 0) { free(d->contents), d->contents = NULL, d->size = 0; return(-1); } d->contents = (len != 0) ? realloc(d->contents, d->size = len) : NULL; #endif closedir(d->dir), d->dir = NULL; ++state->limit; return(0); }
void Directory::AddInfo(Biop::Directory &dir) { for (std::list<Biop::Binding>::iterator it=dir.bindings.begin(); it != dir.bindings.end(); ++it) { TemporaryDirectoryEntry::Ptr direntry(new TemporaryDirectoryEntry( ((Biop::BiopProfileBody *)(*it).ior.body.getPointer())->obj_loc.carousel_id, ((Biop::BiopProfileBody *)(*it).ior.body.getPointer())->obj_loc.module_id, ((Biop::BiopProfileBody *)(*it).ior.body.getPointer())->obj_loc.objkey, (*it).name.comps.front().id ) ); //std::list<CacheObject::Ptr> *izgosh=&toBeAssigned; toBeAssigned.push_back(direntry); } }
int fatfindfile(char *fname) { int rc, i, j; putstr("--MBR--\n"); rc = readblock(DOSBBSECTOR, buf); if (dos_partition(0)->dp_typ != 6) { putstr("bad partition type\n"); return -1; }; start = getulong(dos_partition(0)->dp_start); dump_long("start ", start); putstr("--BOOT--\n"); rc = readblock(start, buf); if (getushort(bootsector->bpbBytesPerSec) != 512) { putstr("bad sector size\n"); return -1; }; cluster_size = bootsector->bpbSecPerClust; dump_long("cluster_size ", cluster_size); start_fat = start + getushort(bootsector->bpbResSectors); dump_long("start_fat ", start_fat); root_size = getushort(bootsector->bpbRootDirEnts); root_size = (root_size * 32+511)/512; dump_long("root_size ", root_size); dump_long("FATsecs ", getushort(bootsector->bpbFATsecs)); dump_long("FATs ", bootsector->bpbFATs); start_root = start_fat + bootsector->bpbFATs * getushort(bootsector->bpbFATsecs); start = start_root + root_size - 2 * cluster_size; /* first data sector for 0-based clusters */ dump_long("start_root ", start_root); current_cluster = 0; putstr("--ROOT--\n"); for(j = 0; j<root_size; j++) { rc = readblock(start_root + j, buf); for(i = 0; i<16; i++) { rc = (direntry(i)->deName)[0]; if (rc == SLOT_EMPTY || rc == SLOT_DELETED) continue; rc = direntry(i)->deAttributes & (ATTR_VOLUME|ATTR_DIRECTORY); if (rc) continue; current_cluster = getushort(direntry(i)->deStartCluster); bytes_left = getulong(direntry(i)->deFileSize); putstr(direntry(i)->deName); putnl(); /* printf("%12s %02x %ld %ld\n", direntry(i)->deName, direntry(i)->deAttributes & 0x18, current_cluster, bytes_left ); */ if (!strncmp(direntry(i)->deName, fname, 11)) { break; }; current_cluster = 0; }; if (current_cluster) break; }; if (!current_cluster) { putstr("file not found\n"); return -1; }; current_sector = 0; putstr("File ok\n"); return 0; }
//returns true if the specified file exists UtlBoolean OsFileSystem::exists(const OsPath& filename) { OsDir direntry(filename); return direntry.exists(); }