Explorar el Código

Cleanup for when LDSO_CACHE_SUPPORT is disabled

Eric Andersen hace 20 años
padre
commit
e528b69885
Se han modificado 2 ficheros con 35 adiciones y 23 borrados
  1. 4 3
      ldso/include/dl-defs.h
  2. 31 20
      utils/ldconfig.c

+ 4 - 3
ldso/include/dl-defs.h

@@ -9,7 +9,7 @@
 #define LIB_ELF_LIBC6 3
 #define LIB_ELF_LIBC0 4
 
-/* should we include features.h? */
+#if defined(__LDSO_PRELOAD_FILE_SUPPORT__) || defined(__LDSO_CACHE_SUPPORT__)
 #ifndef __LDSO_BASE_FILENAME__
 #define __LDSO_BASE_FILENAME__ "ld.so"
 #endif
@@ -19,11 +19,10 @@
 #define LDSO_PRELOAD LDSO_BASE_PATH ".preload"
 #endif
 
-/* NB: ldconfig still uses these values */
+#ifdef __LDSO_CACHE_SUPPORT__
 #define LDSO_CONF    LDSO_BASE_PATH ".conf"
 #define LDSO_CACHE   LDSO_BASE_PATH ".cache"
 
-#ifdef __LDSO_CACHE_SUPPORT__
 #define LDSO_CACHE_MAGIC "ld.so-"
 #define LDSO_CACHE_MAGIC_LEN (sizeof LDSO_CACHE_MAGIC -1)
 #define LDSO_CACHE_VER "1.7.0"
@@ -42,4 +41,6 @@ typedef struct {
 } libentry_t;
 #endif	/* __LDSO_CACHE_SUPPORT__ */
 
+#endif
+
 #endif	/* _LD_DEFS_H */

+ 31 - 20
utils/ldconfig.c

@@ -90,14 +90,13 @@ char *prog = NULL;
 int debug = 0;			/* debug mode */
 int verbose = 0;		/* verbose mode */
 int libmode = 0;		/* library mode */
-int nocache = 0;		/* don't build cache */
 int nolinks = 0;		/* don't update links */
-
+int nocache = 0;		/* don't build cache */
 char *conffile = LDSO_CONF;	/* default conf file */
 char *cachefile = LDSO_CACHE;	/* default cache file */
 void cache_print(void);
-void cache_dolib(const char *dir, const char *so, int libtype);
 void cache_write(void);
+void cache_dolib(const char *dir, const char *so, int libtype);
 
 /* These two are used internally -- you shouldn't need to use them */
 static void verror_msg(const char *s, va_list p)
@@ -506,10 +505,8 @@ void scan_dir(const char *rawname)
     {
 	if (!lp->islink)
 	    link_shlib(name, lp->name, lp->so);
-#ifdef __LDSO_CACHE_SUPPORT__
 	if (!nocache)
 	    cache_dolib(name, lp->so, lp->libtype);
-#endif
     }
 
     /* always try to clean up after ourselves */
@@ -526,6 +523,20 @@ void scan_dir(const char *rawname)
     return;
 }
 
+#ifndef __LDSO_CACHE_SUPPORT__
+void cache_print(void)
+{
+    printf("Library cache disabled\n");
+}
+void cache_dolib(const char *dir, const char *so, int libtype)
+{
+    return;
+}
+void cache_write(void)
+{
+    return;
+}
+#else
 /* return the list of system-specific directories */
 char *get_extpath(void)
 {
@@ -556,7 +567,6 @@ char *get_extpath(void)
     return res;
 }
 
-#ifdef __LDSO_CACHE_SUPPORT__
 typedef struct liblist
 {
     int flags;
@@ -719,20 +729,21 @@ void cache_print(void)
 
     munmap (c,st.st_size);
 }
-#else
-void cache_print(void)
-{
-    warnx("Cache support disabled\n");
-}
 #endif
 
 void usage(void)
 {
     fprintf(stderr,
-	    "ldconfig - updates symlinks for shared libraries\n\n"
+#ifdef __LDSO_CACHE_SUPPORT__
+	    "ldconfig - updates symlinks and cache for shared libraries\n\n"
 	    "Usage: ldconfig [-DvqnNX] [-f conf] [-C cache] [-r root] dir ...\n"
 	    "       ldconfig -l [-Dv] lib ...\n"
 	    "       ldconfig -p\n\nOptions:\n"
+#else
+	    "ldconfig - updates symlinks for shared libraries\n\n"
+	    "Usage: ldconfig [-DvqnX] [-r root] dir ...\n"
+	    "       ldconfig -l [-Dv] lib ...\n\nOptions:\n"
+#endif
 	    "\t-D:\t\tdebug mode, don't update links\n"
 	    "\t-v:\t\tverbose mode, print things as we go\n"
 	    "\t-q:\t\tquiet mode, don't print warnings\n"
@@ -745,8 +756,12 @@ void usage(void)
 	    "\t-C cache:\tuse cache instead of %s\n"
 	    "\t-r root :\tfirst, do a chroot to the indicated directory\n"
 	    "\tdir ... :\tdirectories to process\n"
+#ifdef __LDSO_CACHE_SUPPORT__
 	    "\tlib ... :\tlibraries to link\n\n",
 	    LDSO_CONF, LDSO_CACHE
+#else
+	    "\tlib ... :\tlibraries to link\n\n"
+#endif
 	   );
     exit(EXIT_FATAL);
 }
@@ -756,11 +771,11 @@ int main(int argc, char **argv)
 {
     int i, c;
     int nodefault = 0;
-    int printcache = 0;
     char *cp, *dir, *so;
-    char *extpath;
     int libtype, islink;
     char *chroot_dir = NULL;
+    int printcache = 0;
+    char *extpath;
 
     prog = argv[0];
     opterr = 0;
@@ -884,8 +899,7 @@ int main(int argc, char **argv)
 	    scan_dir(UCLIBC_RUNTIME_PREFIX "usr/lib");
 #ifndef __LDSO_CACHE_SUPPORT__
 	    scan_dir(UCLIBC_RUNTIME_PREFIX "usr/X11R6/lib");
-#endif
-
+#else
 	    /* I guess the defaults aren't good enough */
 	    if ((extpath = get_extpath()))
 	    {
@@ -896,24 +910,21 @@ int main(int argc, char **argv)
 				while (cp[--len] == '/' && len)
 					cp[len] = 0;
 			/* we do the redundancy check only if cache usage is enabled */
-#ifdef __LDSO_CACHE_SUPPORT__
 			if (strcmp(UCLIBC_RUNTIME_PREFIX "lib", cp) == 0 ||
 			    strcmp(UCLIBC_RUNTIME_PREFIX "usr/lib", cp) == 0) {
 				if (verbose >= 0)
 					warnx("Remove `%s' from `%s'\n", cp, LDSO_CONF);
 				continue;
 			}
-#endif
 		    scan_dir(cp);
 		}
 		free(extpath);
 	    }
+#endif
 	}
 
-#ifdef __LDSO_CACHE_SUPPORT__
 	if (!nocache)
 	    cache_write();
-#endif
     }
 
     exit(EXIT_OK);