Allow ldconfig to accept files (containing directory paths) as well as
directory paths. Reviewed by: jkh & jdp Submitted by: Hans Zuidam <hans@brandinnovators.com>
This commit is contained in:
parent
73f3d05336
commit
571b472b20
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=27334
@ -27,7 +27,7 @@
|
|||||||
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
.\" 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
|
.Dd October 3, 1993
|
||||||
.Dt LDCONFIG 8
|
.Dt LDCONFIG 8
|
||||||
@ -39,7 +39,7 @@
|
|||||||
.Nm ldconfig
|
.Nm ldconfig
|
||||||
.Op Fl mrsv
|
.Op Fl mrsv
|
||||||
.Op Fl f Ar hints_file
|
.Op Fl f Ar hints_file
|
||||||
.Op Ar directory Ar ...
|
.Op Ar directory | file Ar ...
|
||||||
.Sh DESCRIPTION
|
.Sh DESCRIPTION
|
||||||
.Nm
|
.Nm
|
||||||
is used to prepare a set of
|
is used to prepare a set of
|
||||||
@ -57,6 +57,13 @@ directory search operations
|
|||||||
.Xr ld.so 1
|
.Xr ld.so 1
|
||||||
would have to perform to load the required shared libraries.
|
would have to perform to load the required shared libraries.
|
||||||
.Pp
|
.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
|
The shared libraries so found will be automatically available for loading
|
||||||
if needed by the program being prepared for execution. This obviates the need
|
if needed by the program being prepared for execution. This obviates the need
|
||||||
for storing search paths within the executable.
|
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
|
.Nm ldconfig
|
||||||
are under control of the system's administrator.
|
are under control of the system's administrator.
|
||||||
.Sh FILES
|
.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
|
.Sh SEE ALSO
|
||||||
.Xr ld 1 ,
|
.Xr ld 1 ,
|
||||||
.Xr link 5
|
.Xr link 5
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* 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>
|
#include <sys/param.h>
|
||||||
@ -120,7 +120,7 @@ char *argv[];
|
|||||||
verbose = 1;
|
verbose = 1;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
errx(1, "Usage: %s [-mrsv] [-f hints_file] [dir ...]",
|
errx(1, "Usage: %s [-mrsv] [-f hints_file] [dir | file ...]",
|
||||||
__progname);
|
__progname);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -136,13 +136,24 @@ char *argv[];
|
|||||||
if (!nostd && !merge)
|
if (!nostd && !merge)
|
||||||
std_search_path();
|
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++) {
|
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]);
|
warn("%s", argv[i]);
|
||||||
rval = -1;
|
rval = -1;
|
||||||
} else
|
} else {
|
||||||
add_search_path(argv[i]);
|
/*
|
||||||
|
* 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]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -165,6 +176,45 @@ char *argv[];
|
|||||||
return rval;
|
return rval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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
|
int
|
||||||
dodir(dir, silent)
|
dodir(dir, silent)
|
||||||
char *dir;
|
char *dir;
|
||||||
@ -218,6 +268,7 @@ int silent;
|
|||||||
enter(dir, dp->d_name, name, dewey, ndewey);
|
enter(dir, dp->d_name, name, dewey, ndewey);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
closedir(dd);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
.\" 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
|
.Dd October 3, 1993
|
||||||
.Dt LDCONFIG 8
|
.Dt LDCONFIG 8
|
||||||
@ -39,7 +39,7 @@
|
|||||||
.Nm ldconfig
|
.Nm ldconfig
|
||||||
.Op Fl mrsv
|
.Op Fl mrsv
|
||||||
.Op Fl f Ar hints_file
|
.Op Fl f Ar hints_file
|
||||||
.Op Ar directory Ar ...
|
.Op Ar directory | file Ar ...
|
||||||
.Sh DESCRIPTION
|
.Sh DESCRIPTION
|
||||||
.Nm
|
.Nm
|
||||||
is used to prepare a set of
|
is used to prepare a set of
|
||||||
@ -57,6 +57,13 @@ directory search operations
|
|||||||
.Xr ld.so 1
|
.Xr ld.so 1
|
||||||
would have to perform to load the required shared libraries.
|
would have to perform to load the required shared libraries.
|
||||||
.Pp
|
.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
|
The shared libraries so found will be automatically available for loading
|
||||||
if needed by the program being prepared for execution. This obviates the need
|
if needed by the program being prepared for execution. This obviates the need
|
||||||
for storing search paths within the executable.
|
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
|
.Nm ldconfig
|
||||||
are under control of the system's administrator.
|
are under control of the system's administrator.
|
||||||
.Sh FILES
|
.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
|
.Sh SEE ALSO
|
||||||
.Xr ld 1 ,
|
.Xr ld 1 ,
|
||||||
.Xr link 5
|
.Xr link 5
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* 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>
|
#include <sys/param.h>
|
||||||
@ -120,7 +120,7 @@ char *argv[];
|
|||||||
verbose = 1;
|
verbose = 1;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
errx(1, "Usage: %s [-mrsv] [-f hints_file] [dir ...]",
|
errx(1, "Usage: %s [-mrsv] [-f hints_file] [dir | file ...]",
|
||||||
__progname);
|
__progname);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -136,13 +136,24 @@ char *argv[];
|
|||||||
if (!nostd && !merge)
|
if (!nostd && !merge)
|
||||||
std_search_path();
|
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++) {
|
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]);
|
warn("%s", argv[i]);
|
||||||
rval = -1;
|
rval = -1;
|
||||||
} else
|
} else {
|
||||||
add_search_path(argv[i]);
|
/*
|
||||||
|
* 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]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -165,6 +176,45 @@ char *argv[];
|
|||||||
return rval;
|
return rval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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
|
int
|
||||||
dodir(dir, silent)
|
dodir(dir, silent)
|
||||||
char *dir;
|
char *dir;
|
||||||
@ -218,6 +268,7 @@ int silent;
|
|||||||
enter(dir, dp->d_name, name, dewey, ndewey);
|
enter(dir, dp->d_name, name, dewey, ndewey);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
closedir(dd);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user