void Filesystem::folder_sysobj(TiObj& out, std::string url){ out.clear(); string descfile = path_add(url,".sysobj.ti"); if ( this->exists(descfile) ){ out.load(descfile); } if ( out.classe() == "" ){ out.set("class", "Folder"); } else if ( !out.is("Folder") ){ out.set("class", "Folder:"+out.classe()); } }
std::string Filesystem::folder_type(std::string url){ string descfile = path_add(url,".sysobj.ti"); if ( this->exists(descfile) ){ TiObj meta; meta.load(descfile); return string("Folder:")+meta.classe(); } else { return "Folder"; } }
TiObj Filesystem::info(std::string url){ TiObj out; struct stat buf; string file_url = this->path_set(url); if ( stat(file_url.c_str(), &buf) ){ return this->error( strerror(errno), url ); } // Set node variables struct tm* clock; char strbuf[1024]; int permission = ((buf.st_mode & S_IRWXU) >> 6)*100 + ((buf.st_mode & S_IRWXG) >> 3)*10 + ((buf.st_mode & S_IRWXO)); out.set("permission", (long int) permission ); out.set("inode", (long int) buf.st_ino ); out.set("name", path_last(file_url) ); out.set("url", path_absolute(file_url) ); out.set("uid", (long int) buf.st_uid ); out.set("gid", (long int)buf.st_gid ); out.set("size_bytes", (long int)buf.st_size ); out.set("size_blocks", (long int)buf.st_blocks ); out.set("block_size", (long int)buf.st_blksize ); clock = gmtime(&(buf.st_atime)); sprintf(strbuf,"%d/%d/%d,%d:%d:%d",clock->tm_year+1900,clock->tm_mon+1,clock->tm_mday,clock->tm_hour,clock->tm_min,clock->tm_sec); out.set("atime", strbuf); clock = gmtime(&(buf.st_mtime)); sprintf(strbuf,"%d/%d/%d,%d:%d:%d",clock->tm_year+1900,clock->tm_mon+1,clock->tm_mday,clock->tm_hour,clock->tm_min,clock->tm_sec); out.set("mtime", strbuf); clock = gmtime(&(buf.st_ctime)); sprintf(strbuf,"%d/%d/%d,%d:%d:%d",clock->tm_year+1900,clock->tm_mon+1,clock->tm_mday,clock->tm_hour,clock->tm_min,clock->tm_sec); out.set("ctime", strbuf); // Get node type if (S_ISREG (buf.st_mode)){ out.classe() = this->file_type(file_url); } else if (S_ISLNK(buf.st_mode)){ out.classe() = "Link"; } else if (S_ISDIR (buf.st_mode)){ out.classe() = this->folder_type(file_url); } return out; }