int printFilesPrefixMatch(char* directoryName, int indent, char* fileName) { DIR * directory = opendir(directoryName); struct dirent *currentFile; struct stat statp; char fileNameString[1024]; if (directory == NULL) { perror("failed to open directory"); return -1; } while (( currentFile = readdir(directory))) { if (!(strcmp(currentFile->d_name,".") && strcmp(currentFile->d_name,".."))) { continue; } strcpy(fileNameString,directoryName); strcat(fileNameString,"/"); strcat(fileNameString,currentFile->d_name); if(stat(fileNameString,&statp)) { perror("stat failed"); return -1; } if (S_ISREG(statp.st_mode)) { int flag; char* currentFiles=currentFile->d_name; char * result =strstr(currentFiles,fileName); flag =0; if(result!=NULL) { flag =1; } if(flag==1){ int k; for (k = 0; k< indent; k++) { printf(" "); } printPermission(statp); printf("%s (%d bytes)\n", currentFile->d_name, (int)statp.st_size); } } else if (!S_ISREG(statp.st_mode)) { int i; for(i = 0; i < indent; i++) { printf(" "); } printPermission(statp); printf("%s (sub-directory)\n", currentFile->d_name); printFilesPrefixMatch(fileNameString, indent + 1, fileName); } } if (errno!=0) { perror("readdir failed"); return -1; } if (closedir(directory)) { perror("closedir failed"); return -1; } return 0; }
int printFilesWithPermisions(char* directoryName, int indent, char* fileName) { DIR * directory = opendir(directoryName); struct dirent *currentFile; struct stat statp; char fileNameString[1024]; if (directory == NULL) { perror("failed to open directory"); return -1; } while (( currentFile = readdir(directory))) { if (!(strcmp(currentFile->d_name,".") && strcmp(currentFile->d_name,".."))) { continue; } strcpy(fileNameString,directoryName); strcat(fileNameString,"/"); strcat(fileNameString,currentFile->d_name); if(stat(fileNameString,&statp)) { perror("stat failed"); return -1; } if (S_ISREG(statp.st_mode) && (!strlen(fileName) || !strcmp(currentFile->d_name,fileName))) { int i; for (i = 0; i < indent; i++) { printf(" "); } printPermission(statp); printf("%s (%d bytes)\n", currentFile->d_name, (int)statp.st_size); } else if (!S_ISREG(statp.st_mode)) { int i; for(i = 0; i < indent; i++) { printf(" "); } printPermission(statp); printf("%s (sub-directory)\n", currentFile->d_name); printFilesWithPermisions(fileNameString, indent + 1, fileName); } } if (errno!=0) { perror("readdir failed"); return -1; } if (closedir(directory)) { perror("closedir failed"); return -1; } return 0; }
void list_childFileNfolder(int choice) { DIR *d; struct dirent *dir; d = opendir("./"); int child_choice = choice; if(d) { if(child_choice < i) scd = listDetails[child_choice].name; else { printf(MAKE_RED_DARK"\nYour choice is %d but the list contains %d", choice, (i-1)); printf("\nInvalid Input....Try Again...\n\n"RESET_COLOR); return; } closedir(d); } struct stat fileFoldStatus; stat(scd, &fileFoldStatus); struct passwd *own=getpwuid(fileFoldStatus.st_uid); int user_read, user_write, user_execute; int group_read, group_write, group_execute; int other_read, other_write, other_execute; if((S_ISREG(fileFoldStatus.st_mode))) { printf(MAKE_RED_DARK"\nFile Name :: %s\n"RESET_COLOR, scd); user_read = ((fileFoldStatus.st_mode &S_IRUSR) ? 1 : 0); user_write = ((fileFoldStatus.st_mode &S_IWUSR) ? 1 : 0); user_execute = ((fileFoldStatus.st_mode &S_IXUSR) ? 1 : 0); group_read = ((fileFoldStatus.st_mode &S_IRGRP) ? 1 : 0); group_write = ((fileFoldStatus.st_mode &S_IWGRP) ? 1 : 0); group_execute = ((fileFoldStatus.st_mode &S_IXGRP) ? 1 : 0); other_read = ((fileFoldStatus.st_mode &S_IROTH) ? 1 : 0); other_write = ((fileFoldStatus.st_mode &S_IWOTH) ? 1 : 0); other_execute = ((fileFoldStatus.st_mode &S_IXOTH) ? 1 : 0); printf("File User ID = %d\n", fileFoldStatus.st_uid); printf("File Group ID = %d\n", fileFoldStatus.st_gid); printf("File User Name = %s\n", own->pw_name); printPermission(user_read, user_write, user_execute, group_read, group_write, group_execute, other_read, other_write, other_execute); } else if(S_ISDIR(fileFoldStatus.st_mode)) { printf(MAKE_RED_DARK"\nDirectory :: %s\n"RESET_COLOR, scd); DIR *dc; struct dirent *dirc; dc = opendir(scd); chdir(scd); if(dc) { i = 0; while((dirc = readdir(dc)) != NULL) { //printf("\t%d\t%s\n", i, dirc->d_name); listDetails[i].sn = i; listDetails[i].name = dirc->d_name; i++; } sortList(i); printDetails(i); closedir(dc); } user_read = ((fileFoldStatus.st_mode &S_IRUSR) ? 1 : 0); user_write = ((fileFoldStatus.st_mode &S_IWUSR) ? 1 : 0); user_execute = ((fileFoldStatus.st_mode &S_IXUSR) ? 1 : 0); group_read = ((fileFoldStatus.st_mode &S_IRGRP) ? 1 : 0); group_write = ((fileFoldStatus.st_mode &S_IWGRP) ? 1 : 0); group_execute = ((fileFoldStatus.st_mode &S_IXGRP) ? 1 : 0); other_read = ((fileFoldStatus.st_mode &S_IROTH) ? 1 : 0); other_write = ((fileFoldStatus.st_mode &S_IWOTH) ? 1 : 0); other_execute = ((fileFoldStatus.st_mode &S_IXOTH) ? 1 : 0); printPermission(user_read, user_write, user_execute, group_read, group_write, group_execute, other_read, other_write, other_execute); } list_fileNfolder("."); }