about summary refs log tree commit diff
path: root/lib
diff options
context:
space:
mode:
authorgiraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8>2017-06-28 22:11:44 +0000
committergiraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8>2017-06-28 22:11:44 +0000
commit1472db408ce70f13c4423a58dfe47f023ef0dd5f (patch)
tree5c81404511efa37b8c6e335be23423065bc54237 /lib
parentc49d14be332e9939e7f9583b8f81fe9b977341f4 (diff)
downloadnetpbm-mirror-1472db408ce70f13c4423a58dfe47f023ef0dd5f.tar.gz
netpbm-mirror-1472db408ce70f13c4423a58dfe47f023ef0dd5f.tar.xz
netpbm-mirror-1472db408ce70f13c4423a58dfe47f023ef0dd5f.zip
Release 10.47.65
git-svn-id: http://svn.code.sf.net/p/netpbm/code/super_stable@3008 9d0c8265-081b-0410-96cb-a4ca84ce46f8
Diffstat (limited to 'lib')
-rw-r--r--lib/Makefile14
-rw-r--r--lib/libsystem.c24
-rw-r--r--lib/libsystem_dummy.c16
3 files changed, 40 insertions, 14 deletions
diff --git a/lib/Makefile b/lib/Makefile
index 67fac5b2..0738e5cb 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -183,12 +183,14 @@ libnetpbm.$(STATICLIBSUFFIX): $(LIBOBJECTS) $(LIBOBJECTS_X)
 	-$(RANLIB) $@
 endif
 
-
-# To avoid major hassles with having ppmdcfont available here, we just
-# ship a pre-made standardppmfont.c, so this rule will not normally be
-# used.
-standardppmdfont.c:standard.ppmdfont
-	ppmdcfont <$< >$@
+# To avoid major hassles with having ppmdcfont available here, we just ship a
+# pre-made standardppmfont.c, so this rule will not normally be used.  Though
+# standardppmdfont.c depends upon standard.ppmdfont, we don't declare that
+# here because when the user creates the source tree, the modification time of
+# standard.ppmdfont may end up later than that of standardppmdfont.c, which
+# would make the build want to rebuild it.
+standardppmdfont.c:
+	ppmdcfont <standard.ppmdfont >$@
 
 # Note that we create a new compile.h only for the first make after a
 # make clean.  This is good enough.  We used to do stamp-date for
diff --git a/lib/libsystem.c b/lib/libsystem.c
index 92495fe5..1c407ce4 100644
--- a/lib/libsystem.c
+++ b/lib/libsystem.c
@@ -381,13 +381,22 @@ pm_system_vp(const char *    const progName,
     */
     
     int progStdinFd;
+        /* File descriptor that the processor program will get as Standard
+           Input
+        */
+    bool weCreatedStdinFd;
+        /* This program created (opened) file descriptor 'progStdinFd',
+           as opposed to inheriting it.
+        */
     pid_t feederPid;
     pid_t processorPid;
 
-    if (stdinFeeder) 
+    if (stdinFeeder) {
         createPipeFeeder(stdinFeeder, feederParm, &progStdinFd, &feederPid);
-    else {
+        weCreatedStdinFd = true;
+    } else {
         progStdinFd = STDIN;
+        weCreatedStdinFd = false;
         feederPid = 0;
     }
 
@@ -400,10 +409,6 @@ pm_system_vp(const char *    const progName,
         spawnProcessor(progName, argArray, progStdinFd, 
                        &progStdoutFd, &processorPid);
 
-        /* The child process has cloned our 'progStdinFd'; we have no
-           more use for our copy.
-        */
-        close(progStdinFd);
         /* Dispose of the stdout from that child */
         (*stdoutAccepter)(progStdoutFd, accepterParm);
         close(progStdoutFd);
@@ -414,6 +419,13 @@ pm_system_vp(const char *    const progName,
         spawnProcessor(progName, argArray, progStdinFd, NULL, &processorPid);
     }
 
+    if (weCreatedStdinFd) {
+        /* The child process has cloned our 'progStdinFd'; we have no
+           more use for our copy.
+        */
+        close(progStdinFd);
+    }
+
     cleanupProcessorProcess(processorPid);
 
     if (feederPid) 
diff --git a/lib/libsystem_dummy.c b/lib/libsystem_dummy.c
index 2787ce67..db26ba7a 100644
--- a/lib/libsystem_dummy.c
+++ b/lib/libsystem_dummy.c
@@ -21,6 +21,12 @@ pm_system_vp(const char *    const progName,
              void *          const feederParm,
              void stdoutAccepter(int, void *),
              void *          const accepterParm) {
+
+    pm_error("This program wants to run another program using pm_system_vp() "
+             "in the libnetpbm library, but libnetpbm was built without "
+             "the pm_system_vp() facility -- probably because this system "
+             "doesn't have the process management facilities pm_system() "
+             "requires.");
 }
 
 void
@@ -30,6 +36,12 @@ pm_system_lp(const char *    const progName,
              void stdoutAccepter(int, void *),
              void *          const accepterParm,
              ...) {
+
+    pm_error("This program wants to run another program using pm_system_lp() "
+             "in the libnetpbm library, but libnetpbm was built without "
+             "the pm_system_lp() facility -- probably because this system "
+             "doesn't have the process management facilities pm_system() "
+             "requires.");
 }
 
 void
@@ -39,8 +51,8 @@ pm_system(void                  stdinFeeder(int, void *),
           void *          const accepterParm,
           const char *    const shellCommand) {
 
-    pm_error("This program wants to run another program using pm_system() in "
-             "the libnetpbm library, but libnetpbm was built without "
+    pm_error("This program wants to run another program using pm_system() "
+             "in the libnetpbm library, but libnetpbm was built without "
              "the pm_system() facility -- probably because this system "
              "doesn't have the process management facilities pm_system() "
              "requires.");