The following commit has been merged in the master branch:
commit fc860a55b26aee3d774ed010c43822491852bbc2
Author: Guillem Jover <[EMAIL PROTECTED]>
Date: Sun Aug 3 20:29:46 2008 +0300
s-s-d: Move alternative function implementations together
diff --git a/ChangeLog b/ChangeLog
index 1424327..77000d3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2008-08-03 Guillem Jover <[EMAIL PROTECTED]>
+ * utils/start-stop-daemon.c: Move the different implementations
+ of the same function for different operating systems together.
+
+2008-08-03 Guillem Jover <[EMAIL PROTECTED]>
+
* utils/start-stop-daemon.c (MIN_POLL_INTERVAL): Use proper UTF-8 mu
symbol for the unit in the comment.
diff --git a/utils/start-stop-daemon.c b/utils/start-stop-daemon.c
index bf95164..12d68e6 100644
--- a/utils/start-stop-daemon.c
+++ b/utils/start-stop-daemon.c
@@ -652,6 +652,47 @@ parse_options(int argc, char * const *argv)
}
+#if defined(OSHURD)
+static void
+init_procset(void)
+{
+ struct ps_context *context;
+ error_t err;
+
+ err = ps_context_create(getproc(), &context);
+ if (err)
+ error(1, err, "ps_context_create");
+
+ err = proc_stat_list_create(context, &procset);
+ if (err)
+ error(1, err, "proc_stat_list_create");
+
+ err = proc_stat_list_add_all(procset, 0, 0);
+ if (err)
+ error(1, err, "proc_stat_list_add_all");
+}
+
+static struct proc_stat *
+get_proc_stat (pid_t pid, ps_flags_t flags)
+{
+ struct proc_stat *ps;
+ ps_flags_t wanted_flags = PSTAT_PID | flags;
+
+ if (!procset)
+ init_procset();
+
+ ps = proc_stat_list_pid_proc_stat(procset, pid);
+ if (!ps)
+ return NULL;
+ if (proc_stat_set_flags(ps, wanted_flags))
+ return NULL;
+ if ((proc_stat_flags(ps) & wanted_flags) != wanted_flags)
+ return NULL;
+
+ return ps;
+}
+#endif
+
#if defined(OSLinux)
static int
pid_is_exec(pid_t pid, const struct stat *esb)
@@ -676,7 +717,40 @@ pid_is_exec(pid_t pid, const struct stat *esb)
return (sb.st_dev == esb->st_dev && sb.st_ino == esb->st_ino);
}
+#elif defined(OShpux)
+static int
+pid_is_exec(pid_t pid, const struct stat *esb)
+{
+ struct pst_status pst;
+
+ if (pstat_getproc(&pst, sizeof(pst), (size_t)0, (int)pid) < 0)
+ return 0;
+ return ((dev_t)pst.pst_text.psf_fsid.psfs_id == esb->st_dev
+ && (ino_t)pst.pst_text.psf_fileid == esb->st_ino);
+}
+#elif defined(HAVE_KVM_H)
+static int
+pid_is_exec(pid_t pid, const char *name)
+{
+ kvm_t *kd;
+ int nentries;
+ struct kinfo_proc *kp;
+ char errbuf[_POSIX2_LINE_MAX], *pidexec;
+ kd = kvm_openfiles(NULL, NULL, NULL, O_RDONLY, errbuf);
+ if (kd == NULL)
+ errx(1, "%s", errbuf);
+ kp = kvm_getprocs(kd, KERN_PROC_PID, pid, &nentries);
+ if (kp == NULL)
+ errx(1, "%s", kvm_geterr(kd));
+ pidexec = (&kp->kp_proc)->p_comm;
+ if (strlen(name) != strlen(pidexec))
+ return 0;
+ return (strcmp(name, pidexec) == 0) ? 1 : 0;
+}
+#endif
+
+#if defined(OSLinux)
static int
pid_is_user(pid_t pid, uid_t uid)
{
@@ -688,7 +762,51 @@ pid_is_user(pid_t pid, uid_t uid)
return 0;
return (sb.st_uid == uid);
}
+#elif defined(OSHURD)
+static int
+pid_is_user(pid_t pid, uid_t uid)
+{
+ struct proc_stat *ps;
+
+ ps = get_proc_stat(pid, PSTAT_OWNER_UID);
+ return ps && proc_stat_owner_uid(ps) == uid;
+}
+#elif defined(OShpux)
+static int
+pid_is_user(pid_t pid, uid_t uid)
+{
+ struct pst_status pst;
+
+ if (pstat_getproc(&pst, sizeof(pst), (size_t)0, (int)pid) < 0)
+ return 0;
+ return ((uid_t)pst.pst_uid == uid);
+}
+#elif defined(HAVE_KVM_H)
+static int
+pid_is_user(pid_t pid, uid_t uid)
+{
+ kvm_t *kd;
+ int nentries; /* Value not used */
+ uid_t proc_uid;
+ struct kinfo_proc *kp;
+ char errbuf[_POSIX2_LINE_MAX];
+ kd = kvm_openfiles(NULL, NULL, NULL, O_RDONLY, errbuf);
+ if (kd == NULL)
+ errx(1, "%s", errbuf);
+ kp = kvm_getprocs(kd, KERN_PROC_PID, pid, &nentries);
+ if (kp == NULL)
+ errx(1, "%s", kvm_geterr(kd));
+ if (kp->kp_proc.p_cred)
+ kvm_read(kd, (u_long)&(kp->kp_proc.p_cred->p_ruid),
+ &proc_uid, sizeof(uid_t));
+ else
+ return 0;
+ return (proc_uid == (uid_t)uid);
+}
+#endif
+
+#if defined(OSLinux)
static int
pid_is_cmd(pid_t pid, const char *name)
{
@@ -712,74 +830,77 @@ pid_is_cmd(pid_t pid, const char *name)
fclose(f);
return (c == ')' && *name == '\0');
}
-#endif /* OSLinux */
-
-#if defined(OSHURD)
-static void
-init_procset(void)
-{
- struct ps_context *context;
- error_t err;
-
- err = ps_context_create(getproc(), &context);
- if (err)
- error(1, err, "ps_context_create");
-
- err = proc_stat_list_create(context, &procset);
- if (err)
- error(1, err, "proc_stat_list_create");
-
- err = proc_stat_list_add_all(procset, 0, 0);
- if (err)
- error(1, err, "proc_stat_list_add_all");
-}
-
-static struct proc_stat *
-get_proc_stat (pid_t pid, ps_flags_t flags)
+#elif defined(OSHurd)
+static int
+pid_is_cmd(pid_t pid, const char *name)
{
struct proc_stat *ps;
- ps_flags_t wanted_flags = PSTAT_PID | flags;
-
- if (!procset)
- init_procset();
- ps = proc_stat_list_pid_proc_stat(procset, pid);
- if (!ps)
- return NULL;
- if (proc_stat_set_flags(ps, wanted_flags))
- return NULL;
- if ((proc_stat_flags(ps) & wanted_flags) != wanted_flags)
- return NULL;
-
- return ps;
+ ps = get_proc_stat(pid, PSTAT_ARGS);
+ return ps && !strcmp(proc_stat_args(ps), name);
}
-
+#elif defined(OShpux)
static int
-pid_is_user(pid_t pid, uid_t uid)
+pid_is_cmd(pid_t pid, const char *name)
{
- struct proc_stat *ps;
+ struct pst_status pst;
- ps = get_proc_stat(pid, PSTAT_OWNER_UID);
- return ps && proc_stat_owner_uid(ps) == uid;
+ if (pstat_getproc(&pst, sizeof(pst), (size_t)0, (int)pid) < 0)
+ return 0;
+ return (strcmp(pst.pst_ucomm, name) == 0);
}
-
+#elif defined(HAVE_KVM_H)
static int
pid_is_cmd(pid_t pid, const char *name)
{
- struct proc_stat *ps;
+ kvm_t *kd;
+ int nentries, argv_len = 0;
+ struct kinfo_proc *kp;
+ char errbuf[_POSIX2_LINE_MAX], buf[_POSIX2_LINE_MAX];
+ char **pid_argv_p;
+ char *start_argv_0_p, *end_argv_0_p;
- ps = get_proc_stat(pid, PSTAT_ARGS);
- return ps && !strcmp(proc_stat_args(ps), name);
+ kd = kvm_openfiles(NULL, NULL, NULL, O_RDONLY, errbuf);
+ if (kd == NULL)
+ errx(1, "%s", errbuf);
+ kp = kvm_getprocs(kd, KERN_PROC_PID, pid, &nentries);
+ if (kp == NULL)
+ errx(1, "%s", kvm_geterr(kd));
+ pid_argv_p = kvm_getargv(kd, kp, argv_len);
+ if (pid_argv_p == NULL)
+ errx(1, "%s", kvm_geterr(kd));
+
+ start_argv_0_p = *pid_argv_p;
+ /* Find and compare string */
+
+ /* Find end of argv[0] then copy and cut of str there. */
+ end_argv_0_p = strchr(*pid_argv_p, ' ');
+ if (end_argv_0_p == NULL)
+ /* There seems to be no space, so we have the command
+ * allready in its desired form. */
+ start_argv_0_p = *pid_argv_p;
+ else {
+ /* Tests indicate that this never happens, since
+ * kvm_getargv itself cuts of tailing stuff. This is
+ * not what the manpage says, however. */
+ strncpy(buf, *pid_argv_p, (end_argv_0_p - start_argv_0_p));
+ buf[(end_argv_0_p - start_argv_0_p) + 1] = '\0';
+ start_argv_0_p = buf;
+ }
+
+ if (strlen(name) != strlen(start_argv_0_p))
+ return 0;
+ return (strcmp(name, start_argv_0_p) == 0) ? 1 : 0;
}
+#endif
+#if defined(OSHURD)
static int
pid_is_running(pid_t pid)
{
return get_proc_stat(pid, 0) != NULL;
}
-
#else /* !OSHURD */
-
static int
pid_is_running(pid_t pid)
{
@@ -795,8 +916,7 @@ pid_is_running(pid_t pid)
return 1;
}
-
-#endif /* OSHURD */
+#endif
static void
check(pid_t pid)
@@ -862,9 +982,7 @@ do_procinit(void)
if (!foundany)
fatal("nothing in /proc - not mounted?");
}
-#endif /* OSLinux */
-
-#if defined(OSHURD)
+#elif defined(OSHURD)
static int
check_proc_stat(struct proc_stat *ps)
{
@@ -880,134 +998,7 @@ do_procinit(void)
proc_stat_list_for_each(procset, check_proc_stat);
}
-#endif /* OSHURD */
-
-#ifdef HAVE_KVM_H
-static int
-pid_is_cmd(pid_t pid, const char *name)
-{
- kvm_t *kd;
- int nentries, argv_len = 0;
- struct kinfo_proc *kp;
- char errbuf[_POSIX2_LINE_MAX], buf[_POSIX2_LINE_MAX];
- char **pid_argv_p;
- char *start_argv_0_p, *end_argv_0_p;
-
- kd = kvm_openfiles(NULL, NULL, NULL, O_RDONLY, errbuf);
- if (kd == NULL)
- errx(1, "%s", errbuf);
- kp = kvm_getprocs(kd, KERN_PROC_PID, pid, &nentries);
- if (kp == NULL)
- errx(1, "%s", kvm_geterr(kd));
- pid_argv_p = kvm_getargv(kd, kp, argv_len);
- if (pid_argv_p == NULL)
- errx(1, "%s", kvm_geterr(kd));
-
- start_argv_0_p = *pid_argv_p;
- /* Find and compare string */
-
- /* Find end of argv[0] then copy and cut of str there. */
- end_argv_0_p = strchr(*pid_argv_p, ' ');
- if (end_argv_0_p == NULL)
- /* There seems to be no space, so we have the command
- * allready in its desired form. */
- start_argv_0_p = *pid_argv_p;
- else {
- /* Tests indicate that this never happens, since
- * kvm_getargv itself cuts of tailing stuff. This is
- * not what the manpage says, however. */
- strncpy(buf, *pid_argv_p, (end_argv_0_p - start_argv_0_p));
- buf[(end_argv_0_p - start_argv_0_p) + 1] = '\0';
- start_argv_0_p = buf;
- }
-
- if (strlen(name) != strlen(start_argv_0_p))
- return 0;
- return (strcmp(name, start_argv_0_p) == 0) ? 1 : 0;
-}
-
-static int
-pid_is_user(pid_t pid, uid_t uid)
-{
- kvm_t *kd;
- int nentries; /* Value not used */
- uid_t proc_uid;
- struct kinfo_proc *kp;
- char errbuf[_POSIX2_LINE_MAX];
-
- kd = kvm_openfiles(NULL, NULL, NULL, O_RDONLY, errbuf);
- if (kd == NULL)
- errx(1, "%s", errbuf);
- kp = kvm_getprocs(kd, KERN_PROC_PID, pid, &nentries);
- if (kp == NULL)
- errx(1, "%s", kvm_geterr(kd));
- if (kp->kp_proc.p_cred)
- kvm_read(kd, (u_long)&(kp->kp_proc.p_cred->p_ruid),
- &proc_uid, sizeof(uid_t));
- else
- return 0;
- return (proc_uid == (uid_t)uid);
-}
-
-static int
-pid_is_exec(pid_t pid, const char *name)
-{
- kvm_t *kd;
- int nentries;
- struct kinfo_proc *kp;
- char errbuf[_POSIX2_LINE_MAX], *pidexec;
-
- kd = kvm_openfiles(NULL, NULL, NULL, O_RDONLY, errbuf);
- if (kd == NULL)
- errx(1, "%s", errbuf);
- kp = kvm_getprocs(kd, KERN_PROC_PID, pid, &nentries);
- if (kp == NULL)
- errx(1, "%s", kvm_geterr(kd));
- pidexec = (&kp->kp_proc)->p_comm;
- if (strlen(name) != strlen(pidexec))
- return 0;
- return (strcmp(name, pidexec) == 0) ? 1 : 0;
-}
-
-static void
-do_procinit(void)
-{
- /* Nothing to do */
-}
-#endif /* OSOpenBSD */
-
-#if defined(OShpux)
-static int
-pid_is_user(pid_t pid, uid_t uid)
-{
- struct pst_status pst;
-
- if (pstat_getproc(&pst, sizeof(pst), (size_t)0, (int)pid) < 0)
- return 0;
- return ((uid_t)pst.pst_uid == uid);
-}
-
-static int
-pid_is_cmd(pid_t pid, const char *name)
-{
- struct pst_status pst;
-
- if (pstat_getproc(&pst, sizeof(pst), (size_t)0, (int)pid) < 0)
- return 0;
- return (strcmp(pst.pst_ucomm, name) == 0);
-}
-
-static int
-pid_is_exec(pid_t pid, const struct stat *esb)
-{
- struct pst_status pst;
-
- if (pstat_getproc(&pst, sizeof(pst), (size_t)0, (int)pid) < 0)
- return 0;
- return ((dev_t)pst.pst_text.psf_fsid.psfs_id == esb->st_dev
- && (ino_t)pst.pst_text.psf_fileid == esb->st_ino);
-}
-
+#elif defined(OShpux)
static void
do_procinit(void)
{
@@ -1021,7 +1012,13 @@ do_procinit(void)
idx = pst[count - 1].pst_idx + 1;
}
}
-#endif /* OShpux */
+#elif defined(HAVE_KVM_H)
+static void
+do_procinit(void)
+{
+ /* Nothing to do */
+}
+#endif
static void
do_findprocs(void)
--
dpkg's main repository
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]