summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ldso/include/dl-defs.h7
-rw-r--r--utils/ldconfig.c51
2 files changed, 35 insertions, 23 deletions
diff --git a/ldso/include/dl-defs.h b/ldso/include/dl-defs.h
index 38f8762be..37588b86c 100644
--- a/ldso/include/dl-defs.h
+++ b/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 */
diff --git a/utils/ldconfig.c b/utils/ldconfig.c
index 613c97af0..a7d36f75c 100644
--- a/utils/ldconfig.c
+++ b/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);