From 7dcd2beb90a560819bf634e6b7dbd50686c026d9 Mon Sep 17 00:00:00 2001 From: Hisham Muhammad Date: Fri, 16 Oct 2009 20:15:01 +0000 Subject: [PATCH] extra checks for lsof failures --- OpenFilesScreen.c | 18 ++++++++++-------- OpenFilesScreen.h | 2 +- 2 files changed, 11 insertions(+), 9 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) { diff --git a/OpenFilesScreen.h b/OpenFilesScreen.h index d3290827..f5ce59ca 100644 --- a/OpenFilesScreen.h +++ b/OpenFilesScreen.h @@ -28,7 +28,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_ {