void dir_info(char * path, char * modes, char * relative) { DIR *d; struct dirent *dir; if ((d = opendir(path)) == NULL) { perror ("Wrong path, couldn't open..."); exit (1); } while ((dir = readdir(d))) { char * name = dir->d_name; char * path2 = (char*)malloc(2 + strlen(path) + strlen(name)); char * relative2 = (char*)malloc(2 + strlen(path) + strlen(name)); strcpy(path2, path); strcat(path2, name); strcpy(relative2, relative); strcat(relative2, name); if((int)dir->d_type == 4) { if( (strcmp(name, "..")!=0) && (strcmp(name, ".") != 0) ) { strcat(path2, "/"); strcat(relative2, "/"); dir_info(path2, modes, relative2); free(path2); free(relative2); } } if((int)dir->d_type == 8) { file_info(path2, modes, relative2); } } closedir(d); }
int main(int argc,char *argv[]) { if(argc != 2){ fprintf(stderr,"Usage %s DIR_Name format!\n",argv[0]); exit(-1); } dir_info(argv[1]); return 0; }
int main(int argc, char** argv) { if(argc!=3) { printf("Wrong arguments.\n"); return 0; } char * path; char * access; char * relative = "/"; path = argv[1]; access = argv[2]; dir_info(path, access, relative); return(0); }
short PMenu::parse( QDir d ) { if( !d.exists() ) return -1; PMenuItem *new_item; PMenu *new_menu; QDir new_dir; QStrList sort_order; QList<PMenuItem> item_list; item_list.setAutoDelete(FALSE); int pos; bool read_only = FALSE; sort_order.setAutoDelete(TRUE); QString file = d.path(); QFileInfo dir_info(file); if( !dir_info.isWritable() ) read_only = TRUE; file += "/.directory"; QFileInfo dir_fi(file); if( dir_fi.isReadable() ) { KConfig kconfig(file); kconfig.setGroup("KDE Desktop Entry"); QString order = kconfig.readEntry("SortOrder"); int len = order.length(); int j,i; QString temp; for( i = 0; i < len; ) { j = order.find(',', i); if( j == -1 ) j = len; temp = order.mid(i, j-i); temp.stripWhiteSpace(); sort_order.append(temp); i = j+1; } } const QFileInfoList *list = d.entryInfoList(); QFileInfoListIterator it( *list ); QFileInfo *fi; if( it.count() < 3 ) return -1; while ( (fi=it.current()) ) { if( fi->fileName() == "." || fi->fileName() == ".." ) { ++it; continue; } if( fi->isDir() ) { new_menu = new PMenu; new_item = new PMenuItem; new_dir.setPath( fi->filePath() ); new_item->read_only = read_only; if( new_menu->parse( new_dir ) < 0 || new_item->parse( fi, new_menu ) < 0 ) { delete new_menu; delete new_item; ++it; continue; } item_list.append(new_item); } else { //if( !fi->extension().contains("kdelnk") ) //if( !isKdelnkFile(fi->absFilePath())) // { ++it; continue; } new_item = new PMenuItem; new_item->read_only = read_only; if( new_item->parse(fi) < 0 ) delete new_item; else item_list.append(new_item); } ++it; } // sort items QString item_name; PMenuItem *item; for( item_name = sort_order.first(); !item_name.isEmpty(); item_name = sort_order.next() ) { for( item = item_list.first(); item != NULL; item = item_list.next() ) { if( item->real_name == item_name ) { add(item); item_list.removeRef(item); break; } } } if( item_list.count() != 0 ) { for( item = item_list.first(); item != NULL; item = item_list.next() ) { add(item); } } item_list.clear(); // insert separators sort_order.first(); while( (pos = sort_order.findNext((QString) "SEPARATOR")) >= 0 ) { sort_order.next(); new_item = new PMenuItem; new_item->entry_type = separator; new_item->read_only = read_only; insert(new_item, pos); } return 0; }