-const char miscutil_rcs[] = "$Id: miscutil.c,v 1.22 2001/10/26 17:39:38 oes 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.
*
* 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.
+ *
* Revision 1.22 2001/10/26 17:39:38 oes
* Moved ijb_isspace and ijb_tolower to project.h
*
#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>
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 */
/*********************************************************************
*
*
* 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:
*
}
+/*********************************************************************
+ *
+ * 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
}
else
{
- char * path = malloc(strlen(dir) + strlen(file) + 2);
+ char * path;
+
+#if defined(unix)
+ if ( *dir != '/' && basedir && *basedir )
+ {
+ path = malloc( strlen( basedir ) + strlen(dir) + strlen(file) + 3);
+ if (!path ) log_error(LOG_LEVEL_FATAL, "malloc failed!");
+ strcpy(path, basedir);
+ strcat(path, "/");
+ strcat(path, dir);
+ DBG(1, ("make_path: path: %s\n",path) );
+ }
+ else
+ {
+ path = malloc(strlen(dir) + strlen(file) + 2);
+ if (!path ) log_error(LOG_LEVEL_FATAL, "malloc failed!");
+ strcpy(path, dir);
+ }
+#else
+
+ path = malloc(strlen(dir) + strlen(file) + 2);
+ if (!path ) log_error(LOG_LEVEL_FATAL, "malloc failed!");
strcpy(path, dir);
+
+#endif /* defined unix */
+
#ifdef _WIN32
if(path[strlen(path)-1] != '\\')
{
Local Variables:
tab-width: 3
end:
-*/
\ No newline at end of file
+*/