/[libtool]/libtool/libltdl/ltdl.c
ViewVC logotype

Diff of /libtool/libltdl/ltdl.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.142 by gary, Wed Aug 1 06:50:16 2001 UTC revision 1.143 by gary, Sun Aug 5 10:57:03 2001 UTC
# Line 2005  canonicalize_path (path, pcanonical) Line 2005  canonicalize_path (path, pcanonical)
2005                  || (path[1+ src] == LT_EOS_CHAR))                  || (path[1+ src] == LT_EOS_CHAR))
2006                continue;                continue;
2007            }            }
2008    
2009          /* Anything other than a directory separator is copied verbatim.  */          /* Anything other than a directory separator is copied verbatim.  */
2010          else if ((path[src] != '/')          if ((path[src] != '/')
2011  #ifdef LT_DIRSEP_CHAR  #ifdef LT_DIRSEP_CHAR
2012                   && (path[src] != LT_DIRSEP_CHAR)              && (path[src] != LT_DIRSEP_CHAR)
2013  #endif  #endif
2014                   )              )
2015            {            {
2016              canonical[dest++] = path[src];              canonical[dest++] = path[src];
2017            }            }
# Line 2018  canonicalize_path (path, pcanonical) Line 2019  canonicalize_path (path, pcanonical)
2019             not at the end of a path -- i.e. before a path separator or             not at the end of a path -- i.e. before a path separator or
2020             NULL terminator.  */             NULL terminator.  */
2021          else if ((path[1+ src] != LT_PATHSEP_CHAR)          else if ((path[1+ src] != LT_PATHSEP_CHAR)
2022                   && (path[1 + src] != LT_EOS_CHAR))                   && (path[1+ src] != LT_EOS_CHAR)
2023    #ifdef LT_DIRSEP_CHAR
2024                     && (path[1+ src] != LT_DIRSEP_CHAR)
2025    #endif
2026                     && (path[1+ src] != '/'))
2027            {            {
2028              canonical[dest++] = '/';              canonical[dest++] = '/';
2029            }            }
# Line 2079  foreach_dirinpath (search_path, base_nam Line 2084  foreach_dirinpath (search_path, base_nam
2084    int   result          = 0;    int   result          = 0;
2085    int   filenamesize    = 0;    int   filenamesize    = 0;
2086    int   lenbase         = LT_STRLEN (base_name);    int   lenbase         = LT_STRLEN (base_name);
2087      int   argz_len        = 0;
2088      char *argz            = 0;
2089    char *filename        = 0;    char *filename        = 0;
2090    char *canonical       = 0;    char *canonical       = 0;
   char *next;  
