commit f7d5edc72f08a7e13d2b1fe536d73afcf777fa28 Author: Arkadiusz Miśkiewicz <ar...@maven.pl> Date: Tue Jun 19 12:29:04 2018 +0200
- partial update to 2.90; man and alt-fixes patches need update/drop 63_init_keep_utf8_ttyflag.patch | 21 --- 64_init_selinux_enabled.patch | 40 ----- 95_kfreebsd_bootlogd.patch | 43 ----- 96_allow_multiple_console_output.patch | 294 --------------------------------- SysVinit.spec | 30 ++-- sysvinit-killall5.patch | 61 ------- sysvinit-lastlog.patch | 16 +- sysvinit-paths.patch | 4 +- sysvinit-pidof.patch | 40 ----- 9 files changed, 20 insertions(+), 529 deletions(-) --- diff --git a/SysVinit.spec b/SysVinit.spec index 89cb6ca..b6597e8 100644 --- a/SysVinit.spec +++ b/SysVinit.spec @@ -12,33 +12,28 @@ Summary(ru.UTF-8): Программы, управляющие базовыми Summary(tr.UTF-8): System V başlatma programı Summary(uk.UTF-8): Програми, що керують базовими системними процесами Name: SysVinit -Version: 2.88 -Release: 19 +Version: 2.90 +Release: 0.1 License: GPL v2+ Group: Base -Source0: http://download.savannah.gnu.org/releases/sysvinit/sysvinit-%{version}dsf.tar.bz2 -# Source0-md5: 6eda8a97b86e0a6f59dabbf25202aa6f +Source0: http://download.savannah.gnu.org/releases/sysvinit/sysvinit-%{version}.tar.xz +# Source0-md5: 7b6a16bde3da494b6aac7283b79c81de Source1: sysvinit.logrotate Source2: http://www.mif.pg.gda.pl/homepages/ankry/man-PLD/sysvinit-non-english-man-pages.tar.bz2 -Source3: crypttab.5 # Source2-md5: 9ae8a63a4685368fae19707f95475cca +Source3: crypttab.5 Patch0: sysvinit-paths.patch Patch1: sysvinit-bequiet.patch Patch2: sysvinit-wtmp.patch Patch3: sysvinit-man.patch Patch4: sysvinit-halt.patch Patch5: sysvinit-autofsck.patch -Patch6: sysvinit-pidof.patch -Patch7: sysvinit-killall5.patch + Patch8: sysvinit-nopowerstates-single.patch Patch9: sysvinit-lastlog.patch Patch10: sysvinit-alt-fixes.patch Patch11: sysvinit-quiet.patch Patch12: sysvinit-rebootconfirmation.patch -Patch13: 63_init_keep_utf8_ttyflag.patch -Patch14: 64_init_selinux_enabled.patch -Patch15: 95_kfreebsd_bootlogd.patch -Patch16: 96_allow_multiple_console_output.patch URL: http://savannah.nongnu.org/projects/sysvinit/ %if %{with selinux} BuildRequires: libselinux-devel >= 1.28 @@ -131,24 +126,19 @@ This package contains various tools used for process management. Ten pakiet zawiera różne narzędzia do zarządzania procesami. %prep -%setup -q -n sysvinit-%{version}dsf +%setup -q -n sysvinit-%{version} %patch0 -p1 %patch1 -p1 %patch2 -p1 %patch3 -p1 %patch4 -p1 %patch5 -p1 -%patch6 -p1 -%patch7 -p1 + %patch8 -p1 %patch9 -p1 %patch10 -p1 %patch11 -p1 %patch12 -p0 -%patch13 -p1 -%patch14 -p1 -%patch15 -p1 -%patch16 -p1 %build %{__make} -C src \ @@ -192,7 +182,6 @@ cp -a man/intl/* $RPM_BUILD_ROOT%{_mandir} cp %{SOURCE3} $RPM_BUILD_ROOT%{_mandir}/man5 # in util-linux -%{__rm} $RPM_BUILD_ROOT{/bin/mountpoint,%{_mandir}/man1/mountpoint.1*} %{__rm} $RPM_BUILD_ROOT{/sbin/sulogin,%{_mandir}/man8/sulogin.8*,%{_mandir}/*/man8/sulogin.8*} %{__rm} $RPM_BUILD_ROOT{/usr/bin/utmpdump,%{_mandir}/man1/utmpdump.1*} %{__rm} $RPM_BUILD_ROOT{/usr/bin/{last,lastb,mesg},%{_mandir}/man1/{last,lastb,mesg}.1*,%{_mandir}/*/man1/{last,lastb,mesg}.1*} @@ -240,7 +229,7 @@ fi %files %defattr(644,root,root,755) -%doc COPYRIGHT README doc/{Changelog,Propaganda} src/initscript.sample +%doc COPYRIGHT README doc/{Changelog,Propaganda} doc/initscript.sample %attr(755,root,root) %{_sbindir}/bootlogd %attr(755,root,root) %{_sbindir}/halt @@ -258,6 +247,7 @@ fi %attr(664,root,utmp) %ghost /var/log/wtmp %{_mandir}/man5/crypttab.5* +%{_mandir}/man5/initctl.5* %{_mandir}/man5/inittab.5* %{_mandir}/man5/initscript.5* %{_mandir}/man8/bootlogd.8* diff --git a/63_init_keep_utf8_ttyflag.patch b/63_init_keep_utf8_ttyflag.patch deleted file mode 100644 index e16831f..0000000 --- a/63_init_keep_utf8_ttyflag.patch +++ /dev/null @@ -1,21 +0,0 @@ -Purpose: Make sure the utf-8 flag is not cleared from the tty. -Authour: Samuel Thibault -Fixes: #547073 -Status: applied upstream - ---- a/src/init.c -+++ b/src/init.c -@@ -786,10 +786,11 @@ void console_stty(void) - /* - * Set pre and post processing - */ -- tty.c_iflag = IGNPAR|ICRNL|IXON|IXANY; -+ tty.c_iflag = IGNPAR|ICRNL|IXON|IXANY - #ifdef IUTF8 /* Not defined on FreeBSD */ -- tty.c_iflag |= IUTF8; -+ | (tty.c_iflag & IUTF8) - #endif /* IUTF8 */ -+ ; - tty.c_oflag = OPOST|ONLCR; - tty.c_lflag = ISIG|ICANON|ECHO|ECHOCTL|ECHOPRT|ECHOKE; - diff --git a/64_init_selinux_enabled.patch b/64_init_selinux_enabled.patch deleted file mode 100644 index 47584df..0000000 --- a/64_init_selinux_enabled.patch +++ /dev/null @@ -1,40 +0,0 @@ -Purpose: Try to fix the logic used to enable SELinux -Authour: Petter Reinholdtsen -Fixes: #580272 -Status: applied upstream - ---- a/src/init.c -+++ b/src/init.c -@@ -54,10 +54,6 @@ - - #ifdef WITH_SELINUX - # include <selinux/selinux.h> --# include <sys/mount.h> --# ifndef MNT_DETACH /* present in glibc 2.10, missing in 2.7 */ --# define MNT_DETACH 2 --# endif - #endif - - #ifdef __i386__ -@@ -2872,11 +2868,9 @@ int main(int argc, char **argv) - - #ifdef WITH_SELINUX - if (getenv("SELINUX_INIT") == NULL) { -- const int rc = mount("proc", "/proc", "proc", 0, 0); -- if (is_selinux_enabled() > 0) { -- putenv("SELINUX_INIT=YES"); -- if (rc == 0) umount2("/proc", MNT_DETACH); -+ if (is_selinux_enabled() != 1) { - if (selinux_init_load_policy(&enforce) == 0) { -+ putenv("SELINUX_INIT=YES"); - execv(myname, argv); - } else { - if (enforce > 0) { -@@ -2887,7 +2881,6 @@ int main(int argc, char **argv) - } - } - } -- if (rc == 0) umount2("/proc", MNT_DETACH); - } - #endif - /* Start booting. */ diff --git a/95_kfreebsd_bootlogd.patch b/95_kfreebsd_bootlogd.patch deleted file mode 100644 index 4ce4852..0000000 --- a/95_kfreebsd_bootlogd.patch +++ /dev/null @@ -1,43 +0,0 @@ -Description: Adapt TIOCCONS call to kfreebsd. - Isolate Linux-only forms of ioctl call with TIOCCONS. The BSD form of - this needs a pointer to an integer, and its fails with a NULL pointer. -Author: Mats Erik Andersson <deb...@gisladisker.se> -Last-Update: 2012-04-03 -Fixes: #576443 -Status: applied upstream - ---- sysvinit-2.88dsf.debian/src/bootlogd.c -+++ sysvinit-2.88dsf/src/bootlogd.c -@@ -482,6 +482,9 @@ - int realfd; - int n, m, i; - int todo; -+#ifndef __linux__ /* BSD-style ioctl needs an argument. */ -+ int on = 1; -+#endif - - fp = NULL; - logfile = LOGFILE; -@@ -554,15 +557,20 @@ - return 1; - } - -+#ifdef __linux__ - (void)ioctl(0, TIOCCONS, NULL); --#if 1 - /* Work around bug in 2.1/2.2 kernels. Fixed in 2.2.13 and 2.3.18 */ - if ((n = open("/dev/tty0", O_RDWR)) >= 0) { - (void)ioctl(n, TIOCCONS, NULL); - close(n); - } - #endif -- if (ioctl(pts, TIOCCONS, NULL) < 0) { -+#ifdef __linux__ -+ if (ioctl(pts, TIOCCONS, NULL) < 0) -+#else /* BSD usage of ioctl TIOCCONS. */ -+ if (ioctl(pts, TIOCCONS, &on) < 0) -+#endif -+ { - fprintf(stderr, "bootlogd: ioctl(%s, TIOCCONS): %s\n", - buf, strerror(errno)); - return 1; diff --git a/96_allow_multiple_console_output.patch b/96_allow_multiple_console_output.patch deleted file mode 100644 index 028e732..0000000 --- a/96_allow_multiple_console_output.patch +++ /dev/null @@ -1,294 +0,0 @@ -Description: Allow multiple console output - When booting a kernel with multiple serial console support, or multuiple - console arguments ala "console=tty1 console=ttyS0,9600" the kernel will output - messages to all consoles, init however will not. It will only send output to, - and accept input from, the last of the consoles. - . - This patch fixes it. -Author: Martin Buck <m...@rtin-buck.de> -Origin: other, https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=181756 -Bug-Debian: https://bugs.debian.org/181756 -Forwarded: no -Last-Update: 2014-07-20 - -Index: sysvinit-2.88dsf/src/bootlogd.c -=================================================================== ---- sysvinit-2.88dsf.orig/src/bootlogd.c 2010-03-23 15:37:01.000000000 +0100 -+++ sysvinit-2.88dsf/src/bootlogd.c 2013-07-15 09:56:55.953975300 +0200 -@@ -57,6 +57,7 @@ - char *Version = "@(#) bootlogd 2.86 03-Jun-2004 miqu...@cistron.nl"; - - #define LOGFILE "/var/log/boot" -+#define MAX_CONSOLES 16 - - char ringbuf[32768]; - char *endptr = ringbuf + sizeof(ringbuf); -@@ -73,6 +74,11 @@ - int pos; - } line; - -+struct real_cons { -+ char name[1024]; -+ int fd; -+}; -+ - /* - * Console devices as listed on the kernel command line and - * the mapping to actual devices in /dev -@@ -235,10 +241,10 @@ - } - - /* -- * Find out the _real_ console. Assume that stdin is connected to -+ * Find out the _real_ console(s). Assume that stdin is connected to - * the console device (/dev/console). - */ --int consolename(char *res, int rlen) -+int consolenames(struct real_cons *cons, int max_consoles) - { - #ifdef TIOCGDEV - unsigned int kdev; -@@ -247,34 +253,9 @@ - char buf[256]; - char *p; - int didmount = 0; -- int n, r; -+ int n; - int fd; -- -- fstat(0, &st); -- if (major(st.st_rdev) != 5 || minor(st.st_rdev) != 1) { -- /* -- * Old kernel, can find real device easily. -- */ -- int r = findtty(res, "/dev", rlen, st.st_rdev); -- if (0 != r) -- fprintf(stderr, "bootlogd: cannot find console device " -- "%d:%d under /dev\n", major(st.st_rdev), minor(st.st_rdev)); -- return r; -- } -- --#ifdef TIOCGDEV --# ifndef ENOIOCTLCMD --# define ENOIOCTLCMD 515 --# endif -- if (ioctl(0, TIOCGDEV, &kdev) == 0) { -- int r = findtty(res, "/dev", rlen, (dev_t)kdev); -- if (0 != r) -- fprintf(stderr, "bootlogd: cannot find console device " -- "%d:%d under /dev\n", major(kdev), minor(kdev)); -- return r; -- } -- if (errno != ENOIOCTLCMD) return -1; --#endif -+ int considx, num_consoles = 0; - - #ifdef __linux__ - /* -@@ -283,7 +264,7 @@ - stat("/", &st); - if (stat("/proc", &st2) < 0) { - perror("bootlogd: /proc"); -- return -1; -+ return 0; - } - if (st.st_dev == st2.st_dev) { - if (mount("proc", "/proc", "proc", 0, NULL) < 0) { -@@ -293,21 +274,21 @@ - didmount = 1; - } - -- n = 0; -- r = -1; -+ n = -1; - if ((fd = open("/proc/cmdline", O_RDONLY)) < 0) { - perror("bootlogd: /proc/cmdline"); - } else { - buf[0] = 0; -- if ((n = read(fd, buf, sizeof(buf) - 1)) >= 0) -- r = 0; -- else -+ if ((n = read(fd, buf, sizeof(buf) - 1)) < 0) - perror("bootlogd: /proc/cmdline"); - close(fd); - } - if (didmount) umount("/proc"); -+ -+ -+ if (n < 0) return 0; -+ - -- if (r < 0) return r; - - /* - * OK, so find console= in /proc/cmdline. -@@ -315,21 +296,32 @@ - */ - p = buf + n; - *p-- = 0; -- r = -1; - while (p >= buf) { - if (*p == ' ' || *p == '\t' || *p == '\r' || *p == '\n') { - *p-- = 0; - continue; - } - if (strncmp(p, "console=", 8) == 0 && -- isconsole(p + 8, res, rlen)) { -- r = 0; -- break; -+ isconsole(p + 8, cons[num_consoles].name, sizeof(cons[num_consoles].name))) { -+ /* -+ * Suppress duplicates -+ */ -+ for (considx = 0; considx < num_consoles; considx++) { -+ if (!strcmp(cons[num_consoles].name, cons[considx].name)) { -+ goto dontuse; -+ } -+ } -+ -+ num_consoles++; -+ if (num_consoles >= max_consoles) { -+ break; -+ } - } -+dontuse: - p--; - } - -- if (r == 0) return r; -+ if (num_consoles > 0) return num_consoles; - #endif - - /* -@@ -337,12 +329,12 @@ - * guess the default console. - */ - for (n = 0; defcons[n]; n++) -- if (isconsole(defcons[n], res, rlen)) -- return 0; -+ if (isconsole(defcons[n], cons[0].name, sizeof(cons[0].name))) -+ return 1; - - fprintf(stderr, "bootlogd: cannot deduce real console device\n"); - -- return -1; -+ return 0; - } - - -@@ -472,7 +464,6 @@ - struct timeval tv; - fd_set fds; - char buf[1024]; -- char realcons[1024]; - char *p; - char *logfile; - char *pidfile; -@@ -485,6 +476,9 @@ - #ifndef __linux__ /* BSD-style ioctl needs an argument. */ - int on = 1; - #endif -+ int considx; -+ struct real_cons cons[MAX_CONSOLES]; -+ int num_consoles, consoles_left; - - fp = NULL; - logfile = LOGFILE; -@@ -531,18 +525,22 @@ - /* - * Open console device directly. - */ -- if (consolename(realcons, sizeof(realcons)) < 0) -- return 1; -- -- if (strcmp(realcons, "/dev/tty0") == 0) -- strcpy(realcons, "/dev/tty1"); -- if (strcmp(realcons, "/dev/vc/0") == 0) -- strcpy(realcons, "/dev/vc/1"); -- -- if ((realfd = open_nb(realcons)) < 0) { -- fprintf(stderr, "bootlogd: %s: %s\n", buf, strerror(errno)); -+ if ((num_consoles = consolenames(cons, MAX_CONSOLES)) <= 0) - return 1; -+ consoles_left = num_consoles; -+ for (considx = 0; considx < num_consoles; considx++) { -+ if (strcmp(cons[considx].name, "/dev/tty0") == 0) -+ strcpy(cons[considx].name, "/dev/tty1"); -+ if (strcmp(cons[considx].name, "/dev/vc/0") == 0) -+ strcpy(cons[considx].name, "/dev/vc/1"); -+ -+ if ((cons[considx].fd = open_nb(cons[considx].name)) < 0) { -+ fprintf(stderr, "bootlogd: %s: %s\n", cons[considx].name, strerror(errno)); -+ consoles_left--; -+ } - } -+ if (!consoles_left) -+ return 1; - - /* - * Grab a pty, and redirect console messages to it. -@@ -626,26 +624,34 @@ - if ((n = read(ptm, inptr, endptr - inptr)) >= 0) { - /* - * Write data (in chunks if needed) -- * to the real output device. -+ * to the real output devices. - */ -- m = n; -- p = inptr; -- while (m > 0) { -- i = write(realfd, p, m); -- if (i >= 0) { -- m -= i; -- p += i; -- continue; -- } -- /* -- * Handle EIO (somebody hung -- * up our filedescriptor) -- */ -- realfd = write_err(pts, realfd, -- realcons, errno); -- if (realfd >= 0) continue; -- got_signal = 1; /* Not really */ -- break; -+ for (considx = 0; considx < num_consoles; considx++) { -+ if (cons[considx].fd < 0) continue; -+ m = n; -+ p = inptr; -+ while (m > 0) { -+ i = write(cons[considx].fd, p, m); -+ if (i >= 0) { -+ m -= i; -+ p += i; -+ continue; -+ } -+ /* -+ * Handle EIO (somebody hung -+ * up our filedescriptor) -+ */ -+ cons[considx].fd = write_err(pts, -+ cons[considx].fd, -+ cons[considx].name, errno); -+ if (cons[considx].fd >= 0) continue; -+ /* -+ * If this was the last console, -+ * generate a fake signal -+ */ -+ if (--consoles_left <= 0) got_signal = 1; -+ break; -+ } - } - - /* -@@ -691,7 +697,9 @@ - - close(pts); - close(ptm); -- close(realfd); -+ for (considx = 0; considx < num_consoles; considx++) { -+ close(cons[considx].fd); -+ } - - return 0; - } diff --git a/sysvinit-killall5.patch b/sysvinit-killall5.patch deleted file mode 100644 index 0361c30..0000000 --- a/sysvinit-killall5.patch +++ /dev/null @@ -1,61 +0,0 @@ -diff -u sysvinit-2.88dsf/src/killall5.c sysvinit-2.88dsf/src/killall5.c ---- sysvinit-2.88dsf/src/killall5.c 2011-12-03 23:12:52.373139250 +0100 -+++ sysvinit-2.88dsf/src/killall5.c 2011-12-03 23:19:21.498025134 +0100 -@@ -496,7 +497,7 @@ - /* Open the status file. */ - snprintf(path, sizeof(path), "%s/stat", d->d_name); - -- /* Read SID & statname from it. */ -+ /* Read statname from it. */ - if ((fp = fopen(path, "r")) != NULL) { - buf[0] = 0; - fgets(buf, sizeof(buf), fp); -@@ -509,7 +510,6 @@ - /* Read program name. */ - q = strrchr(buf, ')'); - if (q == NULL) { -- p->sid = 0; - nsyslog(LOG_ERR, - "can't get program name from /proc/%s\n", - path); -@@ -517,6 +517,7 @@ - if (p->argv1) free(p->argv1); - if (p->statname) free(p->statname); - free(p); -+ fclose(fp); - continue; - } - s++; -@@ -531,23 +532,25 @@ - - /* Get session, startcode, endcode. */ - startcode = endcode = 0; -- if (sscanf(q, "%*c %*d %*d %d %*d %*d %*u %*u " -+ if (sscanf(q, "%*c %*d %*d %*d %*d %*d %*u %*u " - "%*u %*u %*u %*u %*u %*d %*d " - "%*d %*d %*d %*d %*u %*u %*d " - "%*u %lu %lu", -- &p->sid, &startcode, &endcode) != 3) { -+ &startcode, &endcode) == 2) { -+ if (startcode == 0 && endcode == 0) -+ p->kernel = 1; -+ } -+ fclose(fp); -+ p->sid = getsid(pid); -+ if (p->sid < 0) { - p->sid = 0; -- nsyslog(LOG_ERR, "can't read sid from %s\n", -- path); -+ nsyslog(LOG_ERR, "can't read sid for pid %d\n", pid); - if (p->argv0) free(p->argv0); - if (p->argv1) free(p->argv1); - if (p->statname) free(p->statname); - free(p); - continue; - } -- if (startcode == 0 && endcode == 0) -- p->kernel = 1; -- fclose(fp); - } else { - /* Process disappeared.. */ - if (p->argv0) free(p->argv0); diff --git a/sysvinit-lastlog.patch b/sysvinit-lastlog.patch index 518442e..d09beb8 100644 --- a/sysvinit-lastlog.patch +++ b/sysvinit-lastlog.patch @@ -1,6 +1,6 @@ --- sysvinit-2.88dsf/src/Makefile.wiget 2010-04-11 11:30:27.000000000 +0200 +++ sysvinit-2.88dsf/src/Makefile 2011-12-03 23:38:27.970109228 +0100 -@@ -15,13 +15,13 @@ STATIC = +@@ -23,13 +23,13 @@ MNTPOINT= # For some known distributions we do not build all programs, otherwise we do. BIN = @@ -9,23 +9,23 @@ USRBIN = last mesg MAN1 = last.1 lastb.1 mesg.1 - MAN5 = initscript.5 inittab.5 + MAN5 = initscript.5 inittab.5 initctl.5 MAN8 = halt.8 init.8 killall5.8 pidof.8 poweroff.8 reboot.8 runlevel.8 -MAN8 += shutdown.8 telinit.8 fstab-decode.8 +MAN8 += shutdown.8 telinit.8 fstab-decode.8 lastlog.8 ifeq ($(DISTRO),) - BIN += mountpoint -@@ -96,6 +96,9 @@ halt: halt.o ifdown.o hddown.o utmp.o r - - last: last.o oldutmp.h + SBIN += sulogin bootlogd +@@ -115,6 +115,9 @@ halt: halt.o ifdown.o hddown.o utmp.o + last: LDLIBS += $(STATIC) + last: last.o ++lastlog: LDLIBS += $(STATIC) +lastlog: lastlog.o -+ $(CC) $(LDFLAGS) -o $@ lastlog.o + + mesg: LDLIBS += $(STATIC) mesg: mesg.o - mountpoint: mountpoint.o --- sysvinit-2.88dsf/src/lastlog.c.wiget 2011-12-03 23:31:01.697380950 +0100 +++ sysvinit-2.88dsf/src/lastlog.c 2011-12-03 23:31:01.697380950 +0100 @@ -0,0 +1,217 @@ diff --git a/sysvinit-paths.patch b/sysvinit-paths.patch index 31061ae..cef3603 100644 --- a/sysvinit-paths.patch +++ b/sysvinit-paths.patch @@ -9,8 +9,8 @@ all programs that init starts (so that you can set a generic umask, ulimit eg for ALL processes - see initscript.sample). - A "sulogin" program added that always asks for the root ---- sysvinit-2.88dsf/src/initscript.sample.wiget 2009-09-10 10:28:49.000000000 +0200 -+++ sysvinit-2.88dsf/src/initscript.sample 2011-12-03 22:25:33.574721688 +0100 +--- sysvinit-2.88dsf/doc/initscript.sample.wiget 2009-09-10 10:28:49.000000000 +0200 ++++ sysvinit-2.88dsf/doc/initscript.sample 2011-12-03 22:25:33.574721688 +0100 @@ -1,14 +1,14 @@ # -# initscript If this script is intalled as /etc/initscript, diff --git a/sysvinit-pidof.patch b/sysvinit-pidof.patch deleted file mode 100644 index 5f42812..0000000 --- a/sysvinit-pidof.patch +++ /dev/null @@ -1,40 +0,0 @@ ---- sysvinit-2.88dsf/src/killall5.c.wiget 2010-03-19 15:10:55.000000000 +0100 -+++ sysvinit-2.88dsf/src/killall5.c 2011-12-03 23:12:52.373139250 +0100 -@@ -66,8 +66,9 @@ char *Version = "@(#)killall5 2.86 31-Ju - - /* Info about a process. */ - typedef struct proc { -+ char *pathname; /* full path to executable */ - char *argv0; /* Name as found out from argv[0] */ -- char *argv0base; /* `basename argv[1]` */ -+ char *argv0base; /* `basename argv[0]` */ - char *argv1; /* Name as found out from argv[1] */ - char *argv1base; /* `basename argv[1]` */ - char *statname; /* the statname without braces */ -@@ -477,6 +478,7 @@ int readproc(int do_stat) - if (p->argv0) free(p->argv0); - if (p->argv1) free(p->argv1); - if (p->statname) free(p->statname); -+ if (p->pathname) free(p->pathname); - free(p); - } - plist = NULL; -@@ -616,6 +618,8 @@ int readproc(int do_stat) - break; - p->dev = st.st_dev; - p->ino = st.st_ino; -+ p->pathname = (char *)xmalloc(PATH_MAX); -+ readlink(path, p->pathname, PATH_MAX); - default: - break; - } -@@ -806,6 +810,9 @@ PIDQ_HEAD *pidof(char *prog) - p->argv0[0] == '-')) { - ok |= (strcmp(p->statname, s) == 0); - } -+ -+ if (prog[0] == '/' && p->pathname && strcmp(prog, p->pathname)) -+ ok = 0; - - if (ok) add_pid_to_q(q, p); - } ================================================================ ---- gitweb: http://git.pld-linux.org/gitweb.cgi/packages/SysVinit.git/commitdiff/f7d5edc72f08a7e13d2b1fe536d73afcf777fa28 _______________________________________________ pld-cvs-commit mailing list pld-cvs-commit@lists.pld-linux.org http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit