]> granicus.if.org Git - yasm/commitdiff
Use standard basename() function if available.
authorPeter Johnson <peter@tortall.net>
Sun, 8 Jun 2003 20:45:02 +0000 (20:45 -0000)
committerPeter Johnson <peter@tortall.net>
Sun, 8 Jun 2003 20:45:02 +0000 (20:45 -0000)
svn path=/trunk/yasm/; revision=974

configure.ac
frontends/yasm/yasm-module.c

index 419765df97ce093d0a69063da8291b3fab0dff07..ac01d08d1bc33b6253fc6c095aaa0bfcc8df4062 100644 (file)
@@ -1,5 +1,5 @@
 # Process this file with autoconf to produce a configure script.
-# $IdPath: yasm/configure.ac,v 1.70 2003/03/18 05:00:54 peter Exp $
+# $IdPath$
 
 # Minimum required perl version for development
 PERL_VERSION=5.004
@@ -116,7 +116,7 @@ AC_TYPE_SIZE_T
 AC_FUNC_FORK
 AC_FUNC_MALLOC
 AC_FUNC_VPRINTF
-AC_CHECK_FUNCS([abort memcpy memmove strrchr toascii vsnprintf])
+AC_CHECK_FUNCS([abort basename memcpy memmove strrchr toascii vsnprintf])
 AC_CHECK_FUNCS([strsep mergesort])
 # Look for the case-insensitive comparison functions
 AC_CHECK_FUNCS([strcasecmp strncasecmp stricmp strcmpi])
index 5a5218d449c74c7b72a6eabb3c8212a4af899567..a5acf5ef75249167363baab48f75bc896e2f87d7 100644 (file)
@@ -145,11 +145,26 @@ typedef struct list_module_data {
     size_t matches_num, matches_alloc;
 } list_module_data;
 
+#ifdef HAVE_BASENAME
+extern char *basename(const char *);
+#else
+static const char *
+basename(const char *path)
+{
+    const char *base;
+    base = strrchr(path, '/');
+    if (!base)
+       base = path;
+    else
+       base++;
+}
+#endif
+
 static int
 list_module_load(const char *filename, lt_ptr data)
 {
     list_module_data *lmdata = data;
-    const char *basename;
+    const char *base;
     const char *module_keyword = NULL, *module_name = NULL;
     char *name;
 
@@ -162,24 +177,20 @@ list_module_load(const char *filename, lt_ptr data)
 
     lt_dlhandle handle;
 
-    /* All modules have '_' in them; early check */
-    if (!strchr(filename, '_'))
+    /* Strip off path components, if any */
+    base = basename(filename);
+    if (!base)
        return 0;
 
-    /* Strip off path components, if any */
-    basename = strrchr(filename, '/');
-    if (!basename)
-       basename = strrchr(filename, '\\');
-    if (!basename)
-       basename = filename;
-    else
-       basename++;
+    /* All modules have '_' in them; early check */
+    if (!strchr(base, '_'))
+       return 0;
 
     /* Check to see if module is of the type we're looking for.
      * Even though this check is also implicitly performed below, there's a
      * massive speedup in avoiding the dlopen() call.
      */
-    if (strncmp(basename, module_type_str[lmdata->type],
+    if (strncmp(base, module_type_str[lmdata->type],
                strlen(module_type_str[lmdata->type])) != 0)
        return 0;
 
@@ -189,9 +200,9 @@ list_module_load(const char *filename, lt_ptr data)
        return 0;
 
     /* Build base symbol name */
-    name = yasm_xmalloc(strlen(basename)+5+
+    name = yasm_xmalloc(strlen(base)+5+
                        strlen(module_type_str[lmdata->type])+1);
-    strcpy(name, basename);
+    strcpy(name, base);
     strcat(name, "_LTX_");
     strcat(name, module_type_str[lmdata->type]);