From a6297978bf33f7b455cfba7ce1ac6ba9bc3add17 Mon Sep 17 00:00:00 2001
From: OBS User unknown <null@suse.de>
Date: Fri, 15 May 2009 19:46:50 +0000
Subject: [PATCH] OBS-URL:
 https://build.opensuse.org/package/show/openSUSE:Factory/psmisc?expand=0&rev=17

---
 psmisc-22.5-pstree.patch                      | 111 ------------------
 psmisc-22.6-fdleak.patch                      |   6 +-
 psmisc-22.6-netunix.patch                     |   1 -
 psmisc-22.6-tigetstr.patch                    |   4 +-
 psmisc-22.6.tar.bz2                           |   3 -
 ...mleaks.patch => psmisc-22.7-memleaks.patch |  45 ++++---
 ...fuser.patch => psmisc-22.7-nfs4fuser.patch | 107 +++++++----------
 psmisc-22.7-pstree.patch                      |  69 +++++++++++
 ...eonly.patch => psmisc-22.7-writeonly.patch |  30 ++---
 psmisc-22.6.dif => psmisc-22.7.dif            |  10 +-
 psmisc-22.7.tar.bz2                           |   3 +
 psmisc.changes                                |  27 +++++
 psmisc.spec                                   |  40 +++++--
 13 files changed, 218 insertions(+), 238 deletions(-)
 delete mode 100644 psmisc-22.5-pstree.patch
 delete mode 100644 psmisc-22.6.tar.bz2
 rename psmisc-22.6-memleaks.patch => psmisc-22.7-memleaks.patch (81%)
 rename psmisc-22.6-nfs4fuser.patch => psmisc-22.7-nfs4fuser.patch (86%)
 create mode 100644 psmisc-22.7-pstree.patch
 rename psmisc-22.6-writeonly.patch => psmisc-22.7-writeonly.patch (81%)
 rename psmisc-22.6.dif => psmisc-22.7.dif (85%)
 create mode 100644 psmisc-22.7.tar.bz2

