static void add(const char *fpath, const char *prefix = ".") { string_t fn = str(prefix) + "/" + str(fpath); char buf[512]; fsys::fileinfo_t inode; int err; static unsigned long uniq = 0; if(fsys::is_hidden(*fn) && !is(all)) return; err = fsys::info(*fn, &inode); if(err) { report(fpath, err); memset(&inode, 0, sizeof(inode)); } size_t size = strlen(fpath); caddr_t mp = (caddr_t)mpager.zalloc(sizeof(entry)); char *path = mpager.dup(fpath); char *id = path; const char *fname = strrchr(fpath, '/'); if(!fname) fname = strrchr(fpath, '\\'); if(fname) ++fname; else fname = path; if(is(timesort)) { struct tm *dt = localtime(&inode.st_mtime); snprintf(buf, sizeof(buf), "%04d%02d%02d %02d%02d%02d%s %08ld", dt->tm_year, dt->tm_mon, dt->tm_mday, dt->tm_hour, dt->tm_min, dt->tm_sec, fname, ++uniq); id = mpager.dup(buf); } entry *fp = new(mp) entry(&files, id); fp->name = path; fp->inode = inode; if(fsys::is_dir(&inode)) ++size; if(size > widest) widest = size; }
key::key(const char *keyid, const char *keyhash) : LinkedObject(&private_paths[NamedObject::keyindex(keyid, INDEX_KEYSIZE)]) { id = private_cache.dup(keyid); hash = private_cache.dup(keyhash); }