2091    
2092    LT_DLMUTEX_LOCK ();    LT_DLMUTEX_LOCK ();
2093    
# Line 2092  foreach_dirinpath (search_path, base_nam Line 2098  foreach_dirinpath (search_path, base_nam
2098      }      }
2099    
2100    if (canonicalize_path (search_path, &canonical) != 0)    if (canonicalize_path (search_path, &canonical) != 0)
2101      {      goto cleanup;
       LT_DLMUTEX_SETERROR (LT_DLSTRERROR (NO_MEMORY));  
       goto cleanup;  
     }  
   
   next = canonical;  
   while (next)  
     {  
       char *cur     = next;  
       int   lendir;  
2102    
2103        next = strchr (cur, LT_PATHSEP_CHAR);    if (argzize_path (canonical, &argz, &argz_len) != 0)
2104        if (!next)      goto cleanup;
         next = cur + strlen (cur);  
   
       lendir = next - cur;  
       if (*next == LT_PATHSEP_CHAR)  
         ++next;  
       else  
         next = 0;  
2105    
2106        if (lendir == 0)    {
2107          continue;      char *dir_name = 0;
2108        while ((dir_name = argz_next (argz, argz_len, dir_name)))
2109          {
2110            int lendir = LT_STRLEN (dir_name);
2111    
2112        if (lendir +1 +lenbase >= filenamesize)          if (lendir +1 +lenbase >= filenamesize)
2113          {          {
2114            LT_DLFREE (filename);            LT_DLFREE (filename);
2115            filenamesize  = lendir +1 +lenbase +1; /* "/d" + '/' + "f" + '\0' */            filenamesize  = lendir +1 +lenbase +1; /* "/d" + '/' + "f" + '\0' */
2116            filename      = LT_DLMALLOC (char, filenamesize);            filename      = LT_EMALLOC (char, filenamesize);
   
2117            if (!filename)            if (!filename)
2118              {              goto cleanup;
               LT_DLMUTEX_SETERROR (LT_DLSTRERROR (NO_MEMORY));  
               goto cleanup;  
             }  
2119          }          }
2120    
2121        strncpy (filename, cur, lendir);          strncpy (filename, dir_name, lendir);
2122        if (filename[lendir -1] != '/')          if (base_name && *base_name)
2123          filename[lendir++] = '/';            {
2124        if (base_name && *base_name)              if (filename[lendir -1] != '/')
2125          strcpy (filename +lendir, base_name);                filename[lendir++] = '/';
2126                strcpy (filename +lendir, base_name);
2127        if ((result = (*func) (filename, data1, data2)))            }
2128          {          
2129            break;          if ((result = (*func) (filename, data1, data2)))
2130          }            {
2131      }              break;
2132              }
2133          }
2134      }
2135    
2136   cleanup:   cleanup:
2137      LT_DLFREE (argz);
2138    LT_DLFREE (canonical);    LT_DLFREE (canonical);
2139    LT_DLFREE (filename);    LT_DLFREE (filename);
2140    
# Line 2689  lt_dlopen (filename) Line 2682  lt_dlopen (filename)
2682        LT_DLFREE (line);        LT_DLFREE (line);
2683    
2684        /* allocate the handle */        /* allocate the handle */
2685        handle = (lt_dlhandle) LT_DLMALLOC (struct lt_dlhandle_struct, 1);        handle = (lt_dlhandle) LT_EMALLOC (struct lt_dlhandle_struct, 1);
2686        if (!handle)        if (!handle)
2687          ++error;          ++error;
2688    
# Line 2949  lt_argz_insertdir (pargz, pargz_len, dir Line 2942  lt_argz_insertdir (pargz, pargz_len, dir
2942    /* Prepend the directory name.  */    /* Prepend the directory name.  */
2943    end_offset    = end - dp->d_name;    end_offset    = end - dp->d_name;
2944    buf_len       = dir_len + 1+ end_offset;    buf_len       = dir_len + 1+ end_offset;
2945    buf           = LT_DLMALLOC (char, 1+ buf_len);    buf           = LT_EMALLOC (char, 1+ buf_len);
2946    if (!buf)    if (!buf)
2947      return ++errors;      return ++errors;
2948            
# Line 2976  list_files_by_dir (dirnam, pargz, pargz_ Line 2969  list_files_by_dir (dirnam, pargz, pargz_
2969       size_t *pargz_len;       size_t *pargz_len;
2970  {  {
2971    DIR   *dirp     = 0;    DIR   *dirp     = 0;
   char  *argz     = 0;  
   size_t argz_len = 0;  
2972    int    errors   = 0;    int    errors   = 0;
2973        
2974    assert (dirnam && *dirnam);    assert (dirnam && *dirnam);
# Line 2992  list_files_by_dir (dirnam, pargz, pargz_ Line 2983  list_files_by_dir (dirnam, pargz, pargz_
2983    
2984        while ((dp = readdir (dirp)))        while ((dp = readdir (dirp)))
2985          if (dp->d_name[0] != '.')          if (dp->d_name[0] != '.')
2986            if (lt_argz_insertdir (&argz, &argz_len, dirnam, dp))            if (lt_argz_insertdir (pargz, pargz_len, dirnam, dp))
2987              {              {
2988                ++errors;                ++errors;
2989                break;                break;
# Line 3000  list_files_by_dir (dirnam, pargz, pargz_ Line 2991  list_files_by_dir (dirnam, pargz, pargz_
2991    
2992        closedir (dirp);        closedir (dirp);
2993      }      }
2994      else
2995        ++errors;
2996    
2997    return errors;    return errors;
2998  }  }
# Line 3016  foreachfile_callback (dirname, data1, da Line 3009  foreachfile_callback (dirname, data1, da
3009    int (*func) LT_PARAMS((const char *filename, lt_ptr data))    int (*func) LT_PARAMS((const char *filename, lt_ptr data))
3010          = (int (*) LT_PARAMS((const char *filename, lt_ptr data))) data1;          = (int (*) LT_PARAMS((const char *filename, lt_ptr data))) data1;
3011    
3012    int is_done = 0;    int     is_done  = 0;
3013    char *argz;    char   *argz     = 0;
3014    size_t argz_len;    size_t  argz_len = 0;
3015    
3016    if (list_files_by_dir (dirname, &argz, &argz_len) != 0)    if (list_files_by_dir (dirname, &argz, &argz_len) != 0)
3017      goto cleanup;      goto cleanup;
3018      if (!argz)
3019        goto cleanup;
3020    
3021    {    {
3022      char *filename = 0;      char *filename = 0;

Legend:
Removed from v.1.142  
changed lines
  Added in v.1.143

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26