2.9.11 version. more input for docs.
[privoxy.git] / miscutil.c
index beab02b..a971866 100644 (file)
@@ -1,10 +1,10 @@
-const char miscutil_rcs[] = "$Id: miscutil.c,v 1.23 2001/10/29 03:48:10 david__schmidt Exp $";
+const char miscutil_rcs[] = "$Id: miscutil.c,v 1.26 2001/12/30 14:07:32 steudten Exp $";
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/miscutil.c,v $
  *
  * Purpose     :  zalloc, hash_string, safe_strerror, strcmpic,
- *                strncmpic, strsav, chomp, and MinGW32 strdup
+ *                strncmpic, chomp, and MinGW32 strdup
  *                functions. 
  *                These are each too small to deserve their own file
  *                but don't really fit in any other file.
@@ -36,6 +36,27 @@ const char miscutil_rcs[] = "$Id: miscutil.c,v 1.23 2001/10/29 03:48:10 david__s
  *
  * Revisions   :
  *    $Log: miscutil.c,v $
+ *    Revision 1.26  2001/12/30 14:07:32  steudten
+ *    - Add signal handling (unix)
+ *    - Add SIGHUP handler (unix)
+ *    - Add creation of pidfile (unix)
+ *    - Add action 'top' in rc file (RH)
+ *    - Add entry 'SIGNALS' to manpage
+ *    - Add exit message to logfile (unix)
+ *
+ *    Revision 1.25  2001/11/13 00:16:38  jongfoster
+ *    Replacing references to malloc.h with the standard stdlib.h
+ *    (See ANSI or K&R 2nd Ed)
+ *
+ *    Revision 1.24  2001/11/05 21:41:43  steudten
+ *    Add changes to be a real daemon just for unix os.
+ *    (change cwd to /, detach from controlling tty, set
+ *    process group and session leader to the own process.
+ *    Add DBG() Macro.
+ *    Add some fatal-error log message for failed malloc().
+ *    Add '-d' if compiled with 'configure --with-debug' to
+ *    enable debug output.
+ *
  *    Revision 1.23  2001/10/29 03:48:10  david__schmidt
  *    OS/2 native needed a snprintf() routine.  Added one to miscutil, brackedted
  *    by and __OS2__ ifdef.
@@ -149,9 +170,12 @@ const char miscutil_rcs[] = "$Id: miscutil.c,v 1.23 2001/10/29 03:48:10 david__s
 #include "config.h"
 
 #include <stdio.h>
+#include <sys/types.h>
 #include <stdlib.h>
+#if !defined(_WIN32) && !defined(__OS2__)
+#include <unistd.h>
+#endif /* #if !defined(_WIN32) && !defined(__OS2__) */
 #include <string.h>
-#include <malloc.h>
 #include <ctype.h>
 #include <assert.h>
 
@@ -185,7 +209,52 @@ void *zalloc(int size)
 
    return(ret);
 }
+#if defined(unix)
+/*********************************************************************
+ *
+ * Function    : deletePidFile 
+ *
+ * Description :  deletes the pid file with the pid of the main process 
+ *
+ * Parameters  : -
+ *
+ * Returns     : - 
+ *
+ *********************************************************************/
+void deletePidFile( void )
+{
+  char pidfile[ 64 ];
 
+  snprintf( pidfile, sizeof(pidfile), "%s/%s", PID_FILE_PATH, PID_FILE_NAME);
+  unlink( pidfile );
+}
+/*********************************************************************
+ *
+ * Function    : writePidFile 
+ *
+ * Description :  writes the pid file with the pid of the main process 
+ *
+ * Parameters  : -
+ *
+ * Returns     : - 
+ *
+ *********************************************************************/
+void writePidFile( void )
+{
+  FILE   *fp;
+  char   pidfile[64];
+
+  snprintf( pidfile, sizeof(pidfile), "%s/%s", PID_FILE_PATH, PID_FILE_NAME);
+  if ((fp = fopen( pidfile,"w")) == NULL )
+  {
+      log_error(LOG_LEVEL_INFO, "can't open pidfile '%s': %E", pidfile);
+      return;
+  }
+
+  fprintf( fp,"%u\n", (unsigned int) getpid());
+  fclose ( fp );
+}
+#endif /* unix */
 
 /*********************************************************************
  *
@@ -457,8 +526,8 @@ char *strsav(char *old, const char *text_to_append)
  *
  * Description :  Reallocate target_string and append text to it.  
  *                This makes it easier to append to malloc'd strings.
- *                This is similar to strsav(), but running out of
- *                memory isn't catastrophic.
+ *                This is similar to the (removed) strsav(), but
+ *                running out of memory isn't catastrophic.
  *
  *                Programming style:
  *
@@ -535,6 +604,59 @@ jb_err string_append(char **target_string, const char *text_to_append)
 }
 
 
+/*********************************************************************
+ *
+ * Function    :  string_join
+ *
+ * Description :  Join two strings together.  Frees BOTH the original
+ *                strings.  If either or both input strings are NULL,
+ *                fails as if it had run out of memory.
+ *
+ *                For comparison, string_append requires that the
+ *                second string is non-NULL, and doesn't free it.
+ *
+ *                Rationale: Too often, we want to do
+ *                string_append(s, html_encode(s2)).  That assert()s
+ *                if s2 is NULL or if html_encode() runs out of memory.
+ *                It also leaks memory.  Proper checking is cumbersome.
+ *                The solution: string_join(s, html_encode(s2)) is safe,
+ *                and will free the memory allocated by html_encode().
+ *
+ * Parameters  :
+ *          1  :  target_string = Pointer to old text that is to be
+ *                extended.  *target_string will be free()d by this
+ *                routine.  target_string must be non-NULL.
+ *          2  :  text_to_append = Text to be appended to old.
+ *
+ * Returns     :  JB_ERR_OK on success, and sets *target_string
+ *                   to newly malloc'ed appended string.  Caller
+ *                   must free(*target_string).
+ *                JB_ERR_MEMORY on out-of-memory, or if
+ *                   *target_string or text_to_append is NULL.  (In
+ *                   this case, frees *target_string and text_to_append,
+ *                   sets *target_string to NULL).
+ *
+ *********************************************************************/
+jb_err string_join(char **target_string, char *text_to_append)
+{
+   jb_err err;
+
+   assert(target_string);
+
+   if (text_to_append == NULL)
+   {
+      freez(*target_string);
+      return JB_ERR_MEMORY;
+   }
+
+   err = string_append(target_string, text_to_append);
+
+   free(text_to_append);
+
+   return err;
+}
+
+
 /*********************************************************************
  *
  * Function    :  simplematch