PERFORCE change 174213 for review

Robert Watson rwatson at FreeBSD.org
Wed Feb 3 10:12:24 UTC 2010


http://p4web.freebsd.org/chv.cgi?CH=174213

Change 174213 by rwatson at rwatson_vimage_client on 2010/02/03 10:11:53

	Improve style alignment of capability-related code with existing
	rtld style (which isn't style(9)).

Affected files ...

.. //depot/projects/trustedbsd/capabilities/src/libexec/rtld-elf/rtld.c#36 edit

Differences ...

==== //depot/projects/trustedbsd/capabilities/src/libexec/rtld-elf/rtld.c#36 (text+ko) ====

@@ -251,7 +251,6 @@
     (func_ptr_type) &ld_insandbox,
 #endif
     (func_ptr_type) &ld_libdirs,
- 
     NULL
 };
 
@@ -833,19 +832,19 @@
 static void *
 find_capstart(const Obj_Entry *obj)
 {
-	const char *capstart_str = "_capstart";
-	const Elf_Sym *def;
-	const Obj_Entry *defobj;
-	unsigned long hash;
+    const char *capstart_str = "_capstart";
+    const Elf_Sym *def;
+    const Obj_Entry *defobj;
+    unsigned long hash;
 
-	hash = elf_hash(capstart_str);
-	def = symlook_default(capstart_str, hash, obj, &defobj, NULL,
-	    SYMLOOK_IN_PLT);
-	if (def == NULL)
-		return (NULL);
-	if (ELF_ST_TYPE(def->st_info) != STT_FUNC)
-		return (NULL);
-	return (make_function_pointer(def, defobj));
+    hash = elf_hash(capstart_str);
+    def = symlook_default(capstart_str, hash, obj, &defobj, NULL,
+	SYMLOOK_IN_PLT);
+    if (def == NULL)
+	return (NULL);
+    if (ELF_ST_TYPE(def->st_info) != STT_FUNC)
+	return (NULL);
+    return (make_function_pointer(def, defobj));
 }
 #endif
 
@@ -1233,23 +1232,24 @@
 
 #ifdef IN_RTLD_CAP
 /*
- * Find the library with the given name, and return an open file descriptor to it.
+ * Find the library with the given name, and return an open file descriptor
+ * to it.
  */
 static int
