summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorToomas Soome <tsoome@me.com>2020-08-19 18:23:44 +0300
committerToomas Soome <tsoome@me.com>2020-08-22 22:57:37 +0300
commit5fae793b9b02afd1f3f434f3a915a64c08edc7b2 (patch)
treeb79b18eaa7edf7c98892680b08e371c82d501445
parentb89fb824168e36795c325b5e0a4d1e71dd2d8d65 (diff)
downloadillumos-joyent-5fae793b9b02afd1f3f434f3a915a64c08edc7b2.tar.gz
13062 loader: make env_discard() public
Reviewed by: Andy Fiddaman <andy@omniosce.org> Reviewed by: Andrew Stormont <andyjstormont@gmail.com> Approved by: Robert Mustacchi <rm@fingolfin.org>
-rw-r--r--usr/src/boot/Makefile.version2
-rw-r--r--usr/src/boot/lib/libstand/environment.c247
-rw-r--r--usr/src/boot/lib/libstand/stand.h1
3 files changed, 123 insertions, 127 deletions
diff --git a/usr/src/boot/Makefile.version b/usr/src/boot/Makefile.version
index bf217cddfd..d1fd2200d6 100644
--- a/usr/src/boot/Makefile.version
+++ b/usr/src/boot/Makefile.version
@@ -33,4 +33,4 @@ LOADER_VERSION = 1.1
# Use date like formatting here, YYYY.MM.DD.XX, without leading zeroes.
# The version is processed from left to right, the version number can only
# be increased.
-BOOT_VERSION = $(LOADER_VERSION)-2020.08.21.1
+BOOT_VERSION = $(LOADER_VERSION)-2020.08.22.1
diff --git a/usr/src/boot/lib/libstand/environment.c b/usr/src/boot/lib/libstand/environment.c
index 291e330044..d3130d292e 100644
--- a/usr/src/boot/lib/libstand/environment.c
+++ b/usr/src/boot/lib/libstand/environment.c
@@ -1,4 +1,4 @@
-/*
+/*
* Copyright (c) 1998 Michael Smith.
* All rights reserved.
*
@@ -25,7 +25,6 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
/*
* Manage an environment-like space in which string variables may be stored.
@@ -37,9 +36,7 @@ __FBSDID("$FreeBSD$");
#include <string.h>
-static void env_discard(struct env_var *ev);
-
-struct env_var *environ = NULL;
+struct env_var *environ = NULL;
/*
* Look up (name) and return it's env_var structure.
@@ -47,12 +44,12 @@ struct env_var *environ = NULL;
struct env_var *
env_getenv(const char *name)
{
- struct env_var *ev;
-
- for (ev = environ; ev != NULL; ev = ev->ev_next)
- if (!strcmp(ev->ev_name, name))
- break;
- return(ev);
+ struct env_var *ev;
+
+ for (ev = environ; ev != NULL; ev = ev->ev_next)
+ if (strcmp(ev->ev_name, name) == 0)
+ break;
+ return (ev);
}
/*
@@ -65,159 +62,157 @@ env_getenv(const char *name)
*/
int
env_setenv(const char *name, int flags, const void *value,
- ev_sethook_t sethook, ev_unsethook_t unsethook)
+ ev_sethook_t sethook, ev_unsethook_t unsethook)
{
- struct env_var *ev, *curr, *last;
-
- if ((ev = env_getenv(name)) != NULL) {
- /*
- * If there's a set hook, let it do the work (unless we are working
- * for one already.
- */
- if ((ev->ev_sethook != NULL) && !(flags & EV_NOHOOK))
- return (ev->ev_sethook(ev, flags, value));
-
- /* If there is data in the variable, discard it. */
- if (ev->ev_value != NULL && (ev->ev_flags & EV_DYNAMIC) != 0)
- free(ev->ev_value);
- ev->ev_value = NULL;
- ev->ev_flags &= ~EV_DYNAMIC;
-
- } else {
-
- /*
- * New variable; create and sort into list
- */
- ev = malloc(sizeof(struct env_var));
- ev->ev_name = strdup(name);
- ev->ev_value = NULL;
- ev->ev_flags = 0;
- /* hooks can only be set when the variable is instantiated */
- ev->ev_sethook = sethook;
- ev->ev_unsethook = unsethook;
-
- /* Sort into list */
- ev->ev_prev = NULL;
- ev->ev_next = NULL;
- /* Search for the record to insert before */
- for (last = NULL, curr = environ;
- curr != NULL;
- last = curr, curr = curr->ev_next) {
-
- if (strcmp(ev->ev_name, curr->ev_name) < 0) {
- if (curr->ev_prev) {
- curr->ev_prev->ev_next = ev;
- } else {
- environ = ev;
+ struct env_var *ev, *curr, *last;
+
+ if ((ev = env_getenv(name)) != NULL) {
+ /*
+ * If there's a set hook, let it do the work
+ * (unless we are working for one already).
+ */
+ if ((ev->ev_sethook != NULL) && !(flags & EV_NOHOOK))
+ return (ev->ev_sethook(ev, flags, value));
+
+ /* If there is data in the variable, discard it. */
+ if (ev->ev_value != NULL && (ev->ev_flags & EV_DYNAMIC) != 0)
+ free(ev->ev_value);
+ ev->ev_value = NULL;
+ ev->ev_flags &= ~EV_DYNAMIC;
+
+ } else {
+ /*
+ * New variable; create and sort into list
+ */
+ ev = malloc(sizeof (struct env_var));
+ ev->ev_name = strdup(name);
+ ev->ev_value = NULL;
+ ev->ev_flags = 0;
+ /* hooks can only be set when the variable is instantiated */
+ ev->ev_sethook = sethook;
+ ev->ev_unsethook = unsethook;
+
+ /* Sort into list */
+ ev->ev_prev = NULL;
+ ev->ev_next = NULL;
+ /* Search for the record to insert before */
+ for (last = NULL, curr = environ; curr != NULL;
+ last = curr, curr = curr->ev_next) {
+
+ if (strcmp(ev->ev_name, curr->ev_name) < 0) {
+ if (curr->ev_prev) {
+ curr->ev_prev->ev_next = ev;
+ } else {
+ environ = ev;
+ }
+ ev->ev_next = curr;
+ ev->ev_prev = curr->ev_prev;
+ curr->ev_prev = ev;
+ break;
+ }
+ }
+ if (curr == NULL) {
+ if (last == NULL) {
+ environ = ev;
+ } else {
+ last->ev_next = ev;
+ ev->ev_prev = last;
+ }
}
- ev->ev_next = curr;
- ev->ev_prev = curr->ev_prev;
- curr->ev_prev = ev;
- break;
- }
}
- if (curr == NULL) {
- if (last == NULL) {
- environ = ev;
- } else {
- last->ev_next = ev;
- ev->ev_prev = last;
- }
+
+ /* If we have a new value, use it */
+ if (flags & EV_VOLATILE) {
+ ev->ev_value = strdup(value);
+ ev->ev_flags |= EV_DYNAMIC;
+ } else {
+ ev->ev_value = (char *)value;
+ ev->ev_flags |= flags & EV_DYNAMIC;
}
- }
-
- /* If we have a new value, use it */
- if (flags & EV_VOLATILE) {
- ev->ev_value = strdup(value);
- ev->ev_flags |= EV_DYNAMIC;
- } else {
- ev->ev_value = (char *)value;
- ev->ev_flags |= flags & EV_DYNAMIC;
- }
-
- return(0);
+
+ return (0);
}
char *
getenv(const char *name)
{
- struct env_var *ev;
-
- /* Set but no value gives empty string */
- if ((ev = env_getenv(name)) != NULL) {
- if (ev->ev_value != NULL)
- return(ev->ev_value);
- return("");
- }
- return(NULL);
+ struct env_var *ev;
+
+ /* Set but no value gives empty string */
+ if ((ev = env_getenv(name)) != NULL) {
+ if (ev->ev_value != NULL)
+ return (ev->ev_value);
+ return ("");
+ }
+ return (NULL);
}
int
setenv(const char *name, const char *value, int overwrite)
{
- /* No guarantees about state, always assume volatile */
- if (overwrite || (env_getenv(name) == NULL))
- return(env_setenv(name, EV_VOLATILE, value, NULL, NULL));
- return(0);
+ /* No guarantees about state, always assume volatile */
+ if (overwrite || (env_getenv(name) == NULL))
+ return (env_setenv(name, EV_VOLATILE, value, NULL, NULL));
+ return (0);
}
int
putenv(const char *string)
{
- char *value, *copy;
- int result;
-
- copy = strdup(string);
- if ((value = strchr(copy, '=')) != NULL)
- *(value++) = 0;
- result = setenv(copy, value, 1);
- free(copy);
- return(result);
+ char *value, *copy;
+ int result;
+
+ copy = strdup(string);
+ if ((value = strchr(copy, '=')) != NULL)
+ *(value++) = 0;
+ result = setenv(copy, value, 1);
+ free(copy);
+ return (result);
}
int
unsetenv(const char *name)
{
- struct env_var *ev;
- int err;
-
- err = 0;
- if ((ev = env_getenv(name)) == NULL) {
- err = ENOENT;
- } else {
- if (ev->ev_unsethook != NULL)
- err = ev->ev_unsethook(ev);
- if (err == 0) {
- env_discard(ev);
+ struct env_var *ev;
+ int err;
+
+ err = 0;
+ if ((ev = env_getenv(name)) == NULL) {
+ err = ENOENT;
+ } else {
+ if (ev->ev_unsethook != NULL)
+ err = ev->ev_unsethook(ev);
+ if (err == 0) {
+ env_discard(ev);
+ }
}
- }
- return(err);
+ return (err);
}
-static void
+void
env_discard(struct env_var *ev)
{
- if (ev->ev_prev)
- ev->ev_prev->ev_next = ev->ev_next;
- if (ev->ev_next)
- ev->ev_next->ev_prev = ev->ev_prev;
- if (environ == ev)
- environ = ev->ev_next;
- free(ev->ev_name);
- if (ev->ev_value != NULL && (ev->ev_flags & EV_DYNAMIC) != 0)
- free(ev->ev_value);
- free(ev);
+ if (ev->ev_prev)
+ ev->ev_prev->ev_next = ev->ev_next;
+ if (ev->ev_next)
+ ev->ev_next->ev_prev = ev->ev_prev;
+ if (environ == ev)
+ environ = ev->ev_next;
+ free(ev->ev_name);
+ if (ev->ev_value != NULL && (ev->ev_flags & EV_DYNAMIC) != 0)
+ free(ev->ev_value);
+ free(ev);
}
int
env_noset(struct env_var *ev __unused, int flags __unused,
const void *value __unused)
{
- return(EPERM);
+ return (EPERM);
}
int
env_nounset(struct env_var *ev __unused)
{
- return(EPERM);
+ return (EPERM);
}
diff --git a/usr/src/boot/lib/libstand/stand.h b/usr/src/boot/lib/libstand/stand.h
index 5f94a7fa58..63595f2956 100644
--- a/usr/src/boot/lib/libstand/stand.h
+++ b/usr/src/boot/lib/libstand/stand.h
@@ -345,6 +345,7 @@ extern struct env_var *env_getenv(const char *name);
extern int env_setenv(const char *name, int flags,
const void *value, ev_sethook_t sethook,
ev_unsethook_t unsethook);
+extern void env_discard(struct env_var *);
extern char *getenv(const char *name);
extern int setenv(const char *name, const char *value,
int overwrite);