forked from Lainports/freebsd-ports
o simply the code o lsof failure checks o coverity fixes PR: ports/143222 Submitted by: Hung-Yi Chen <gaod@hychen.org> Approved by: maintainer timeout (yzlin ; 220 days)
56 lines
1.7 KiB
C
56 lines
1.7 KiB
C
--- OpenFilesScreen.c.orig 2010-01-26 03:53:04.000000000 +0800
|
|
+++ OpenFilesScreen.c 2010-01-26 03:56:23.000000000 +0800
|
|
@@ -26,7 +26,7 @@
|
|
typedef struct OpenFiles_ProcessData_ {
|
|
char* data[256];
|
|
struct OpenFiles_FileData_* files;
|
|
- bool failed;
|
|
+ int error;
|
|
} OpenFiles_ProcessData;
|
|
|
|
typedef struct OpenFiles_FileData_ {
|
|
@@ -80,16 +80,18 @@
|
|
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 +108,7 @@
|
|
}
|
|
item->data[cmd] = entry;
|
|
}
|
|
- pclose(fd);
|
|
+ process->error = pclose(fd);
|
|
return process;
|
|
}
|
|
|
|
@@ -115,8 +117,10 @@
|
|
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) {
|