Index: Makefile =================================================================== --- Makefile (revision 372583) +++ Makefile (working copy) @@ -2,7 +2,7 @@ PORTNAME= ccnet PORTVERSION= 3.1.4 -PORTREVISION= 1 +PORTREVISION= 2 CATEGORIES= net-mgmt devel MAINTAINER= yan_jingfeng@yahoo.com Index: files/patch-lib_Makefile.am =================================================================== --- files/patch-lib_Makefile.am (revision 372583) +++ files/patch-lib_Makefile.am (working copy) @@ -1,5 +1,5 @@ ---- lib/Makefile.am.orig 2014-07-31 06:20:28.000000000 -0400 -+++ lib/Makefile.am 2014-09-02 13:48:35.659991963 -0400 +--- lib/Makefile.am.orig 2014-11-11 10:10:39.971972968 -0500 ++++ lib/Makefile.am 2014-11-11 10:37:36.712929368 -0500 @@ -19,7 +19,6 @@ peer-common.h \ string-util.h \ @@ -8,8 +8,15 @@ rpc-common.h \ net.h \ utils.h \ -@@ -66,6 +65,8 @@ +@@ -60,12 +59,14 @@ + libccnetd_la_LDFLAGS = -no-undefined + libccnetd_la_LIBADD = @GLIB2_LIBS@ @GOBJECT_LIBS@ @SSL_LIBS@ @LIB_GDI32@ \ +- -lsqlite3 -levent @LIB_WS32@ @LIB_UUID@ \ ++ -lsqlite3 -levent @LIB_WS32@ @LIB_UUID@ -lkvm \ + @LIB_SHELL32@ @LIB_PSAPI@ @SEARPC_LIBS@ + + ccnet_object_define = ccnetobj.vala +valac_gen = ccnetobj.c ccnet-object.h Index: files/patch-lib_utils.c =================================================================== --- files/patch-lib_utils.c (revision 372583) +++ files/patch-lib_utils.c (working copy) @@ -1,56 +1,187 @@ ---- lib/utils.c.orig 2014-06-10 04:41:45.000000000 -0400 -+++ lib/utils.c 2014-07-28 14:32:24.000000000 -0400 -@@ -41,6 +41,10 @@ - #include - #include +--- lib/utils.c.orig 2014-07-31 06:20:28.000000000 -0400 ++++ lib/utils.c 2014-11-21 23:06:33.789257323 -0500 +@@ -43,6 +43,16 @@ -+#ifdef __FreeBSD__ + #include + ++#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__NetBSD__) || defined(__OpenBSD__) +#include ++#include ++#include ++#include ++#include ++#include ++#include +#endif + extern int inet_pton(int af, const char *src, void *dst); -@@ -1463,14 +1467,19 @@ +@@ -1465,14 +1475,19 @@ } #endif /* ifdef WIN32 */ -#ifdef __linux__ -+#if defined(__linux__) || defined(__FreeBSD__) || defined(__DragonFly__) || defined(__NetBSD__) || defined(__OpenBSD__) /* read the link of /proc/123/exe and compare with `process_name' */ static int - find_process_in_dirent(struct dirent *dir, const char *process_name) +-find_process_in_dirent(struct dirent *dir, const char *process_name) ++find_process_in_dirent_procfs(struct dirent *dir, const char *process_name) { char path[512]; /* fisrst construct a path like /proc/123/exe */ +#if defined(__linux__) if (sprintf (path, "/proc/%s/exe", dir->d_name) < 0) { -+#endif -+#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__NetBSD__) || defined(__OpenBSD__) ++#elif defined(__FreeBSD__) || defined(__DragonFly__) || defined(__NetBSD__) + if (sprintf (path, "/proc/%s/file", dir->d_name) < 0) { ++#else ++ if (1) { +#endif return -1; } -@@ -1528,6 +1537,22 @@ +@@ -1496,7 +1511,8 @@ } + + /* read the /proc fs to determine whether some process is running */ +-gboolean process_is_running (const char *process_name) ++static gboolean ++process_is_running_procfs (const char *process_name) + { + DIR *proc_dir = opendir("/proc"); + if (!proc_dir) { +@@ -1510,7 +1526,7 @@ + /* /proc/[1-9][0-9]* */ + if (first > '9' || first < '1') + continue; +- int pid = find_process_in_dirent(subdir, process_name); ++ int pid = find_process_in_dirent_procfs(subdir, process_name); + if (pid > 0) { + closedir(proc_dir); + return TRUE; +@@ -1520,6 +1536,18 @@ + closedir(proc_dir); + return FALSE; + } ++ ++#ifdef __linux__ ++static int ++find_process_in_dirent(struct dirent *dir, const char *process_name) ++{ ++ return find_process_in_dirent_procfs(dir, process_name); ++} ++ ++gboolean ++process_is_running (const char *process_name) { ++ return process_is_running_procfs(process_name); ++} #endif -+/* -+ * Finally, we should not enforce to use /proc + #ifdef __APPLE__ +@@ -1530,6 +1558,108 @@ + } + #endif + +#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__NetBSD__) || defined(__OpenBSD__) -+gboolean process_is_running (const char *process_name) -+{ -+ //TODO -+ return FALSE; ++#if defined(__FreeBSD__) ++#define PSKIP(kp) ((kp)->ki_pid == mypid || \ ++ (!kthreads && ((kp)->ki_flag & P_KTHREAD) != 0)) ++#define KVM_OPENFILES(exec, coref, buf) \ ++ kvm_openfiles(exec, coref, NULL, O_RDONLY, buf) ++#define KVM_GETPROCS(kd, plist, nproc) \ ++ kvm_getprocs(kd, KERN_PROC_PROC, 0, &nproc) ++ ++#elif defined(__DragonFly__) ++#define PSKIP(kp) ((kp)->kp_pid == mypid || \ ++ (!kthreads && ((kp)->kp_flags & P_KTHREADP) != 0)) ++#define KVM_OPENFILES(exec, coref, buf) \ ++ kvm_openfiles(exec, coref, NULL, O_RDONLY, buf) ++#define KVM_GETPROCS(kd, plist, nproc) \ ++ kvm_getprocs(kd, KERN_PROC_ALL, 0, &nproc) ++ ++#elif defined(__NetBSD__) ++#define PSKIP(kp) ((kp)->kp_pid == mypid || \ ++ ((kp)->p_flag & P_SYSTEM) != 0) ++#define KVM_OPENFILES(exec, coref, buf) \ ++ kvm_openfiles(exec, coref, NULL, KVM_NO_FILES, buf) ++#define KVM_GETPROCS(kd, plist, nproc) \ ++ kvm_getprocs(kd, KERN_PROC_ALL, 0, sizeof(*plist), &nproc) ++ ++#elif defined(__OpenBSD__) ++#define PSKIP(kp) ((kp)->kp_pid == mypid || \ ++ ((kp)->p_flag & (P_SYSTEM | P_THREAD)) != 0) ++#define KVM_OPENFILES(exec, coref, buf) \ ++ kvm_openfiles(exec, coref, NULL, KVM_NO_FILES, buf) ++#define KVM_GETPROCS(kd, plist, nproc) \ ++ kvm_getprocs(kd, KERN_PROC_ALL, 0, sizeof(*plist), &nproc) ++ ++#else ++#define PSKIP(kp) 0 ++#define KVM_OPENFILES(exec, coref, buf) 0 ++#define KVM_GETPROCS(kd, plist, nproc) 0 ++#endif ++ ++#define WITH_PROC_FS g_file_test("/proc/curproc", G_FILE_TEST_EXISTS) ++ ++static int ++count_running_process_kvm(const char *process_name) { ++ ++ static kvm_t *kd; ++ static struct kinfo_proc *plist; ++ static int nproc; ++ static pid_t mypid; ++ static int kthreads; ++ ++ char buf[_POSIX2_LINE_MAX]; ++ const char * execf, *coref; ++ char **pargv; ++ int i, selected_nproc; ++ struct kinfo_proc *kp; ++ ++ selected_nproc = 0; ++ execf = NULL; ++ coref = _PATH_DEVNULL; ++ ++ mypid = getpid(); ++ kd = KVM_OPENFILES(execf, coref, buf); ++ if (kd == NULL) { ++ fprintf(stderr, "Error: Cannot open kernel files (%s)", buf); ++ exit(1); ++ } ++ ++ plist = KVM_GETPROCS(kd, plist, nproc); ++ if (plist == NULL) { ++ fprintf(stderr, "Error: Cannot get process list (%s)", kvm_geterr(kd)); ++ exit(1); ++ } ++ ++ for(i = 0, kp = plist; i < nproc; i++, kp++) { ++ if (PSKIP(kp)) { ++ continue; ++ } ++ if ((pargv = kvm_getargv(kd, kp, 0)) != NULL) { ++ if (strstr(pargv[0], process_name) != NULL) { ++ selected_nproc += 1; ++ } ++ } ++ } ++ kvm_close(kd); ++ kvm_close(kd); ++ ++ return selected_nproc; +} + -+int count_process(const char *process_name) -+{ -+ return 0; ++gboolean ++process_is_running(const char * process_name) { ++ if (WITH_PROC_FS) { ++ return process_is_running_procfs(process_name); ++ } ++ if (count_running_process_kvm(process_name) > 0) { ++ return TRUE; ++ } else { ++ return FALSE; ++ } +} +#endif -+*/ + char* ccnet_object_type_from_id (const char *object_id)