summaryrefslogtreecommitdiffstats
path: root/sbin/ldconfig
diff options
context:
space:
mode:
authorjkh <jkh@FreeBSD.org>1997-07-11 14:45:41 +0000
committerjkh <jkh@FreeBSD.org>1997-07-11 14:45:41 +0000
commit9ede654e001c9f42a578493aefb7c0a4feca3dbf (patch)
treec57b41520787194a93e0a0521777999404261baf /sbin/ldconfig
parent4320b928687c8a38af1fa22b6545e894f95172d2 (diff)
downloadFreeBSD-src-9ede654e001c9f42a578493aefb7c0a4feca3dbf.zip
FreeBSD-src-9ede654e001c9f42a578493aefb7c0a4feca3dbf.tar.gz
Allow ldconfig to accept files (containing directory paths) as well as
directory paths. Reviewed by: jkh & jdp Submitted by: Hans Zuidam <hans@brandinnovators.com>
Diffstat (limited to 'sbin/ldconfig')
-rw-r--r--sbin/ldconfig/ldconfig.819
-rw-r--r--sbin/ldconfig/ldconfig.c63
2 files changed, 73 insertions, 9 deletions
diff --git a/sbin/ldconfig/ldconfig.8 b/sbin/ldconfig/ldconfig.8
index 07d5d69..3aee7bd 100644
--- a/sbin/ldconfig/ldconfig.8
+++ b/sbin/ldconfig/ldconfig.8
@@ -27,7 +27,7 @@
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
-.\" $Id$
+.\" $Id: ldconfig.8,v 1.12 1997/02/22 15:46:37 peter Exp $
.\"
.Dd October 3, 1993
.Dt LDCONFIG 8
@@ -39,7 +39,7 @@
.Nm ldconfig
.Op Fl mrsv
.Op Fl f Ar hints_file
-.Op Ar directory Ar ...
+.Op Ar directory | file Ar ...
.Sh DESCRIPTION
.Nm
is used to prepare a set of
@@ -57,6 +57,13 @@ directory search operations
.Xr ld.so 1
would have to perform to load the required shared libraries.
.Pp
+Files named on the command line are expected to contain directories
+to scan for shared libraries. Each directory's pathname must start on a new
+line. Blank lines and lines starting with the comment character
+.Ql \&#
+are ignored. A standard name for this file is
+.Xr /etc/ld.so.conf.
+.Pp
The shared libraries so found will be automatically available for loading
if needed by the program being prepared for execution. This obviates the need
for storing search paths within the executable.
@@ -120,7 +127,13 @@ be safely loaded. It is presumed that the set of directories specified to
.Nm ldconfig
are under control of the system's administrator.
.Sh FILES
-.Pa /var/run/ld.so.hints
+.Bl -tag -width /var/run/ld.so.hintsxxx -compact
+.It Pa /var/run/ld.so.hints
+Default
+.Dq hints
+file.
+.It Pa /etc/ld.so.conf
+Standard configuration file.
.Sh SEE ALSO
.Xr ld 1 ,
.Xr link 5
diff --git a/sbin/ldconfig/ldconfig.c b/sbin/ldconfig/ldconfig.c
index c26edcb..3eed70a 100644
--- a/sbin/ldconfig/ldconfig.c
+++ b/sbin/ldconfig/ldconfig.c
@@ -27,7 +27,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $Id$
+ * $Id: ldconfig.c,v 1.18 1997/02/22 15:46:38 peter Exp $
*/
#include <sys/param.h>
@@ -120,7 +120,7 @@ char *argv[];
verbose = 1;
break;
default:
- errx(1, "Usage: %s [-mrsv] [-f hints_file] [dir ...]",
+ errx(1, "Usage: %s [-mrsv] [-f hints_file] [dir | file ...]",
__progname);
break;
}
@@ -136,13 +136,24 @@ char *argv[];
if (!nostd && !merge)
std_search_path();
- if (!justread) { /* Add any directories from the command line */
+ /* Add any directories/files from the command line */
+ if (!justread) {
for (i = optind; i < argc; i++) {
- if (access(argv[i], F_OK) == -1) { /* Doesn't exist */
+ struct stat stbuf;
+
+ if (stat(argv[i], &stbuf) == -1) {
warn("%s", argv[i]);
rval = -1;
- } else
- add_search_path(argv[i]);
+ } else {
+ /*
+ * See if this is a directory-containing
+ * file instead of a directory
+ */
+ if (S_ISREG(stbuf.st_mode))
+ rval |= dofile(argv[i], 0);
+ else
+ add_search_path(argv[i]);
+ }
}
}
@@ -166,6 +177,45 @@ char *argv[];
}
int
+dofile(fname, silent)
+char *fname;
+int silent;
+{
+ FILE *hfp;
+ char buf[MAXPATHLEN];
+ int rval = 0;
+ char *cp, *sp;
+
+ if ((hfp = fopen(fname, "r")) == NULL) {
+ warn("%s", fname);
+ return -1;
+ }
+
+ while (fgets(buf, sizeof(buf), hfp)) {
+ cp = buf;
+ while (isspace(*cp))
+ cp++;
+ if (*cp == '#' || *cp == '\0')
+ continue;
+ sp = cp;
+ while (!isspace(*cp) && *cp != '\0')
+ cp++;
+
+ if (*cp != '\n') {
+ *cp = '\0';
+ warnx("%s: Trailing characters ignored", sp);
+ }
+
+ *cp = '\0';
+
+ rval |= dodir(sp, silent);
+ }
+
+ (void)fclose(hfp);
+ return rval;
+}
+
+int
dodir(dir, silent)
char *dir;
int silent;
@@ -218,6 +268,7 @@ int silent;
enter(dir, dp->d_name, name, dewey, ndewey);
}
+ closedir(dd);
return 0;
}
OpenPOWER on IntegriCloud