summaryrefslogtreecommitdiffstats
path: root/OpenFilesScreen.c
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2009-10-16 20:15:01 +0000
committerHisham Muhammad <hisham@gobolinux.org>2009-10-16 20:15:01 +0000
commit7dcd2beb90a560819bf634e6b7dbd50686c026d9 (patch)
tree4dbe51d3d24bdb2833b8e3b47d3fbc8026a2c067 /OpenFilesScreen.c
parenta20ba78b5e14a62e3bc4f1f879e900fb1ecd0f79 (diff)
extra checks for lsof failures
Diffstat (limited to 'OpenFilesScreen.c')
-rw-r--r--OpenFilesScreen.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/OpenFilesScreen.c b/OpenFilesScreen.c
index a312d0fb..3b7bfa92 100644
--- a/OpenFilesScreen.c
+++ b/OpenFilesScreen.c
@@ -26,7 +26,7 @@ in the source distribution for its full text.
typedef struct OpenFiles_ProcessData_ {
char* data[256];
struct OpenFiles_FileData_* files;
- bool failed;
+ int error;
} OpenFiles_ProcessData;
typedef struct OpenFiles_FileData_ {
@@ -80,16 +80,16 @@ static OpenFiles_ProcessData* OpenFilesScreen_getProcessData(int pid) {
OpenFiles_ProcessData* process = calloc(sizeof(OpenFiles_ProcessData), 1);
OpenFiles_FileData* file = NULL;
OpenFiles_ProcessData* item = process;
- process->failed = true;
bool anyRead = false;
+ if (!fd) {
+ process->error = 127;
+ return process;
+ }
while (!feof(fd)) {
int cmd = fgetc(fd);
- if (cmd == EOF && !anyRead) {
- process->failed = true;
+ if (cmd == EOF && !anyRead)
break;
- }
anyRead = true;
- process->failed = false;
char* entry = malloc(1024);
if (!fgets(entry, 1024, fd)) break;
char* newline = strrchr(entry, '\n');
@@ -106,7 +106,7 @@ static OpenFiles_ProcessData* OpenFilesScreen_getProcessData(int pid) {
}
item->data[cmd] = entry;
}
- pclose(fd);
+ process->error = pclose(fd);
return process;
}
@@ -115,8 +115,10 @@ static void OpenFilesScreen_scan(OpenFilesScreen* this) {
int index = MAX(Panel_getSelectedIndex(panel), 0);
Panel_prune(panel);
OpenFiles_ProcessData* process = OpenFilesScreen_getProcessData(this->process->pid);
- if (process->failed) {
+ if (process->error == 127) {
Panel_add(panel, (Object*) ListItem_new("Could not execute 'lsof'. Please make sure it is available in your $PATH.", 0));
+ } else if (process->error == 1) {
+ Panel_add(panel, (Object*) ListItem_new("Failed listing open files.", 0));
} else {
OpenFiles_FileData* file = process->files;
while (file) {

© 2014-2024 Faster IT GmbH | imprint | privacy policy