e: fix #528
authorSebastian Dransfeld <sd@tango.flipp.net>
Mon, 19 Apr 2010 08:17:19 +0000 (08:17 +0000)
committerSebastian Dransfeld <sd@tango.flipp.net>
Mon, 19 Apr 2010 08:17:19 +0000 (08:17 +0000)
basename may modify its argument, so we need to strdup before calling
basename.

SVN revision: 48128

src/bin/e_exehist.c

index 4e4b761..fbd8df3 100644 (file)
@@ -434,14 +434,18 @@ _e_exehist_limit(void)
 static const char *
 _e_exehist_normalize_exe(const char *exe)
 {
-   char *base, *cp, *space = NULL;
+   char *base, *buf, *cp, *space = NULL;
    const char *ret;
    Eina_Bool flag = EINA_FALSE;
 
-   base = basename((char *)exe);
-   if ((base[0] == '.') && (base[1] == '\0')) return NULL;
+   buf = strdup(exe);
+   base = basename(buf);
+   if ((base[0] == '.') && (base[1] == '\0'))
+     {
+       free(buf);
+       return NULL;
+     }
 
-   base = strdup(base);
    cp = base;
    while (*cp)
      {
@@ -469,7 +473,7 @@ _e_exehist_normalize_exe(const char *exe)
    if (space) *space = '\0';
 
    ret = eina_stringshare_add(base);
-   free(base);
+   free(buf);
 
    return ret;
 }