-const char miscutil_rcs[] = "$Id: miscutil.c,v 1.4 2001/05/31 17:32:31 oes Exp $";
+/* vim:ts=3: */
+const char miscutil_rcs[] = "$Id: miscutil.c,v 1.9 2001/06/07 14:43:17 swa Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/miscutil.c,v $
*
* Revisions :
* $Log: miscutil.c,v $
+ * Revision 1.9 2001/06/07 14:43:17 swa
+ * slight mistake in make_path, unix path style is /.
+ *
+ * Revision 1.8 2001/06/05 22:32:01 jongfoster
+ * New function make_path() to splice directory and file names together.
+ *
+ * Revision 1.7 2001/06/03 19:12:30 oes
+ * introduced bindup()
+ *
+ * Revision 1.7 2001/06/03 11:03:48 oes
+ * Makefile/in
+ *
+ * introduced cgi.c
+ *
+ * actions.c:
+ *
+ * adapted to new enlist_unique arg format
+ *
+ * conf loadcfg.c
+ *
+ * introduced confdir option
+ *
+ * filters.c filtrers.h
+ *
+ * extracted-CGI relevant stuff
+ *
+ * jbsockets.c
+ *
+ * filled comment
+ *
+ * jcc.c
+ *
+ * support for new cgi mechansim
+ *
+ * list.c list.h
+ *
+ * functions for new list type: "map"
+ * extended enlist_unique
+ *
+ * miscutil.c .h
+ * introduced bindup()
+ *
+ * parsers.c parsers.h
+ *
+ * deleted const struct interceptors
+ *
+ * pcrs.c
+ * added FIXME
+ *
+ * project.h
+ *
+ * added struct map
+ * added struct http_response
+ * changes struct interceptors to struct cgi_dispatcher
+ * moved HTML stuff to cgi.h
+ *
+ * re_filterfile:
+ *
+ * changed
+ *
+ * showargs.c
+ * NO TIME LEFT
+ *
+ * Revision 1.6 2001/06/01 18:14:49 jongfoster
+ * Changing the calls to strerr() to check HAVE_STRERR (which is defined
+ * in config.h if appropriate) rather than the NO_STRERR macro.
+ *
+ * Revision 1.5 2001/06/01 10:31:51 oes
+ * Added character class matching to trivimatch; renamed to simplematch
+ *
* Revision 1.4 2001/05/31 17:32:31 oes
*
* - Enhanced domain part globbing with infix and prefix asterisk
char buf[BUFSIZ];
-#ifndef NOSTRERROR
+#ifdef HAVE_STRERROR
s = strerror(err);
-#endif /* NOSTRERROR */
+#endif /* HAVE_STRERROR */
if (s == NULL)
{
}
+
+/*********************************************************************
+ *
+ * Function : bindup
+ *
+ * Description : Duplicate the first n characters of a string that may
+ * contain '\0' characters.
+ *
+ * Parameters :
+ * 1 : string = string to be duplicated
+ * 2 : n = number of bytes to duplicate
+ *
+ * Returns : pointer to copy, or NULL if failiure
+ *
+ *********************************************************************/
+char *bindup(const char *string, int n)
+{
+ char *dup;
+
+ if (NULL == (dup = (char *)malloc(n)))
+ {
+ return NULL;
+ }
+ else
+ {
+ memcpy(dup, string, n);
+ }
+
+ return dup;
+
+}
+
+
+/*********************************************************************
+ *
+ * Function : make_path
+ *
+ * Description : Takes a directory name and a file name, returns
+ * the complete path. Handles windows/unix differences.
+ * If the file name is already an absolute path, or if
+ * the directory name is NULL or empty, it returns
+ * the filename.
+ *
+ * Parameters :
+ * 1 : dir: Name of directory or NULL for none.
+ * 2 : file: Name of file. Should not be NULL or empty.
+ *
+ * Returns : "dir/file" (Or on windows, "dir\file").
+ * It allocates the string on the heap. Caller frees.
+ * Returns NULL in error (i.e. NULL file or out of
+ * memory)
+ *
+ *********************************************************************/
+char * make_path(const char * dir, const char * file)
+{
+#ifdef AMIGA
+ char path[512];
+
+ if(dir)
+ {
+ strncpy(path,dir,512);
+ path[511]=0;
+ } else {
+ path[0]=0;
+ }
+ if(AddPart(path,file,512))
+ {
+ return strdup(path);
+ } else {
+ return NULL;
+ }
+#else /* ndef AMIGA */
+
+ if ((file == NULL) || (*file == '\0'))
+ {
+ return NULL; /* Error */
+ }
+
+ if ((dir == NULL) || (*dir == '\0') /* No directory specified */
+#ifdef _WIN32
+ || (*file == '\\') || (file[1] == ':') /* Absolute path (DOS) */
+#else /* ifndef _WIN32 */
+ || (*file == '/') /* Absolute path (U*ix) */
+#endif /* ifndef _WIN32 */
+ )
+ {
+ return strdup(file);
+ }
+ else
+ {
+ char * path = malloc(strlen(dir) + strlen(file) + 2);
+ strcpy(path, dir);
+#ifdef _WIN32
+ strcat(path, "\\");
+#else /* ifndef _WIN32 */
+ if(path[strlen(path)-1] != '/') strcat(path, "/");
+#endif /* ifndef _WIN32 */
+ strcat(path, file);
+
+ return path;
+ }
+#endif /* ndef AMIGA */
+}
+
+
/*
Local Variables:
tab-width: 3