diff --git a/psmisc-22.5-pstree.patch b/psmisc-22.5-pstree.patch
deleted file mode 100644
index 86f0b74..0000000
--- a/psmisc-22.5-pstree.patch
+++ /dev/null
@@ -1,111 +0,0 @@
---- src/pstree.c
-+++ src/pstree.c	2007-04-25 00:00:00.000000000 +0200
-@@ -63,6 +63,7 @@ extern const char *__progname;
- #define UTF_HD	"\342\224\254"	/* U+252C, Horizontal and down */
- 
- #define VT_BEG	"\033(0\017"	/* use graphic chars */
-+#define VT_BEG_LEN 4
- #define VT_END	"\033(B"	/* back to normal char set */
- #define VT_V	"x"		/* see UTF definitions above */
- #define VT_VR	"t"
-@@ -113,13 +114,21 @@ sym_ascii =
-     UTF_VR UTF_H,
- 
-     UTF_V " ",
--    UTF_UR UTF_H, UTF_H UTF_H UTF_H, UTF_H UTF_HD UTF_H}, sym_vt100 =
-+    UTF_UR UTF_H, UTF_H UTF_H UTF_H, UTF_H UTF_HD UTF_H}
-+
-+, sym_vt100 =
-+/*
-+ * For the vt100 line drawing fix: Do not append VT_END here
-+ * because we may need to end the line drawing prematurely and
-+ * we have to turn off line drawing mode by sending VT_END
-+ * then anyway. That's why VT_END is sent by out_sym().
-+ */
- {
-   "  ",
--    VT_BEG VT_VR VT_H VT_END,
--    VT_BEG VT_V VT_END " ",
--    VT_BEG VT_UR VT_H VT_END,
--    VT_BEG VT_H VT_H VT_H VT_END, VT_BEG VT_H VT_HD VT_H VT_END}
-+    VT_BEG VT_VR VT_H,
-+    VT_BEG VT_V " ",
-+    VT_BEG VT_UR VT_H,
-+    VT_BEG VT_H VT_H VT_H, VT_BEG VT_H VT_HD VT_H}
- 
- , *sym = &sym_ascii;
- 
-@@ -144,9 +153,13 @@ out_char (char c)
-     putchar (c);
-   if (cur_x == output_width + 1 && trunc && ((c & 0xc0) != 0x80))
-   {
--    if (last_char || (c & 0x80))
-+    if (last_char || (c & 0x80)) {
-+/*
-+ * pstree: UTF-8: never draw >1 '+' at end of line(no change for ASCII):
-+ */
-+      cur_x++;
-       putchar ('+');
--    else
-+    } else
-       {
- 	last_char = c;
- 	cur_x--;
-@@ -163,6 +176,26 @@ out_string (const char *str)
-     out_char (*str++);
- }
- 
-+/*
-+ * Only affects vt100 line drawing mode: Do not count the strlen of
-+ * VT_BEG to prevent doing end-of-line way too early:
-+ */
-+static void
-+out_sym (const char *str)
-+{
-+  int seq = 0;
-+  if (sym == &sym_vt100 && *str == '\033') {
-+    seq = 1;
-+    if (cur_x <= output_width || !trunc)
-+      cur_x -= VT_BEG_LEN;
-+  }
-+  out_string(str);
-+  if (seq) {
-+      str = VT_END;
-+      while (*str)
-+        putchar (*str++);
-+  }
-+}
- 
- static int
- out_int (int x)			/* non-negative integers only */
-@@ -379,7 +412,11 @@ dump_tree (PROC * current, int level, in
-       {
- 	for (i = width[lvl] + 1; i; i--)
- 	  out_char (' ');
--	out_string (lvl == level - 1 ? last ? sym->last_2 : sym->branch_2 :
-+        /*
-+         * Replace all three symbol-drawing calls with calls to out_sym()
-+         * to handle VT100 line drawing sequences if VT100 mode is active:
-+         */
-+	out_sym (lvl == level - 1 ? last ? sym->last_2 : sym->branch_2 :
- 		    more[lvl + 1] ? sym->vert_2 : sym->empty_2);
-       }
-   if (rep < 2)
-@@ -489,7 +526,7 @@ dump_tree (PROC * current, int level, in
-       width[level] = comm_len + cur_x - offset + add;
-       if (cur_x >= output_width && trunc)
- 	{
--	  out_string (sym->first_3);
-+	  out_sym (sym->first_3);
- 	  out_string ("+");
- 	  out_newline ();
- 	}
-@@ -516,7 +553,7 @@ dump_tree (PROC * current, int level, in
- 		}
- 	      if (first)
- 		{
--		  out_string (next ? sym->first_3 : sym->single_3);
-+		  out_sym (next ? sym->first_3 : sym->single_3);
- 		  first = 0;
- 		}
- 	      dump_tree (walk->child, level + 1, count + 1,
diff --git a/psmisc-22.6-fdleak.patch b/psmisc-22.6-fdleak.patch
index 807b223..e763b51 100644
--- a/psmisc-22.6-fdleak.patch
+++ b/psmisc-22.6-fdleak.patch
@@ -1,10 +1,10 @@
 --- src/fuser.c
-+++ src/fuser.c	2008-09-01 15:03:05.054239318 +0200
-@@ -1306,6 +1308,7 @@ void fill_unix_cache(struct unixsocket_l
++++ src/fuser.c	2008-09-01 15:03:05.000000000 +0200
+@@ -1404,6 +1404,7 @@ void fill_unix_cache(struct unixsocket_l
  		*unixsocket_head = newsocket;
  	} /* while */
  
 +	fclose(fp);
  }
  
- /*
+ static inline int isnetfs(const char * type)
diff --git a/psmisc-22.6-netunix.patch b/psmisc-22.6-netunix.patch
index 9f80047..c4b066b 100644
--- a/psmisc-22.6-netunix.patch
+++ b/psmisc-22.6-netunix.patch
@@ -1,4 +1,3 @@
-Files src/fuser and src/fuser differ
 --- 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
diff --git a/psmisc-22.6-tigetstr.patch b/psmisc-22.6-tigetstr.patch
index 3013fe0..578f330 100644
--- a/psmisc-22.6-tigetstr.patch
+++ b/psmisc-22.6-tigetstr.patch
@@ -1,6 +1,6 @@
 --- src/pstree.c
-+++ src/pstree.c	2008-10-09 16:24:23.278874191 +0200
-@@ -861,7 +861,7 @@ main (int argc, char **argv)
++++ src/pstree.c	2008-10-09 16:24:23.000000000 +0200
+@@ -912,7 +912,7 @@ main (int argc, char **argv)
    } else if (isatty (1) && (termname = getenv ("TERM")) && \
               (strlen (termname) > 0) && \
               (setupterm (NULL, 1 /* stdout */, NULL) == OK) && \
diff --git a/psmisc-22.6.tar.bz2 b/psmisc-22.6.tar.bz2
deleted file mode 100644
index 8dd8b2e..0000000
--- a/psmisc-22.6.tar.bz2
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:d4a3f58fe7a968634741376469129ec935c692d07ab2468d2d875c6eb096ccbe
-size 229476
diff --git a/psmisc-22.6-memleaks.patch b/psmisc-22.7-memleaks.patch
similarity index 81%
rename from psmisc-22.6-memleaks.patch
rename to psmisc-22.7-memleaks.patch
index 0a965d4..2216de6 100644
--- a/psmisc-22.6-memleaks.patch
+++ b/psmisc-22.7-memleaks.patch
@@ -1,6 +1,6 @@
 --- src/fuser.c
-+++ src/fuser.c	2009-03-27 16:02:11.032550210 +0100
-@@ -218,6 +218,9 @@ static void scan_procs(const opt_type op
++++ src/fuser.c	2009-05-11 13:55:56.314402075 +0200
+@@ -225,6 +225,9 @@ static void scan_procs(const opt_type op
  			if (islocatedon(&cwd_real[0],  ino_tmp->name->filename))
  				add_matched_proc(ino_tmp->name, pid, uid, ACCESS_CWD);
  		}
@@ -8,9 +8,9 @@
 +		if (cwd_stat)  free(cwd_stat);
 +		if (exe_stat)  free(exe_stat);
  #ifndef __linux__
- 		check_dir(pid, "lib", dev_head, ino_head, uid, ACCESS_MMAP);
- 		check_dir(pid, "mmap", dev_head, ino_head, uid, ACCESS_MMAP);
-@@ -232,10 +235,9 @@ static void add_inode(struct inode_list
+ 		check_dir(pid, "lib", dev_head, ino_head, uid, ACCESS_MMAP, sockets, netdev);
+ 		check_dir(pid, "mmap", dev_head, ino_head, uid, ACCESS_MMAP, sockets, netdev);
+@@ -239,10 +242,9 @@ static void add_inode(struct inode_list
  {
  	struct inode_list *ino_tmp, *ino_head;
  
@@ -23,7 +23,7 @@
  	ino_tmp->name = this_name;
  	ino_tmp->device = device;
  	ino_tmp->inode = inode;
-@@ -243,15 +245,15 @@ static void add_inode(struct inode_list
+@@ -250,15 +252,15 @@ static void add_inode(struct inode_list
  	*ino_list = ino_tmp;
  }
  
@@ -42,7 +42,7 @@
  	dev_tmp->name = this_name;
  	dev_tmp->device = device;
  	dev_tmp->next = dev_head;
-@@ -262,16 +264,14 @@ static void add_ip_conn(struct ip_connec
+@@ -269,16 +271,14 @@ static void add_ip_conn(struct ip_connec
  {
  	struct ip_connections *ip_tmp, *ip_head;
  
@@ -60,7 +60,7 @@
  	*ip_list = ip_tmp;
  }
  
-@@ -280,10 +280,9 @@ static void add_ip6_conn(struct ip6_conn
+@@ -287,10 +287,9 @@ static void add_ip6_conn(struct ip6_conn
  {
  	struct ip6_connections *ip_tmp, *ip_head;
  
@@ -72,7 +72,7 @@
  	ip_tmp->name = this_name;
  	ip_tmp->lcl_port = lcl_port;
  	ip_tmp->rmt_port = rmt_port;
-@@ -312,7 +311,7 @@ static void add_matched_proc(struct name
+@@ -319,7 +318,7 @@ static void add_matched_proc(struct name
  		}
  	}
  	/* Not found */
@@ -81,7 +81,7 @@
  		fprintf(stderr,_("Cannot allocate memory for matched proc: %s\n"), strerror(errno));
  		return;
  	}
-@@ -322,10 +321,13 @@ static void add_matched_proc(struct name
+@@ -329,10 +328,13 @@ static void add_matched_proc(struct name
  	pptr->next = NULL;
  	/* set command name */
  	pptr->command = NULL;
@@ -96,7 +96,7 @@
  			cmdlen = 0;
  			for (cptr = cmdname; cmdlen < MAX_CMDNAME && *cptr ; cptr++) {
  				if (isprint(*cptr))
-@@ -339,6 +341,10 @@ static void add_matched_proc(struct name
+@@ -346,6 +348,10 @@ static void add_matched_proc(struct name
  		name_list->matched_procs = pptr;
  	else
  		last_proc->next = pptr;
@@ -107,7 +107,7 @@
  }
  
  int parse_mount(struct names *this_name, struct device_list **dev_list)
-@@ -365,16 +371,16 @@ int parse_file(struct names *this_name,
+@@ -372,16 +378,16 @@ int parse_file(struct names *this_name,
  
  	real[0] = '\0';
  	if (check4nfs(this_name->filename, real)) {
@@ -131,7 +131,7 @@
  		this_name->filename = strdup(real);
  	}
  
-@@ -1211,22 +1217,26 @@ static struct stat *get_pidstat(const op
+@@ -1218,23 +1224,25 @@ static struct stat *get_pidstat(const op
  	char pathname[256];
  	struct stat *st;
  
@@ -140,33 +140,30 @@
  		return NULL;
  	snprintf(pathname, 256, "/proc/%d/%s", pid, filename);
  	if (check4nfs(pathname, real)) {
--		if ((opts & (OPT_MOUNTPOINT|OPT_MOUNTS)) == 0)
+ 		if ((opts & (OPT_MOUNTPOINT|OPT_MOUNTS)) == 0)
 -			return NULL;
-+		if ((opts & (OPT_MOUNTPOINT|OPT_MOUNTS)) == 0) {
 +			goto out;
-+		}
  	}
--	if (stat(pathname, st) != 0) 
+ 	if (stat(pathname, st) != 0) 
 -		return NULL;
 -	else
 -		return st;
-+	if (stat(pathname, st) != 0) {
 +		goto out;
-+	}
 +	return st;
 +out:
 +	free(st);
 +	return NULL;
  }
  
- static void check_dir(const pid_t pid, const char *dirname, struct device_list *dev_head, struct inode_list *ino_head, const uid_t uid, const char access)
+ static void check_dir(const pid_t pid, const char *dirname, struct device_list *dev_head, struct inode_list *ino_head, const uid_t uid, const char access,
+                       struct unixsocket_list *sockets, dev_t netdev)
  {
 -	char *dirpath, *filepath;
 +	char *dirpath = NULL, *filepath = NULL;
  	DIR *dirp;
  	struct dirent *direntry;
  	struct inode_list *ino_tmp;
-@@ -1234,13 +1244,13 @@ static void check_dir(const pid_t pid, c
+@@ -1243,13 +1251,13 @@ static void check_dir(const pid_t pid, c
  	struct stat st, lst;
  
  	if ( (dirpath = malloc(MAX_PATHNAME)) == NULL)
@@ -183,7 +180,7 @@
  	while ( (direntry = readdir(dirp)) != NULL) {
  		if (direntry->d_name[0] < '0' || direntry->d_name[0] > '9')
  			continue;
-@@ -1274,8 +1284,11 @@ static void check_dir(const pid_t pid, c
+@@ -1293,8 +1301,11 @@ static void check_dir(const pid_t pid, c
  		}
  	} /* while fd_dent */
  	closedir(dirp);
@@ -197,7 +194,7 @@
  }
  
  static void check_map(const pid_t pid, const char *filename, struct device_list *dev_head, struct inode_list *ino_head, const uid_t uid, const char access)
-@@ -1330,7 +1343,7 @@ void add_mount_device(struct mountdev_li
+@@ -1349,7 +1360,7 @@ void add_mount_device(struct mountdev_li
  	struct mountdev_list *newmount;
  	/*printf("Adding mount Path: %s Dir:%s dev:%0x\n",dir, fsname, device);*/
  
@@ -206,7 +203,7 @@
  		return;
  	newmount->fsname = strdup(fsname);
  	newmount->dir = strdup(dir);
-@@ -1375,14 +1388,17 @@ void fill_unix_cache(struct unixsocket_l
+@@ -1394,14 +1405,17 @@ void fill_unix_cache(struct unixsocket_l
  			free(path);
  			continue;
  		}
diff --git a/psmisc-22.6-nfs4fuser.patch b/psmisc-22.7-nfs4fuser.patch
similarity index 86%
rename from psmisc-22.6-nfs4fuser.patch
rename to psmisc-22.7-nfs4fuser.patch
index f5cea16..32326a4 100644
--- a/psmisc-22.6-nfs4fuser.patch
+++ b/psmisc-22.7-nfs4fuser.patch
@@ -33,7 +33,7 @@
  cannot report on any processes that it doesn't have permission to look at
  the file descriptor table for.  The most common time this problem occurs
 --- src/fuser.c
-+++ src/fuser.c	2009-03-27 14:06:48.860001275 +0100
++++ src/fuser.c	2009-05-11 13:45:16.565902120 +0200
 @@ -32,9 +32,11 @@
  #include <stdlib.h>
  #include <string.h>
@@ -54,21 +54,21 @@
  
  #include "fuser.h"
  #include "signals.h"
-@@ -62,7 +65,7 @@
- static void add_matched_proc(struct names *name_list, const pid_t pid, const uid_t uid, const char access);
- static void check_dir(const pid_t pid, const char *dirname, struct device_list *dev_head, struct inode_list *ino_head, const uid_t uid, const char access);
+@@ -63,7 +66,7 @@ static void add_matched_proc(struct name
+ static void check_dir(const pid_t pid, const char *dirname, struct device_list *dev_head, struct inode_list *ino_head, const uid_t uid, const char access,
+                       struct unixsocket_list *sockets, dev_t netdev);
  static void check_map(const pid_t pid, const char *filename, struct device_list *dev_head, struct inode_list *ino_head, const uid_t uid, const char access);
 -static struct stat *get_pidstat(const pid_t pid, const char *filename);
 +static struct stat *get_pidstat(const opt_type opts, const pid_t pid, const char *filename, char *real);
  static uid_t getpiduid(const pid_t pid);
  static int print_matches(struct names *names_head, const opt_type opts, const int sig_number);
  static void kill_matched_proc(struct procs *pptr, const opt_type opts, const int sig_number);
-@@ -72,13 +75,19 @@ static void add_device(struct device_lis
+@@ -73,13 +76,20 @@ static void add_device(struct device_lis
  void scan_mount_devices(const opt_type opts, struct mountdev_list **mount_devices);
  void fill_unix_cache(struct unixsocket_list **unixsocket_head);
  static dev_t find_net_dev(void);
--static void scan_procs(struct names *names_head, struct inode_list *ino_head, struct device_list *dev_head);
-+static void scan_procs(const opt_type opts, struct names *names_head, struct inode_list *ino_head, struct device_list *dev_head);
+-static void scan_procs(struct names *names_head, struct inode_list *ino_head, struct device_list *dev_head, struct unixsocket_list *sockets, dev_t netdev);
++static void scan_procs(const opt_type opts, struct names *names_head, struct inode_list *ino_head, struct device_list *dev_head, struct unixsocket_list *sockets, dev_t netdev);
  #ifdef NFS_CHECKS
  static void scan_knfsd(struct names *names_head, struct device_list *dev_head);
  #endif /* NFS_CHECKS */
@@ -81,14 +81,15 @@
 +
 +typedef int (*stat_t)(const char*, struct stat*);
 +static int nfssafe(stat_t func, const char *path, struct stat *buf);
++
  
  static void usage (const char *errormsg)
  {
-@@ -127,7 +136,14 @@ void print_version()
+@@ -127,7 +137,14 @@ void print_version()
      "For more information about these matters, see the files named COPYING.\n"));
  }
  
--static void scan_procs(struct names *names_head, struct inode_list *ino_head, struct device_list *dev_head)
+-static void scan_procs(struct names *names_head, struct inode_list *ino_head, struct device_list *dev_head, struct unixsocket_list *sockets, dev_t netdev)
 +static int islocatedon(const char * path, const char * loc)
 +{
 +	if (!path || *path == '\0')
@@ -96,11 +97,11 @@
 +	return (strstr(path, loc) == path);
 +}
 +
-+static void scan_procs(const opt_type opts, struct names *names_head, struct inode_list *ino_head, struct device_list *dev_head)
++static void scan_procs(const opt_type opts, struct names *names_head, struct inode_list *ino_head, struct device_list *dev_head, struct unixsocket_list *sockets, dev_t netdev)
  {
  	DIR *topproc_dir;
  	struct dirent *topproc_dent;
-@@ -137,6 +153,9 @@ static void scan_procs(struct names *nam
+@@ -137,6 +154,9 @@ static void scan_procs(struct names *nam
  	pid_t pid, my_pid;
  	uid_t uid;
  	struct stat *cwd_stat, *exe_stat, *root_stat;
@@ -110,7 +111,7 @@
  
  	if ( (fd_dirpath = malloc(MAX_PATHNAME)) == NULL)
  		return;
-@@ -157,9 +176,10 @@ static void scan_procs(struct names *nam
+@@ -157,9 +177,10 @@ static void scan_procs(struct names *nam
  			continue;
  		uid = getpiduid(pid);
  
@@ -124,7 +125,7 @@
  		/* Scan the devices */
  		for (dev_tmp = dev_head ; dev_tmp != NULL ; dev_tmp = dev_tmp->next) {
  			if (exe_stat != NULL && exe_stat->st_dev == dev_tmp->device) 
-@@ -168,6 +188,14 @@ static void scan_procs(struct names *nam
+@@ -168,6 +189,14 @@ static void scan_procs(struct names *nam
  				add_matched_proc(dev_tmp->name, pid, uid, ACCESS_ROOT);
  			if (cwd_stat != NULL && cwd_stat->st_dev == dev_tmp->device) 
  				add_matched_proc(dev_tmp->name, pid, uid, ACCESS_CWD);
@@ -139,7 +140,7 @@
  		}
  		for (ino_tmp = ino_head ; ino_tmp != NULL ; ino_tmp = ino_tmp->next) {
  			if (exe_stat != NULL) {
-@@ -186,9 +214,19 @@ static void scan_procs(struct names *nam
+@@ -186,9 +215,19 @@ static void scan_procs(struct names *nam
  					add_matched_proc(ino_tmp->name, pid, uid, ACCESS_CWD);
  				}
  			}
@@ -153,13 +154,13 @@
 +				add_matched_proc(ino_tmp->name, pid, uid, ACCESS_CWD);
  		}
 +#ifndef __linux__
- 		check_dir(pid, "lib", dev_head, ino_head, uid, ACCESS_MMAP);
- 		check_dir(pid, "mmap", dev_head, ino_head, uid, ACCESS_MMAP);
+ 		check_dir(pid, "lib", dev_head, ino_head, uid, ACCESS_MMAP, sockets, netdev);
+ 		check_dir(pid, "mmap", dev_head, ino_head, uid, ACCESS_MMAP, sockets, netdev);
 +#endif
- 		check_dir(pid, "fd", dev_head, ino_head, uid, ACCESS_FILE);
+ 		check_dir(pid, "fd", dev_head, ino_head, uid, ACCESS_FILE, sockets, netdev);
  		check_map(pid, "maps", dev_head, ino_head, uid, ACCESS_MMAP);
  
-@@ -325,10 +363,26 @@ int parse_mount(struct names *this_name,
+@@ -325,10 +364,26 @@ int parse_mount(struct names *this_name,
  	return 0;
  }
  
@@ -187,7 +188,7 @@
  	if (stat(this_name->filename, &st) != 0) {
  		fprintf(stderr,_("Cannot stat %s: %s\n"), this_name->filename,
  				strerror(errno));
-@@ -342,34 +396,44 @@ int parse_file(struct names *this_name,
+@@ -342,34 +397,44 @@ int parse_file(struct names *this_name,
  	return 0;
  }
  
@@ -239,7 +240,7 @@
  
  	if (stat(this_name->filename, &st) != 0) {
  		fprintf(stderr,_("Cannot stat %s: %s\n"), this_name->filename,
-@@ -388,6 +452,16 @@ int parse_mounts(struct names *this_name
+@@ -388,6 +453,16 @@ int parse_mounts(struct names *this_name
  		}
  	}
  	return 0;
@@ -256,7 +257,7 @@
  }
  
  #ifdef WITH_IPV6
-@@ -652,6 +726,150 @@ void find_net6_sockets(struct inode_list
+@@ -652,6 +727,150 @@ void find_net6_sockets(struct inode_list
  }
  #endif
  
@@ -407,7 +408,7 @@
  int main(int argc, char *argv[])
  {
  	opt_type opts; 
-@@ -676,6 +894,7 @@ int main(int argc, char *argv[])
+@@ -676,6 +895,7 @@ int main(int argc, char *argv[])
  	int optc;
  	char *option;
  	char *nsptr;
@@ -415,7 +416,7 @@
  
  #ifdef WITH_IPV6
  	ipv4_only = ipv6_only = 0;
-@@ -692,7 +911,6 @@ int main(int argc, char *argv[])
+@@ -692,7 +912,6 @@ int main(int argc, char *argv[])
  #endif
  
  	netdev = find_net_dev();
@@ -423,7 +424,7 @@
  	fill_unix_cache(&unixsockets);
  
  	/* getopt doesnt like things like -SIGBLAH */
-@@ -782,6 +1000,10 @@ int main(int argc, char *argv[])
+@@ -782,6 +1001,10 @@ int main(int argc, char *argv[])
  			}
  			continue;
  		}
@@ -434,7 +435,7 @@
  		/* File specifications */
  		if ( (this_name = malloc(sizeof(struct names))) == NULL)
  			continue;
-@@ -828,10 +1050,14 @@ int main(int argc, char *argv[])
+@@ -828,10 +1051,14 @@ int main(int argc, char *argv[])
  				break;
  			default: /* FILE */
  				this_name->filename = strdup(argv[optc]);
@@ -452,31 +453,12 @@
  				break;
  		}
  
-@@ -857,25 +1083,26 @@ int main(int argc, char *argv[])
- 	if (!ipv4_only) {
- #endif
- 		if (tcp_connection_list != NULL)
--			find_net_sockets(&match_inodes, tcp_connection_list, "tcp",netdev);
-+			find_net_sockets(&match_inodes, tcp_connection_list, "tcp", netdev);
- 		if (udp_connection_list != NULL)
--			find_net_sockets(&match_inodes, udp_connection_list, "udp",netdev);
-+			find_net_sockets(&match_inodes, udp_connection_list, "udp", netdev);
- #ifdef WITH_IPV6
- 	}
- 	if (!ipv6_only) {
- 		if (tcp6_connection_list != NULL)
--			find_net6_sockets(&match_inodes, tcp6_connection_list, "tcp",netdev);
-+			find_net6_sockets(&match_inodes, tcp6_connection_list, "tcp", netdev);
- 		if (udp6_connection_list != NULL)
--			find_net6_sockets(&match_inodes,  udp6_connection_list, "udp",netdev);
-+			find_net6_sockets(&match_inodes,  udp6_connection_list, "udp", netdev);
- 	}
- #endif
+@@ -872,10 +1099,11 @@ int main(int argc, char *argv[])
  #ifdef DEBUG
  	debug_match_lists(names_head, match_inodes, match_devices);
  #endif
--	scan_procs(names_head, match_inodes, match_devices);
-+	scan_procs(opts, names_head, match_inodes, match_devices);
+-	scan_procs(names_head, match_inodes, match_devices, unixsockets, netdev);
++	scan_procs(opts, names_head, match_inodes, match_devices, unixsockets, netdev);
  #ifdef NFS_CHECKS
      scan_knfsd(names_head, match_devices);
  #endif /* NFS_CHECKS */
@@ -484,7 +466,7 @@
  	return print_matches(names_head,opts, sig_number);
  }
  
-@@ -978,7 +1205,7 @@ static int print_matches(struct names *n
+@@ -978,7 +1206,7 @@ static int print_matches(struct names *n
  
  }
  
@@ -493,7 +475,7 @@
  {
  	char pathname[256];
  	struct stat *st;
-@@ -986,6 +1213,10 @@ static struct stat *get_pidstat(const pi
+@@ -986,6 +1214,10 @@ static struct stat *get_pidstat(const pi
  	if ( (st = malloc(sizeof(struct stat))) == NULL)
  		return NULL;
  	snprintf(pathname, 256, "/proc/%d/%s", pid, filename);
@@ -504,23 +486,16 @@
  	if (stat(pathname, st) != 0) 
  		return NULL;
  	else
-@@ -1012,13 +1243,14 @@ static void check_dir(const pid_t pid, c
- 	while ( (direntry = readdir(dirp)) != NULL) {
- 		if (direntry->d_name[0] < '0' || direntry->d_name[0] > '9')
- 			continue;
--
- 		snprintf(filepath, MAX_PATHNAME, "/proc/%d/%s/%s",
- 			pid, dirname, direntry->d_name);
- 		if (stat(filepath, &st) != 0) {
- 			fprintf(stderr, _("Cannot stat file %s: %s\n"),filepath, strerror(errno));
- 		} else {
+@@ -1030,6 +1262,8 @@ static void check_dir(const pid_t pid, c
+ 				}
+ 			}
  			for (dev_tmp = dev_head ; dev_tmp != NULL ; dev_tmp = dev_tmp->next) {
 +				if (dev_tmp->name->name_space & NAMESPACE_NFS)
 +					continue;
  				if (st.st_dev == dev_tmp->device) {
  					if (access == ACCESS_FILE && (lstat(filepath, &lst)==0) && (lst.st_mode & S_IWUSR)) {
  						add_matched_proc(dev_tmp->name, pid,uid, ACCESS_FILEWR|access);
-@@ -1028,6 +1260,8 @@ static void check_dir(const pid_t pid, c
+@@ -1039,6 +1273,8 @@ static void check_dir(const pid_t pid, c
  				}
  			}
  			for (ino_tmp = ino_head ; ino_tmp != NULL ; ino_tmp = ino_tmp->next) {
@@ -529,7 +504,7 @@
  				if (st.st_dev == ino_tmp->device && st.st_ino == ino_tmp->inode) {
  					if (access == ACCESS_FILE && (lstat(filepath, &lst)==0) && (lst.st_mode & S_IWUSR)) {
  						add_matched_proc(ino_tmp->name, pid,uid, ACCESS_FILEWR|access);
-@@ -1039,6 +1273,8 @@ static void check_dir(const pid_t pid, c
+@@ -1050,6 +1286,8 @@ static void check_dir(const pid_t pid, c
  		}
  	} /* while fd_dent */
  	closedir(dirp);
@@ -538,7 +513,7 @@
  }
  
  static void check_map(const pid_t pid, const char *filename, struct device_list *dev_head, struct inode_list *ino_head, const uid_t uid, const char access)
-@@ -1059,12 +1295,18 @@ static void check_map(const pid_t pid, c
+@@ -1070,12 +1308,18 @@ static void check_map(const pid_t pid, c
  		if (sscanf(line, "%*s %*s %*s %x:%x %lld", 
  					&tmp_maj, &tmp_min, &tmp_inode) == 3) {
  			tmp_device = tmp_maj * 256 + tmp_min;
@@ -559,7 +534,7 @@
  		}
  	}
  	fclose(fp);
-@@ -1135,6 +1377,16 @@ void fill_unix_cache(struct unixsocket_l
+@@ -1146,6 +1390,16 @@ void fill_unix_cache(struct unixsocket_l
  
  }
  
@@ -576,7 +551,7 @@
  /*
   * scan_mount_devices : Create a list of mount points and devices
   *   This list is used later for matching purposes
-@@ -1144,17 +1396,94 @@ void scan_mount_devices(const opt_type o
+@@ -1155,17 +1409,94 @@ void scan_mount_devices(const opt_type o
  	FILE *mntfp;
  	struct mntent *mnt_ptr;
  	struct stat st;
@@ -673,7 +648,7 @@
  }
  
  #ifdef DEBUG
-@@ -1280,3 +1609,56 @@ static void scan_knfsd(struct names *nam
+@@ -1291,3 +1622,56 @@ static void scan_knfsd(struct names *nam
      }
  }
  #endif /* NFSCHECKS */
@@ -731,7 +706,7 @@
 +	return -1;
 +}
 --- src/fuser.h
-+++ src/fuser.h	2009-03-27 13:23:36.136000974 +0100
++++ src/fuser.h	2009-03-27 13:23:36.000000000 +0100
 @@ -80,9 +80,33 @@ struct unixsocket_list {
  	struct unixsocket_list *next;
  };
diff --git a/psmisc-22.7-pstree.patch b/psmisc-22.7-pstree.patch
new file mode 100644
index 0000000..0160a05
--- /dev/null
+++ b/psmisc-22.7-pstree.patch
@@ -0,0 +1,69 @@
+--- src/pstree.c
++++ src/pstree.c	2009-05-11 13:32:34.749902293 +0200
+@@ -60,6 +60,7 @@ extern const char *__progname;
+ #define UTF_HD	"\342\224\254"	/* U+252C, Horizontal and down */
+ 
+ #define VT_BEG	"\033(0\017"	/* use graphic chars */
++#define VT_LEN	4
+ #define VT_END	"\033(B"	/* back to normal char set */
+ #define VT_V	"x"		/* see UTF definitions above */
+ #define VT_VR	"t"
+@@ -220,6 +221,27 @@ out_string (const char *str)
+     out_char (*str++);
+ }
+ 
++/*
++ * Only affects vt100 line drawing mode: Do not count the strlen of
++ * VT_BEG to prevent doing end-of-line way too early:
++ */
++static void
++out_sym (const char *str)
++{
++  int seq = 0;
++  if (sym == &sym_vt100 && *str == '\033') {
++    seq = 1;
++    if (cur_x <= output_width || !trunc)
++      cur_x -= VT_LEN;
++  }
++  out_string(str);
++  if (seq) {
++      str = VT_END;
++      while (*str)
++        putchar (*str++);
++  }
++}
++
+ 
+ static int
+ out_int (int x)			/* non-negative integers only */
+@@ -431,7 +453,11 @@ dump_tree (PROC * current, int level, in
+       {
+ 	for (i = width[lvl] + 1; i; i--)
+ 	  out_char (' ');
+-	out_string (lvl == level - 1 ? last ? sym->last_2 : sym->branch_2 :
++	/*
++	 * Replace all three symbol-drawing calls with calls to out_sym()
++	 * to handle VT100 line drawing sequences if VT100 mode is active:
++	 */
++	out_sym (lvl == level - 1 ? last ? sym->last_2 : sym->branch_2 :
+ 		    more[lvl + 1] ? sym->vert_2 : sym->empty_2);
+       }
+   if (rep < 2)
+@@ -543,7 +569,7 @@ dump_tree (PROC * current, int level, in
+       width[level] = comm_len + cur_x - offset + add;
+       if (cur_x >= output_width && trunc)
+ 	{
+-	  out_string (sym->first_3);
++	  out_sym (sym->first_3);
+ 	  out_string ("+");
+ 	  out_newline ();
+ 	}
+@@ -570,7 +596,7 @@ dump_tree (PROC * current, int level, in
+ 		}
+ 	      if (first)
+ 		{
+-		  out_string (next ? sym->first_3 : sym->single_3);
++		  out_sym (next ? sym->first_3 : sym->single_3);
+ 		  first = 0;
+ 		}
+ 	      dump_tree (walk->child, level + 1, count + 1,
diff --git a/psmisc-22.6-writeonly.patch b/psmisc-22.7-writeonly.patch
similarity index 81%
rename from psmisc-22.6-writeonly.patch
rename to psmisc-22.7-writeonly.patch
index 7a46bd3..6fcbe2c 100644
--- a/psmisc-22.6-writeonly.patch
+++ b/psmisc-22.7-writeonly.patch
@@ -1,13 +1,13 @@
 --- doc/fuser.1
-+++ doc/fuser.1	2008-08-07 14:51:18.000000000 +0200
-@@ -10,6 +10,7 @@ fuser \- identify processes using files 
++++ doc/fuser.1	2009-05-11 13:49:21.894401999 +0200
+@@ -11,6 +11,7 @@ fuser \- identify processes using files
  .IR space\  ]
  .RB [ \-k
  .RB [ \-i ]
 +.RB [ \-w ]
- .RB [ \- \fIsignal
+ .RB [ \- \fISIGNAL
  ] ]
- .RB [ \-muvf ]
+ .IR name " ..."
 @@ -74,6 +75,9 @@ other \fBfuser\fP processes. The effecti
  .IP \fB\-i\fP
  Ask the user for confirmation before killing a process. This option is
@@ -19,8 +19,8 @@
  List all known signal names.
  .IP \fB\-m\fP
 --- src/fuser.c
-+++ src/fuser.c	2008-08-07 15:49:28.714368021 +0200
-@@ -66,7 +66,7 @@ static void check_map(const pid_t pid, c
++++ src/fuser.c	2009-05-11 13:50:26.796428307 +0200
+@@ -69,7 +69,7 @@ static void check_map(const pid_t pid, c
  static struct stat *get_pidstat(const opt_type opts, const pid_t pid, const char *filename, char *real);
  static uid_t getpiduid(const pid_t pid);
  static int print_matches(struct names *names_head, const opt_type opts, const int sig_number);
@@ -29,16 +29,16 @@
  
  int parse_mount(struct names *this_name, struct device_list **dev_list);
  static void add_device(struct device_list **dev_list, struct names  *this_name, dev_t device);
-@@ -89,7 +89,7 @@ static void usage (const char *errormsg)
+@@ -97,7 +97,7 @@ static void usage (const char *errormsg)
  		fprintf(stderr, "%s\n", errormsg);
  
    fprintf (stderr, _(
--    "Usage: fuser [ -a | -s | -c ] [ -n SPACE ] [ -SIGNAL ] [ -kimuv ] NAME...\n"
-+    "Usage: fuser [ -a | -s | -c ] [ -n SPACE ] [ -SIGNAL ] [ -kimuvw ] NAME...\n"
-     "             [ - ] [ -n SPACE ] [ -SIGNAL ] [ -kimuv ] NAME...\n"
+-    "Usage: fuser [ -fuv ] [ -a | -s ] [ -4 | -6 ] [ -c | -m | -n SPACE ] [ -k [ -i ] [ -SIGNAL ]] NAME...\n"
++    "Usage: fuser [ -fuv ] [ -a | -s ] [ -4 | -6 ] [ -c | -m | -n SPACE ] [ -k [ -i ] [ -w ] [ -SIGNAL ]] NAME...\n"
      "       fuser -l\n"
      "       fuser -V\n"
-@@ -106,6 +106,7 @@ static void usage (const char *errormsg)
+     "Show which processes use the named files, sockets, or filesystems.\n\n"
+@@ -113,6 +113,7 @@ static void usage (const char *errormsg)
      "    -SIGNAL   send this signal instead of SIGKILL\n"
      "    -u        display user IDs\n"
      "    -v        verbose output\n"
@@ -46,7 +46,7 @@
      "    -V        display version information\n"));
  #ifdef WITH_IPV6
    fprintf (stderr, _(
-@@ -901,6 +902,9 @@ int main(int argc, char *argv[])
+@@ -982,6 +983,9 @@ int main(int argc, char *argv[])
  				case 'v':
  					opts |= OPT_VERBOSE;
  					break;
@@ -56,7 +56,7 @@
  				case 'V':
  					print_version();
  					return 0;
-@@ -1033,6 +1037,7 @@ static int print_matches(struct names *n
+@@ -1119,6 +1123,7 @@ static int print_matches(struct names *n
  	int len = 0;
  	struct passwd *pwent = NULL;
  	int have_match = 0;
@@ -64,7 +64,7 @@
  	
      	for (nptr = names_head; nptr != NULL ; nptr = nptr->next) {
  		if (opts & OPT_SILENT) {
-@@ -1103,21 +1108,23 @@ static int print_matches(struct names *n
+@@ -1189,21 +1194,23 @@ static int print_matches(struct names *n
      				len = 0;
      				first = 0;
      			}
@@ -99,7 +99,7 @@
  }
  
  static struct stat *get_pidstat(const opt_type opts, const pid_t pid, const char *filename, char *real)
-@@ -1403,21 +1410,26 @@ static int ask(const pid_t pid)
+@@ -1562,21 +1569,26 @@ static int ask(const pid_t pid)
  	} /* while */
  }
  
diff --git a/psmisc-22.6.dif b/psmisc-22.7.dif
similarity index 85%
rename from psmisc-22.6.dif
rename to psmisc-22.7.dif
index de5a9f5..36dfca1 100644
--- a/psmisc-22.6.dif
+++ b/psmisc-22.7.dif
@@ -1,10 +1,10 @@
 --- configure.ac
-+++ configure.ac	2007-12-14 15:01:53.293387939 +0100
++++ configure.ac	2009-05-11 13:59:05.145901759 +0200
 @@ -1,10 +1,10 @@
  dnl Process this file with autoconf to produce a configure script.
 -AC_PREREQ(2.61)
 +AC_PREREQ(2.60)
- AC_INIT([psmisc],[22.6])
+ AC_INIT([psmisc],[22.7])
  AC_CONFIG_SRCDIR([src/comm.h])
  AC_CONFIG_HEADER([config.h])
  AC_CONFIG_AUX_DIR([config])
@@ -33,8 +33,8 @@
  dnl Checks for library functions.
  AC_FUNC_CLOSEDIR_VOID
 --- src/fuser.c
-+++ src/fuser.c	2008-10-01 18:02:08.469114183 +0200
-@@ -147,7 +147,6 @@ static void scan_procs(const opt_type op
++++ src/fuser.c	2008-10-01 18:02:08.000000000 +0200
+@@ -149,7 +149,6 @@ static void scan_procs(const opt_type op
  {
  	DIR *topproc_dir;
  	struct dirent *topproc_dent;
@@ -42,7 +42,7 @@
  	struct inode_list *ino_tmp;
  	struct device_list *dev_tmp;
  	pid_t pid, my_pid;
-@@ -157,11 +156,6 @@ static void scan_procs(const opt_type op
+@@ -159,11 +158,6 @@ static void scan_procs(const opt_type op
  	char cwd_real[PATH_MAX+1];
  	char exe_real[PATH_MAX+1];
  
diff --git a/psmisc-22.7.tar.bz2 b/psmisc-22.7.tar.bz2
new file mode 100644
index 0000000..303b2b3
--- /dev/null
+++ b/psmisc-22.7.tar.bz2
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2b9581bb21ec92d70653240069d4c1dd088c6a7f381dfc6d6590175d8988e823
+size 249141
diff --git a/psmisc.changes b/psmisc.changes
index db13669..2581b6c 100644
--- a/psmisc.changes
+++ b/psmisc.changes
@@ -1,3 +1,30 @@
+-------------------------------------------------------------------
+Mon May 11 14:04:09 CEST 2009 - werner@suse.de
+
+- Update to psmisc-22.7
+  * Updated Polish, Russian, Swedish and Indonesian PO files
+  * Changed fuser.1 so signal is SIGNAL to reduce confusion about wether
+    or not it is a parameter Debian #517413
+  * fuser.1 references pkill(1) Debian #517414
+  * Added Chinese (traditional) PO file
+  * Updated Russian PO file
+  * Clarified -m and -c for fuser Debian #467289
+  * Patch from Arnaud Giersch to fix udp ports in fuser Debian #502208
+  * pstree man page mentions -Z may not be available Debian #478327
+  * pstree handles UTF-8 lengths much better Debian #413503
+  * killall says no process found when process not found Debian #500097
+  * pstree makes a bigger buffer for -al flags Debian #352603
+  * Dynamically reallocate buffer for fuser patch from Don Armstrong
+  * Updated Indonesian PO file
+  * peekfd off by one problem in fds Debian #460530
+  * Patch from Marcus Watts for better comm handling in pstree
+  * Updated Hungarian po file
+  * Updated French and German po files
+  * Fuser -m detects more open sockets SF patch #1728412 Thnks marienz
+  * Updated Italian, Chinese simplified, Dutch, Swedish and Polish po files
+  * Removed old fuser
+- Adapt our patches
+
 -------------------------------------------------------------------
 Fri Mar 27 16:56:24 CET 2009 - werner@suse.de
 
diff --git a/psmisc.spec b/psmisc.spec
index 5630658..6a2088f 100644
--- a/psmisc.spec
+++ b/psmisc.spec
@@ -1,5 +1,5 @@
 #
-# spec file for package psmisc (Version 22.6)
+# spec file for package psmisc (Version 22.7)
 #
 # Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany.
 #
@@ -26,19 +26,19 @@ License:        GPL v2 or later
 Group:          System/Monitoring
 PreReq:         %fillup_prereq %insserv_prereq
 AutoReqProv:    on
-Version:        22.6
-Release:        64
+Version:        22.7
+Release:        1
 Provides:       ps:/usr/bin/killall
 Summary:        Utilities for managing processes on your system
 Source:         http://switch.dl.sourceforge.net/sourceforge/psmisc/psmisc-%{version}.tar.bz2
-Patch0:         %name-%version.dif
-Patch1:         %name-22.5-pstree.patch
-Patch2:         %name-22.6-nfs4fuser.patch
+Patch0:         %name-22.7.dif
+Patch1:         %name-22.7-pstree.patch
+Patch2:         %name-22.7-nfs4fuser.patch
 Patch3:         %name-22.6-netunix.patch
-Patch4:         %name-22.6-writeonly.patch
+Patch4:         %name-22.7-writeonly.patch
 Patch5:         %name-22.6-fdleak.patch
 Patch6:         %name-22.6-tigetstr.patch
-Patch7:         %name-22.6-memleaks.patch
+Patch7:         %name-22.7-memleaks.patch
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 %define nopeek  s390 s390x ia64
 
@@ -107,6 +107,30 @@ rm -rf $RPM_BUILD_ROOT
 %{_mandir}/man1/pstree.1*
 
 %changelog
+* Mon May 11 2009 werner@suse.de
+- Update to psmisc-22.7
+  * Updated Polish, Russian, Swedish and Indonesian PO files
+  * Changed fuser.1 so signal is SIGNAL to reduce confusion about wether
+  or not it is a parameter Debian #517413
+  * fuser.1 references pkill(1) Debian #517414
+  * Added Chinese (traditional) PO file
+  * Updated Russian PO file
+  * Clarified -m and -c for fuser Debian #467289
+  * Patch from Arnaud Giersch to fix udp ports in fuser Debian #502208
+  * pstree man page mentions -Z may not be available Debian #478327
+  * pstree handles UTF-8 lengths much better Debian #413503
+  * killall says no process found when process not found Debian #500097
+  * pstree makes a bigger buffer for -al flags Debian #352603
+  * Dynamically reallocate buffer for fuser patch from Don Armstrong
+  * Updated Indonesian PO file
+  * peekfd off by one problem in fds Debian #460530
+  * Patch from Marcus Watts for better comm handling in pstree
+  * Updated Hungarian po file
+  * Updated French and German po files
+  * Fuser -m detects more open sockets SF patch #1728412 Thnks marienz
+  * Updated Italian, Chinese simplified, Dutch, Swedish and Polish po files
+  * Removed old fuser
+- Adapt our patches
 * Fri Mar 27 2009 werner@suse.de
 - nfs4fuser: do not match on shadow mounts
 - resolve some memory leaks in fuser