forked from pool/psmisc
37 lines
1.1 KiB
Diff
37 lines
1.1 KiB
Diff
--- src/fuser.c
|
|
+++ src/fuser.c 2008-05-16 14:58:07.906452331 +0200
|
|
@@ -1310,12 +1310,21 @@ void fill_unix_cache(struct unixsocket_l
|
|
return;
|
|
}
|
|
while (fgets(line, BUFSIZ, fp) != NULL) {
|
|
+ char * path;
|
|
+ scanned_path = (char*)0;
|
|
if (sscanf(line, "%*x: %*x %*x %*x %*x %*d %d %as",
|
|
- &scanned_inode,
|
|
- &scanned_path) != 2)
|
|
+ &scanned_inode, &scanned_path) != 2) {
|
|
+ if (scanned_path)
|
|
+ free(scanned_path);
|
|
continue;
|
|
+ }
|
|
+ if (scanned_path == (char*)0)
|
|
+ continue;
|
|
+ path = scanned_path;
|
|
+ if (*scanned_path == '@')
|
|
+ scanned_path++;
|
|
if (stat(scanned_path, &st) < 0) {
|
|
- free(scanned_path);
|
|
+ free(path);
|
|
continue;
|
|
}
|
|
if ( (newsocket = malloc(sizeof(struct unixsocket_list))) == NULL)
|
|
@@ -1323,7 +1332,7 @@ void fill_unix_cache(struct unixsocket_l
|
|
newsocket->sun_name = strdup(scanned_path);
|
|
newsocket->inode = st.st_ino;
|
|
newsocket->dev = st.st_dev;
|
|
- newsocket->net_inode = scanned_inode;
|
|
+ newsocket->net_inode = scanned_inode;
|
|
newsocket->next = *unixsocket_head;
|
|
*unixsocket_head = newsocket;
|
|
} /* while */
|