New function make_path() to splice directory and file names together.
authorjongfoster <jongfoster@users.sourceforge.net>
Tue, 5 Jun 2001 22:32:01 +0000 (22:32 +0000)
committerjongfoster <jongfoster@users.sourceforge.net>
Tue, 5 Jun 2001 22:32:01 +0000 (22:32 +0000)
miscutil.c
miscutil.h

index a536e74..7423af1 100644 (file)
@@ -1,4 +1,4 @@
-const char miscutil_rcs[] = "$Id: miscutil.c,v 1.7 2001/06/03 11:03:48 oes Exp $";
+const char miscutil_rcs[] = "$Id: miscutil.c,v 1.7 2001/06/03 19:12:30 oes Exp $";
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/miscutil.c,v $
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/miscutil.c,v $
@@ -36,6 +36,9 @@ const char miscutil_rcs[] = "$Id: miscutil.c,v 1.7 2001/06/03 11:03:48 oes Exp $
  *
  * Revisions   :
  *    $Log: miscutil.c,v $
  *
  * Revisions   :
  *    $Log: miscutil.c,v $
+ *    Revision 1.7  2001/06/03 19:12:30  oes
+ *    introduced bindup()
+ *
  *    Revision 1.7  2001/06/03 11:03:48  oes
  *    Makefile/in
  *
  *    Revision 1.7  2001/06/03 11:03:48  oes
  *    Makefile/in
  *
@@ -606,6 +609,59 @@ char *bindup(const char *string, int n)
 }
 
 
 }
 
 
+/*********************************************************************
+ *
+ * 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)
+{
+   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 */
+      strcat(path, "\\");
+#endif /* ifndef _WIN32 */
+      strcat(path, file);
+
+      return path;
+   }
+}
+
+
 /*
   Local Variables:
   tab-width: 3
 /*
   Local Variables:
   tab-width: 3
index c8a420f..d6a6b2a 100644 (file)
@@ -1,6 +1,6 @@
 #ifndef _MISCUTIL_H
 #define _MISCUTIL_H
 #ifndef _MISCUTIL_H
 #define _MISCUTIL_H
-#define MISCUTIL_H_VERSION "$Id: miscutil.h,v 1.6 2001/06/03 11:03:48 oes Exp $"
+#define MISCUTIL_H_VERSION "$Id: miscutil.h,v 1.6 2001/06/03 19:12:30 oes Exp $"
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/miscutil.h,v $
 /*********************************************************************
  *
  * File        :  $Source: /cvsroot/ijbswa/current/miscutil.h,v $
@@ -37,6 +37,9 @@
  *
  * Revisions   :
  *    $Log: miscutil.h,v $
  *
  * Revisions   :
  *    $Log: miscutil.h,v $
+ *    Revision 1.6  2001/06/03 19:12:30  oes
+ *    introduced bindup()
+ *
  *    Revision 1.6  2001/06/03 11:03:48  oes
  *    Makefile/in
  *
  *    Revision 1.6  2001/06/03 11:03:48  oes
  *    Makefile/in
  *
@@ -153,7 +156,9 @@ extern char *strsav(char *old, const char *text_to_append);
 extern char *chomp(char *string);
 extern int simplematch(char *pattern, char *text);
 
 extern char *chomp(char *string);
 extern int simplematch(char *pattern, char *text);
 
-char *bindup(const char *string, int n);
+extern char *bindup(const char *string, int n);
+
+extern char *make_path(const char * dir, const char * file);
 
 #ifdef __MINGW32__
 extern char *strdup(const char *s);
 
 #ifdef __MINGW32__
 extern char *strdup(const char *s);