-find_library_fd(const char *name) {
+find_library_fd(const char *name)
+{
+    int fd, i;
 
     if (ld_library_dirs == NULL)
-	    init_libdirs();
-
-    for (int i = 0; (i < ld_library_dirlen) && (ld_library_dirs[i] != -1); i++) {
-
-	int fd = openat(ld_library_dirs[i], name, O_RDONLY);
+	init_libdirs();
+    for (i = 0; (i < ld_library_dirlen) && (ld_library_dirs[i] != -1); i++) {
+	fd = openat(ld_library_dirs[i], name, O_RDONLY);
 	if (fd >= 0)
-		return fd;
+	    return (fd);
     }
-
     return (-1);
 }
+
 #else
 /*
  * Find the library with the given name, and return its full pathname.
@@ -1663,24 +1663,22 @@
 	_rtld_error("Unable to find \"%s\" in LD_LIBRARY_DIRS", path);
     }
 #else
-    if (fd == -1) {
-	path = find_library(name, refobj);
-	if (path == NULL)
+    path = find_library(name, refobj);
+    if (path == NULL)
 	return NULL;
 
-	/*
-	 * If we didn't find a match by pathname, open the file and check
-	 * again by device and inode.  This avoids false mismatches caused
-	 * by multiple links or ".." in pathnames.
-	 *
-	 * To avoid a race, we open the file and use fstat() rather than
-	 * using stat().
-	 */
-	if ((fd = open(path, O_RDONLY)) == -1) {
+    /*
+     * If we didn't find a match by pathname, open the file and check
+     * again by device and inode.  This avoids false mismatches caused
+     * by multiple links or ".." in pathnames.
+     *
+     * To avoid a race, we open the file and use fstat() rather than
+     * using stat().
+     */
+    if ((fd = open(path, O_RDONLY)) == -1) {
 	_rtld_error("Cannot open \"%s\"", path);
 	free(path);
 	return NULL;
-	}
     }
 #endif
     if (fstat(fd, &sb) == -1) {
@@ -2113,40 +2111,42 @@
  * Add a file descriptor to ld_library_dirs.
  */
 static void
-add_libdir_fd(int fd) {
+add_libdir_fd(int fd)
+{
+    int i;
 
-	if (ld_library_dirs == NULL) {
-	    /* Initialize the FD list. */
+    if (ld_library_dirs == NULL) {
+	/* Initialize the FD list. */
+	ld_library_dirlen = INITIAL_FDLEN;
+	ld_library_dirs = xmalloc(ld_library_dirlen * sizeof(int));
+	memset(ld_library_dirs, 0xff, ld_library_dirlen * sizeof(int));
+    }
 
-	    ld_library_dirlen = INITIAL_FDLEN;
-	    ld_library_dirs = xmalloc(ld_library_dirlen * sizeof(int));
-	    memset(ld_library_dirs, 0xff, ld_library_dirlen * sizeof(int));
-	}
+    /* Find the next available FD slot. */
+    for (i = 0; (i < ld_library_dirlen) && (ld_library_dirs[i] != -1); i++)
+	;
 
-	/* Find the next available FD slot. */
-	int i;
-	for (i = 0; (i < ld_library_dirlen) && (ld_library_dirs[i] != -1); i++) ;
+    if (i == ld_library_dirlen) {
+	/* We need more space. */
+	int old_size = ld_library_dirlen + sizeof(int);
 
-	if (i == ld_library_dirlen) {
-	    /* We need more space. */
-	    int old_size = ld_library_dirlen + sizeof(int);
+	ld_library_dirlen *= 2;
+	ld_library_dirs = realloc(ld_library_dirs, 2 * old_size);
+	memset(ld_library_dirs + old_size, 0xff, old_size);
 
-	    ld_library_dirlen *= 2;
-	    ld_library_dirs = realloc(ld_library_dirs, 2 * old_size);
-	    memset(ld_library_dirs + old_size, 0xff, old_size);
-
-	    if (ld_library_dirs == NULL)
-		err(-1, "realloc() failed");
-	}
-
-	ld_library_dirs[i] = fd;
+	if (ld_library_dirs == NULL)
+	    err(-1, "realloc() failed");
+    }
+    ld_library_dirs[i] = fd;
 }
 
 /*
- * Add file descriptors for a path list (e.g. '/lib:/usr/lib') to ld_library_dirs.
+ * Add file descriptors for a path list (e.g. '/lib:/usr/lib') to
+ * ld_library_dirs.
  */
 static void
-add_libdir_paths(const char *path) {
+add_libdir_paths(const char *path)
+{
 
     if (path == NULL)
 	return;
@@ -2158,24 +2158,22 @@
     strncpy(pathcopy, path, pathlen + 1);
 
     for (dirname = strtok_r(pathcopy, ":", &tokcontext); dirname;
-         dirname = strtok_r(NULL, ":", &tokcontext)) {
-
+	dirname = strtok_r(NULL, ":", &tokcontext)) {
+	struct try_library_args arg;
 	int fd;
 
-	struct try_library_args arg;
 	arg.name = "";
 	arg.namelen = 0;
 	arg.buffer = xmalloc(PATH_MAX);
 	arg.buflen = PATH_MAX;
 
-	if (try_library_path(dirname, strnlen(dirname, PATH_MAX), &arg))
+	if (try_library_path(dirname, strnlen(dirname, PATH_MAX), &arg)) {
 	    fd = open(dirname, O_RDONLY);
-
-	else {
+	} else {
 	    /* 'dirname' is not a directory path; perhaps it's a descriptor? */
 	    fd = (int) strtol(dirname, NULL, 0);
 	    if ((fd == 0) && (errno == 0))
-		    continue;
+		continue;
 	}
 
 	if (fd >= 0)
@@ -2189,17 +2187,16 @@
  * Build the list of library file descriptors.
  */
 static void
-init_libdirs(void) {
+init_libdirs(void)
+{
 #ifdef IN_RTLD_CAP
+    char *envvar = getenv(LD_ "LIBRARY_DIRS");
 
-    char *envvar = getenv(LD_ "LIBRARY_DIRS");
     if (envvar == NULL)
 	err(-1, "No %s set in capability mode", LD_ "LIBRARY_DIRS");
 
     add_libdir_paths(envvar);
-
 #else /* !IN_RTLD_CAP */
-
     /* Look for directories a la find_library (TODO: refactor!). */
     add_libdir_paths(ld_library_path);
     add_libdir_paths(gethints());
@@ -2212,34 +2209,34 @@
 	ld_library_dirs[0] = -1;
     }
 }
+
 /*
  * Return an array of file descriptors for the library search paths.
+ *
+ * XXX: synchronization of ld_library_dirs?
  */
 int
-ld_libdirs(int *fds, int *fdcount) {
+ld_libdirs(int *fds, int *fdcount)
+{
+    int i = 0;
 
-	if (fdcount == NULL)
-	    return (-1);
-
-	else if (fds == NULL) {
-	    *fdcount = -1;
-	    return (-1);
-	}
-
-	if (ld_library_dirs == NULL)
-	    init_libdirs();
-
-	int i = 0;
-	for (i = 0; (i < ld_library_dirlen) && (ld_library_dirs[i] != -1); i++) ;
-
-	if (*fdcount < i) {
-		*fdcount = i;
-		return (-1);
-	}
-
+    if (fdcount == NULL)
+	return (-1);
+    else if (fds == NULL) {
+	*fdcount = -1;
+	return (-1);
+    }
+    if (ld_library_dirs == NULL)
+	init_libdirs();
+    for (i = 0; (i < ld_library_dirlen) && (ld_library_dirs[i] != -1); i++)
+	;
+    if (*fdcount < i) {
 	*fdcount = i;
-	memcpy(fds, ld_library_dirs, i * sizeof(int));
-	return 0;
+	return (-1);
+    }
+    *fdcount = i;
+    memcpy(fds, ld_library_dirs, i * sizeof(int));
+    return (0);
 }
 
 int


More information about the p4-projects mailing list