summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_environment.c
diff options
context:
space:
mode:
authorjlemon <jlemon@FreeBSD.org>2001-09-21 02:09:01 +0000
committerjlemon <jlemon@FreeBSD.org>2001-09-21 02:09:01 +0000
commit23a6296f66439cc7d9d467f2d191b9baf8245fd4 (patch)
tree70854f89d7ad3dd52be1925818036e739a335f39 /sys/kern/kern_environment.c
parent7a4775391d50e1c0b95b4257c27f6ddac5045127 (diff)
downloadFreeBSD-src-23a6296f66439cc7d9d467f2d191b9baf8245fd4.zip
FreeBSD-src-23a6296f66439cc7d9d467f2d191b9baf8245fd4.tar.gz
Revert last commit. The same functionality can be obtained through the
'kenv' command, which I obviously was unaware of.
Diffstat (limited to 'sys/kern/kern_environment.c')
-rw-r--r--sys/kern/kern_environment.c53
1 files changed, 27 insertions, 26 deletions
diff --git a/sys/kern/kern_environment.c b/sys/kern/kern_environment.c
index 0ce8e63..6769c06 100644
--- a/sys/kern/kern_environment.c
+++ b/sys/kern/kern_environment.c
@@ -41,7 +41,6 @@
#include <sys/systm.h>
#include <sys/sysctl.h>
#include <sys/libkern.h>
-#include <sys/sbuf.h>
char *kern_envp;
@@ -105,33 +104,35 @@ getenv_quad(const char *name, quad_t *data)
static int
sysctl_kernenv(SYSCTL_HANDLER_ARGS)
{
- const char *header[] = {
- "---Loader Environment---", "---Static Environment---" };
- const int headerlen = 128; /* conservative */
- struct sbuf *sb;
- int error, len;
- char *cp;
-
- len = 0;
- for (cp = kern_envp; cp != NULL; cp = kernenv_next(cp))
- len += strlen(cp) + 1;
- for (cp = static_hints; cp != NULL; cp = kernenv_next(cp))
- len += strlen(cp) + 1;
- sb = sbuf_new(NULL, NULL, len + headerlen, 0);
- sbuf_printf(sb, "\n%s\n", header[0]);
- for (cp = kern_envp; cp != NULL; cp = kernenv_next(cp))
- sbuf_printf(sb, "%s\n", cp);
- sbuf_printf(sb, "\n%s\n", header[1]);
- for (cp = static_hints; cp != NULL; cp = kernenv_next(cp))
- sbuf_printf(sb, "%s\n", cp);
- sbuf_finish(sb);
- error = SYSCTL_OUT(req, sbuf_data(sb), sbuf_len(sb));
- sbuf_delete(sb);
- return (error);
+ int *name = (int *)arg1;
+ u_int namelen = arg2;
+ char *cp;
+ int i, error;
+
+ if (kern_envp == NULL)
+ return(ENOENT);
+
+ name++;
+ namelen--;
+
+ if (namelen != 1)
+ return(EINVAL);
+
+ cp = kern_envp;
+ for (i = 0; i < name[0]; i++) {
+ cp = kernenv_next(cp);
+ if (cp == NULL)
+ break;
+ }
+
+ if (cp == NULL)
+ return(ENOENT);
+
+ error = SYSCTL_OUT(req, cp, strlen(cp) + 1);
+ return (error);
}
-SYSCTL_OID(_kern, OID_AUTO, env, CTLTYPE_STRING | CTLFLAG_RD,
- NULL, 0, sysctl_kernenv, "A", "Kernel environment");
+SYSCTL_NODE(_kern, OID_AUTO, environment, CTLFLAG_RD, sysctl_kernenv, "kernel environment space");
/*
* Find the next entry after the one which (cp) falls within, return a
OpenPOWER on IntegriCloud