From 7abaa9daeb5d57b421876d303bd87734c7943546 Mon Sep 17 00:00:00 2001 From: Ryu Sawada Date: Sat, 8 Oct 2005 09:33:26 +0000 Subject: [PATCH] added mxml_dirname,mxml_basename --- mxml.c | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- mxml.h | 2 ++ 2 files changed, 78 insertions(+), 2 deletions(-) diff --git a/mxml.c b/mxml.c index 0437db7..3d2b8cb 100755 --- a/mxml.c +++ b/mxml.c @@ -44,7 +44,6 @@ #include #include #include -#include #ifdef _MSC_VER @@ -1426,7 +1425,7 @@ PMXML_NODE mxml_parse_entity(char **buf, char *file_name, char *error, int error line_number = 1; nentity = -1; - strcpy(directoryname, dirname(file_name)); + strcpy(directoryname, mxml_dirname(file_name)); /* copy string to temporary space */ buffer = (char *) malloc(strlen(*buf) + 1); @@ -2050,3 +2049,78 @@ void mxml_test() mxml_free_tree(tree); } */ + +/*------------------------------------------------------------------*/ + +char* mxml_basename(char *path) +{ + char *p = path; + char *name = path; + + if (path){ + while(1){ + switch(*p) { + case 0: return name; + case '/': +#ifdef _MSC_VER + case ':': + case '\\': +#endif + name = p + 1; + } + p++; + } + } + return name; +} + +/*------------------------------------------------------------------*/ + +char* mxml_dirname(char* path) +{ + char *newpath; + char *p; +#ifdef _MSC_VER + char *pv; +#endif + int length; + + p = strrchr (path, '/'); +#ifdef _MSC_VER + pv = strrchr (path, ':'); + if( pv > p ) + p = pv; + p = strrchr (path, '\\'); + if( pv > p ) + p = pv; +#endif + + if (p == 0) + { + newpath = (char *) malloc(2); + if (newpath == 0) + return NULL; + newpath[0] = '.'; + newpath[1] = 0; + } + else if(p == path){ /* root directory */ + newpath = (char *) malloc(2); + if (newpath == 0) + return NULL; + newpath[0] = '/'; + newpath[1] = 0; + } + else + { + p--; + length = p - path + 1; + newpath = (char *) malloc(length + 1); + if (newpath == 0) + return NULL; + strncpy (newpath, path, length); + newpath[length] = 0; + } + return newpath; +} + +/*------------------------------------------------------------------*/ diff --git a/mxml.h b/mxml.h index 95a0c11..fe0c41b 100755 --- a/mxml.h +++ b/mxml.h @@ -99,4 +99,6 @@ int mxml_write_tree(char *file_name, PMXML_NODE tree); void mxml_debug_tree(PMXML_NODE tree, int level); void mxml_free_tree(PMXML_NODE tree); +char* mxml_dirname(char* path); +char* mxml_basename(char *path); /*------------------------------------------------------------------*/