freebsd-ports/sysutils/htop/files/patch-OpenFilesScreen.c
Philip M. Gollucci b1e12b65f0 - pull some upstream svn fixes
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)
2010-09-08 22:51:55 +00:00

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) {