Date: Thu, 5 Jul 2018 16:28:43 +0000 (UTC) From: Kyle Evans <kevans@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r335997 - in head: sys/kern sys/sys usr.sbin/config Message-ID: <201807051628.w65GShLv039323@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: kevans Date: Thu Jul 5 16:28:43 2018 New Revision: 335997 URL: https://svnweb.freebsd.org/changeset/base/335997 Log: Revert r335995 due to accidental changes snuck in Modified: head/sys/kern/kern_environment.c head/sys/kern/subr_hints.c head/sys/kern/tty.c head/sys/sys/systm.h head/usr.sbin/config/config.5 head/usr.sbin/config/config.h head/usr.sbin/config/config.y head/usr.sbin/config/mkmakefile.c Modified: head/sys/kern/kern_environment.c ============================================================================== --- head/sys/kern/kern_environment.c Thu Jul 5 16:27:34 2018 (r335996) +++ head/sys/kern/kern_environment.c Thu Jul 5 16:28:43 2018 (r335997) @@ -57,21 +57,14 @@ __FBSDID("$FreeBSD$"); #include <security/mac/mac_framework.h> -static char *_getenv_dynamic_locked(const char *name, int *idx); -static char *_getenv_dynamic(const char *name, int *idx); - static MALLOC_DEFINE(M_KENV, "kenv", "kernel environment"); #define KENV_SIZE 512 /* Maximum number of environment strings */ -/* pointer to the config-generated static environment */ +/* pointer to the static environment */ char *kern_envp; - -/* pointer to the md-static environment */ -char *md_envp; -static int md_env_len; -static int md_env_pos; - +static int env_len; +static int env_pos; static char *kernenv_next(char *); /* dynamic environment variables */ @@ -227,9 +220,16 @@ done: * environment obtained from a boot loader, or to provide an empty buffer into * which MD code can store an initial environment using kern_setenv() calls. * - * kern_envp is set to the static_env generated by config(8). This implements - * the env keyword described in config(5). + * When a copy of an initial environment is passed in, we start by scanning that + * env for overrides to the compiled-in envmode and hintmode variables. * + * If the global envmode is 1, the environment is initialized from the global + * static_env[], regardless of the arguments passed. This implements the env + * keyword described in config(5). In this case env_pos is set to env_len, + * causing kern_setenv() to return -1 (if len > 0) or panic (if len == 0) until + * the dynamic environment is available. The envmode and static_env variables + * are defined in env.c which is generated by config(8). + * * If len is non-zero, the caller is providing an empty buffer. The caller will * subsequently use kern_setenv() to add up to len bytes of initial environment * before the dynamic environment is available. @@ -237,112 +237,68 @@ done: * If len is zero, the caller is providing a pre-loaded buffer containing * environment strings. Additional strings cannot be added until the dynamic * environment is available. The memory pointed to must remain stable at least - * until sysinit runs init_dynamic_kenv() and preferably until after SI_SUB_KMEM - * is finished so that subr_hints routines may continue to use it until the - * environments have been fully merged at the end of the pass. If no initial - * environment is available from the boot loader, passing a NULL pointer allows - * the static_env to be installed if it is configured. In this case, any call - * to kern_setenv() prior to the setup of the dynamic environment will result in - * a panic. + * until sysinit runs init_dynamic_kenv(). If no initial environment is + * available from the boot loader, passing a NULL pointer allows the static_env + * to be installed if it is configured. */ void init_static_kenv(char *buf, size_t len) { - char *eval; + char *cp; + + for (cp = buf; cp != NULL && cp[0] != '\0'; cp += strlen(cp) + 1) { + if (strcmp(cp, "static_env.disabled=1") == 0) + envmode = 0; + if (strcmp(cp, "static_hints.disabled=1") == 0) + hintmode = 0; + } - md_envp = buf; - md_env_len = len; - md_env_pos = 0; - - /* - * static_env and static_hints may both be disabled, but in slightly - * different ways. For static_env, we just don't setup kern_envp and - * it's as if a static env wasn't even provided. For static_hints, - * we effectively zero out the buffer to stop the rest of the kernel - * from being able to use it. - * - * We're intentionally setting this up so that static_hints.disabled may - * be specified in either the MD env or the static env. This keeps us - * consistent in our new world view. - */ - eval = kern_getenv("static_env.disabled"); - if (eval == NULL || strcmp(eval, "1") != 0) + if (envmode == 1) { kern_envp = static_env; - eval = kern_getenv("static_hints.disabled"); - if (eval != NULL && strcmp(eval, "1") == 0) - *static_hints = '\0'; + env_len = len; + env_pos = len; + } else { + kern_envp = buf; + env_len = len; + env_pos = 0; + } } +/* + * Setup the dynamic kernel environment. + */ static void -init_dynamic_kenv_from(char *init_env, int *curpos) +init_dynamic_kenv(void *data __unused) { - char *cp, *cpnext, *eqpos, *found; + char *cp, *cpnext; size_t len; int i; - if (init_env && *init_env != '\0') { - found = NULL; - i = *curpos; - for (cp = init_env; cp != NULL; cp = cpnext) { + kenvp = malloc((KENV_SIZE + 1) * sizeof(char *), M_KENV, + M_WAITOK | M_ZERO); + i = 0; + if (kern_envp && *kern_envp != '\0') { + for (cp = kern_envp; cp != NULL; cp = cpnext) { cpnext = kernenv_next(cp); len = strlen(cp) + 1; if (len > KENV_MNAMELEN + 1 + KENV_MVALLEN + 1) { printf( "WARNING: too long kenv string, ignoring %s\n", cp); - goto sanitize; + continue; } - eqpos = strchr(cp, '='); - if (eqpos == NULL) { + if (i < KENV_SIZE) { + kenvp[i] = malloc(len, M_KENV, M_WAITOK); + strcpy(kenvp[i++], cp); + explicit_bzero(cp, strlen(cp)); + } else printf( - "WARNING: malformed static env value, ignoring %s\n", - cp); - goto sanitize; - } - *eqpos = 0; - /* - * De-dupe the environment as we go. We don't add the - * duplicated assignments because config(8) will flip - * the order of the static environment around to make - * kernel processing match the order of specification - * in the kernel config. - */ - found = _getenv_dynamic_locked(cp, NULL); - *eqpos = '='; - if (found != NULL) - goto sanitize; - if (i > KENV_SIZE) { - printf( "WARNING: too many kenv strings, ignoring %s\n", cp); - goto sanitize; - } - - kenvp[i] = malloc(len, M_KENV, M_WAITOK); - strcpy(kenvp[i++], cp); -sanitize: - explicit_bzero(cp, len - 1); } - *curpos = i; } -} + kenvp[i] = NULL; -/* - * Setup the dynamic kernel environment. - */ -static void -init_dynamic_kenv(void *data __unused) -{ - int dynamic_envpos; - - kenvp = malloc((KENV_SIZE + 1) * sizeof(char *), M_KENV, - M_WAITOK | M_ZERO); - - dynamic_envpos = 0; - init_dynamic_kenv_from(md_envp, &dynamic_envpos); - init_dynamic_kenv_from(kern_envp, &dynamic_envpos); - kenvp[dynamic_envpos] = NULL; - mtx_init(&kenv_lock, "kernel environment", NULL, MTX_DEF); dynamic_kenv = 1; } @@ -362,11 +318,12 @@ freeenv(char *env) * Internal functions for string lookup. */ static char * -_getenv_dynamic_locked(const char *name, int *idx) +_getenv_dynamic(const char *name, int *idx) { char *cp; int len, i; + mtx_assert(&kenv_lock, MA_OWNED); len = strlen(name); for (cp = kenvp[0], i = 0; cp != NULL; cp = kenvp[++i]) { if ((strncmp(cp, name, len) == 0) && @@ -380,20 +337,12 @@ _getenv_dynamic_locked(const char *name, int *idx) } static char * -_getenv_dynamic(const char *name, int *idx) +_getenv_static(const char *name) { - - mtx_assert(&kenv_lock, MA_OWNED); - return (_getenv_dynamic_locked(name, idx)); -} - -static char * -_getenv_static_from(char *chkenv, const char *name) -{ char *cp, *ep; int len; - for (cp = chkenv; cp != NULL; cp = kernenv_next(cp)) { + for (cp = kern_envp; cp != NULL; cp = kernenv_next(cp)) { for (ep = cp; (*ep != '=') && (*ep != 0); ep++) ; if (*ep != '=') @@ -406,20 +355,6 @@ _getenv_static_from(char *chkenv, const char *name) return (NULL); } -static char * -_getenv_static(const char *name) -{ - char *val; - - val = _getenv_static_from(md_envp, name); - if (val != NULL) - return (val); - val = _getenv_static_from(kern_envp, name); - if (val != NULL) - return (val); - return (NULL); -} - /* * Look up an environment variable by name. * Return a pointer to the string if found. @@ -464,25 +399,20 @@ testenv(const char *name) return (0); } -/* - * Set an environment variable in the MD-static environment. This cannot - * feasibly be done on config(8)-generated static environments as they don't - * generally include space for extra variables. - */ static int setenv_static(const char *name, const char *value) { int len; - if (md_env_pos >= md_env_len) + if (env_pos >= env_len) return (-1); /* Check space for x=y and two nuls */ len = strlen(name) + strlen(value); - if (len + 3 < md_env_len - md_env_pos) { - len = sprintf(&md_envp[md_env_pos], "%s=%s", name, value); - md_env_pos += len+1; - md_envp[md_env_pos] = '\0'; + if (len + 3 < env_len - env_pos) { + len = sprintf(&kern_envp[env_pos], "%s=%s", name, value); + env_pos += len+1; + kern_envp[env_pos] = '\0'; return (0); } else return (-1); @@ -498,7 +428,7 @@ kern_setenv(const char *name, const char *value) char *buf, *cp, *oldenv; int namelen, vallen, i; - if (dynamic_kenv == 0 && md_env_len > 0) + if (dynamic_kenv == 0 && env_len > 0) return (setenv_static(name, value)); KENV_CHECK; Modified: head/sys/kern/subr_hints.c ============================================================================== --- head/sys/kern/subr_hints.c Thu Jul 5 16:27:34 2018 (r335996) +++ head/sys/kern/subr_hints.c Thu Jul 5 16:28:43 2018 (r335997) @@ -31,36 +31,61 @@ __FBSDID("$FreeBSD$"); #include <sys/param.h> #include <sys/lock.h> -#include <sys/kernel.h> #include <sys/malloc.h> #include <sys/mutex.h> #include <sys/sysctl.h> #include <sys/systm.h> #include <sys/bus.h> -#define FBACK_MDENV 0 /* MD env (e.g. loader.conf) */ -#define FBACK_STENV 1 /* Static env */ -#define FBACK_STATIC 2 /* static_hints */ +#define HINTMODE_KENV 0 +#define HINTMODE_STATIC 1 +#define HINTMODE_FALLBACK 2 /* - * We'll use hintenv_merged to indicate that the dynamic environment has been - * properly prepared for hint usage. This implies that the dynamic environment - * has already been setup (dynamic_kenv) and that we have added any supplied - * static_hints to the dynamic environment. + * Access functions for device resources. */ -static int hintenv_merged; +static int checkmethod = 1; +static char *hintp; + /* - * Access functions for device resources. + * Define kern.hintmode sysctl, which only accept value 2, that cause to + * switch from Static KENV mode to Dynamic KENV. So systems that have hints + * compiled into kernel will be able to see/modify KENV (and hints too). */ -static void -static_hints_to_env(void *data __unused) +static int +sysctl_hintmode(SYSCTL_HANDLER_ARGS) { const char *cp; char *line, *eq; - int eqidx, i; + int eqidx, error, i, value; + value = hintmode; + + /* Fetch candidate for new hintmode value */ + error = sysctl_handle_int(oidp, &value, 0, req); + if (error || req->newptr == NULL) + return (error); + + if (value != HINTMODE_FALLBACK) + /* Only accept swithing to hintmode 2 */ + return (EINVAL); + + /* + * The rest of the sysctl handler is just making sure that our + * environment is consistent with the world we've already seen. + * If we came from kenv at all, then we have nothing to do: static + * kenv will get merged into dynamic kenv as soon as kmem becomes + * available, dynamic kenv is the environment we'd be setting these + * things in anyways. Therefore, we have nothing left to do unless + * we came from a static hints configuration. + */ + if (hintmode != HINTMODE_STATIC) { + hintmode = value; + return (0); + } + cp = static_hints; while (cp && *cp != '\0') { eq = strchr(cp, '='); @@ -70,152 +95,103 @@ static_hints_to_env(void *data __unused) eqidx = eq - cp; i = strlen(cp); - line = malloc(i + 1, M_TEMP, M_WAITOK); + line = malloc(i+1, M_TEMP, M_WAITOK); strcpy(line, cp); - line[eqidx] = line[i] = '\0'; - /* - * Before adding a hint to the dynamic environment, check if - * another value for said hint has already been added. This is - * needed because static environment overrides static hints and - * dynamic environment overrides all. - */ - if (testenv(line) == 0) - kern_setenv(line, line + eqidx + 1); + line[eqidx] = '\0'; + kern_setenv(line, line + eqidx + 1); free(line, M_TEMP); cp += i + 1; } - hintenv_merged = 1; + + hintmode = value; + return (0); } -/* Any time after dynamic env is setup */ -SYSINIT(hintenv, SI_SUB_KMEM, SI_ORDER_ANY, static_hints_to_env, NULL); +SYSCTL_PROC(_kern, OID_AUTO, hintmode, CTLTYPE_INT|CTLFLAG_RW, + &hintmode, 0, sysctl_hintmode, "I", "Get/set current hintmode"); /* - * Checks the environment to see if we even have any hints. If it has no hints, - * then res_find can take the hint that there's no point in searching it and - * either move on to the next environment or fail early. - */ -static bool -_res_checkenv(char *envp) -{ - char *cp; - - cp = envp; - while (cp) { - if (strncmp(cp, "hint.", 5) == 0) - return (true); - while (*cp != '\0') - cp++; - cp++; - if (*cp == '\0') - break; - } - return (false); -} - -/* * Evil wildcarding resource string lookup. * This walks the supplied env string table and returns a match. * The start point can be remembered for incremental searches. */ static int -res_find(char **hintp_cookie, int *line, int *startln, +res_find(int *line, int *startln, const char *name, int *unit, const char *resname, const char *value, const char **ret_name, int *ret_namelen, int *ret_unit, const char **ret_resname, int *ret_resnamelen, const char **ret_value) { - int dyn_used = 0, fbacklvl = FBACK_MDENV, hit, i = 0, n = 0; + int n = 0, hit, i = 0; char r_name[32]; - int r_unit; + int r_unit, use_kenv = (hintmode != HINTMODE_STATIC && dynamic_kenv); char r_resname[32]; char r_value[128]; const char *s, *cp; - char *hintp, *p; + char *p; - - /* - * We are expecting that the caller will pass us a hintp_cookie that - * they are tracking. Upon entry, if *hintp_cookie is *not* set, this - * indicates to us that we should be figuring out based on the current - * environment where to search. This keeps us sane throughout the - * entirety of a single search. - */ - if (*hintp_cookie == NULL) { + if (checkmethod) { hintp = NULL; - if (hintenv_merged) { - /* - * static_hints, if it was previously used, has - * already been folded in to the environment - * by this point. - */ - mtx_lock(&kenv_lock); - cp = kenvp[0]; - for (i = 0; cp != NULL; cp = kenvp[++i]) { - if (!strncmp(cp, "hint.", 5)) { - hintp = kenvp[0]; - break; + + switch (hintmode) { + case HINTMODE_KENV: /* loader hints in environment only */ + break; + case HINTMODE_STATIC: /* static hints only */ + hintp = static_hints; + checkmethod = 0; + break; + case HINTMODE_FALLBACK: /* fallback mode */ + if (dynamic_kenv) { + mtx_lock(&kenv_lock); + cp = kenvp[0]; + for (i = 0; cp != NULL; cp = kenvp[++i]) { + if (!strncmp(cp, "hint.", 5)) { + use_kenv = 1; + checkmethod = 0; + break; + } } + mtx_unlock(&kenv_lock); + } else { + cp = kern_envp; + while (cp) { + if (strncmp(cp, "hint.", 5) == 0) { + cp = NULL; + hintp = kern_envp; + break; + } + while (*cp != '\0') + cp++; + cp++; + if (*cp == '\0') { + cp = NULL; + hintp = static_hints; + break; + } + } } - mtx_unlock(&kenv_lock); - dyn_used = 1; - } else { - /* - * We'll have a chance to keep coming back here until - * we've actually exhausted all of our possibilities. - * We might have chosen the MD/Static env because it - * had some kind of hints, but perhaps it didn't have - * the hint we are looking for. We don't provide any - * fallback when searching the dynamic environment. - */ -fallback: - if (dyn_used || fbacklvl >= FBACK_STATIC) - return (ENOENT); - - if (fbacklvl <= FBACK_MDENV && - _res_checkenv(md_envp)) { - hintp = md_envp; - goto found; - } - fbacklvl++; - - if (fbacklvl <= FBACK_STENV && - _res_checkenv(kern_envp)) { + break; + default: + break; + } + if (hintp == NULL) { + if (dynamic_kenv) { + use_kenv = 1; + checkmethod = 0; + } else hintp = kern_envp; - goto found; - } - fbacklvl++; - - /* We'll fallback to static_hints if needed/can */ - if (fbacklvl <= FBACK_STATIC && - _res_checkenv(static_hints)) - hintp = static_hints; -found: - fbacklvl++; } - - if (hintp == NULL) - return (ENOENT); - *hintp_cookie = hintp; - } else { - hintp = *hintp_cookie; - if (hintenv_merged && hintp == kenvp[0]) - dyn_used = 1; - else - /* - * If we aren't using the dynamic environment, we need - * to run through the proper fallback procedure again. - * This is so that we do continuations right if we're - * working with *line and *startln. - */ - goto fallback; } - if (dyn_used) { + if (use_kenv) { mtx_lock(&kenv_lock); i = 0; - } - - cp = hintp; + cp = kenvp[0]; + if (cp == NULL) { + mtx_unlock(&kenv_lock); + return (ENOENT); + } + } else + cp = hintp; while (cp) { hit = 1; (*line)++; @@ -224,28 +200,25 @@ found: else n = sscanf(cp, "hint.%32[^.].%d.%32[^=]=%127s", r_name, &r_unit, r_resname, r_value); - /* We'll circumvent all of the checks if we already know */ - if (hit) { - if (n != 4) { - printf("CONFIG: invalid hint '%s'\n", cp); - p = strchr(cp, 'h'); - *p = 'H'; - hit = 0; - } - if (hit && startln && *startln >= 0 && *line < *startln) - hit = 0; - if (hit && name && strcmp(name, r_name) != 0) - hit = 0; - if (hit && unit && *unit != r_unit) - hit = 0; - if (hit && resname && strcmp(resname, r_resname) != 0) - hit = 0; - if (hit && value && strcmp(value, r_value) != 0) - hit = 0; - if (hit) - break; + if (hit && n != 4) { + printf("CONFIG: invalid hint '%s'\n", cp); + p = strchr(cp, 'h'); + *p = 'H'; + hit = 0; } - if (dyn_used) { + if (hit && startln && *startln >= 0 && *line < *startln) + hit = 0; + if (hit && name && strcmp(name, r_name) != 0) + hit = 0; + if (hit && unit && *unit != r_unit) + hit = 0; + if (hit && resname && strcmp(resname, r_resname) != 0) + hit = 0; + if (hit && value && strcmp(value, r_value) != 0) + hit = 0; + if (hit) + break; + if (use_kenv) { cp = kenvp[++i]; if (cp == NULL) break; @@ -259,10 +232,10 @@ found: } } } - if (dyn_used) + if (use_kenv) mtx_unlock(&kenv_lock); if (cp == NULL) - goto fallback; + return ENOENT; s = cp; /* This is a bit of a hack, but at least is reentrant */ @@ -300,13 +273,11 @@ resource_find(int *line, int *startln, { int i; int un; - char *hintp; *line = 0; - hintp = NULL; /* Search for exact unit matches first */ - i = res_find(&hintp, line, startln, name, unit, resname, value, + i = res_find(line, startln, name, unit, resname, value, ret_name, ret_namelen, ret_unit, ret_resname, ret_resnamelen, ret_value); if (i == 0) @@ -315,7 +286,7 @@ resource_find(int *line, int *startln, return ENOENT; /* If we are still here, search for wildcard matches */ un = -1; - i = res_find(&hintp, line, startln, name, &un, resname, value, + i = res_find(line, startln, name, &un, resname, value, ret_name, ret_namelen, ret_unit, ret_resname, ret_resnamelen, ret_value); if (i == 0) Modified: head/sys/kern/tty.c ============================================================================== --- head/sys/kern/tty.c Thu Jul 5 16:27:34 2018 (r335996) +++ head/sys/kern/tty.c Thu Jul 5 16:28:43 2018 (r335997) @@ -269,7 +269,7 @@ ttydev_open(struct cdev *dev, int oflags, int devtype struct thread *td) { struct tty *tp; - int cflags, error; + int error; tp = dev->si_drv1; error = 0; @@ -325,14 +325,7 @@ ttydev_open(struct cdev *dev, int oflags, int devtype if (TTY_CALLOUT(tp, dev) || dev == dev_console) tp->t_termios.c_cflag |= CLOCAL; - cflags = 0; - if (tp->t_termios.c_cflag & CDTR_IFLOW) - cflags |= SER_DTR; - if (tp->t_termios.c_cflag & CRTS_IFLOW) - cflags |= SER_RTS; - - if (cflags != 0) - ttydevsw_modem(tp, cflags, 0); + ttydevsw_modem(tp, SER_DTR|SER_RTS, 0); error = ttydevsw_open(tp); if (error != 0) Modified: head/sys/sys/systm.h ============================================================================== --- head/sys/sys/systm.h Thu Jul 5 16:27:34 2018 (r335996) +++ head/sys/sys/systm.h Thu Jul 5 16:28:43 2018 (r335997) @@ -156,10 +156,11 @@ void kassert_panic(const char *fmt, ...) __printflike * XXX most of these variables should be const. */ extern int osreldate; +extern int envmode; +extern int hintmode; /* 0 = off. 1 = config, 2 = fallback */ extern int dynamic_kenv; extern struct mtx kenv_lock; extern char *kern_envp; -extern char *md_envp; extern char static_env[]; extern char static_hints[]; /* by config for now */ Modified: head/usr.sbin/config/config.5 ============================================================================== --- head/usr.sbin/config/config.5 Thu Jul 5 16:27:34 2018 (r335996) +++ head/usr.sbin/config/config.5 Thu Jul 5 16:28:43 2018 (r335997) @@ -23,7 +23,7 @@ .\" .\" $FreeBSD$ .\" -.Dd July 5, 2018 +.Dd June 26, 2018 .Dt CONFIG 5 .Os .Sh NAME @@ -114,25 +114,13 @@ are defined in the file .Pp .It Ic env Ar filename Specifies a filename containing a kernel environment definition. -.Pp -The kernel will augment this compiled-in environment with the environment -prepared for it at boot time by +The kernel normally uses an environment prepared for it at boot time +by .Xr loader 8 . -Environment variables specified in the -.Xr loader 8 -environment will take precedence over environment variables specified in -.Ar filename , -and environment variables specified in the dynamic environment take precedence -over both of these. +This directive makes the kernel ignore the boot environment and use +the compiled-in environment instead, unless the boot environment contains +.Va static_env.disabled=1 . .Pp -.Va static_env.disabled=1 -may be specified in the -.Xr loader 8 -environment to disable use of this compiled-in environment. -This option has no effect if specified in any environment after the -.Xr loader 8 -environment is processed. -.Pp This directive is useful for setting kernel tunables in embedded environments that do not start from .Xr loader 8 . @@ -184,28 +172,9 @@ time (see .Xr device.hints 5 ) . This directive configures the kernel to use the static device configuration listed in -.Ar filename . -.Pp -Hints provided in this static device configuration will be overwritten in the -order in which they're encountered. -Hints in the compiled-in environment takes precedence over compiled-in hints, -and hints in the environment prepared for the kernel by -.Xr loader 8 -takes precedence over hints in the compiled-in environment. -.Pp -Once the dynamic environment becomes available, all compiled-in hints will be -added to the dynamic environment if they do not already have an override in -the dynamic environment. -The dynamic environment will then be used for all searches of hints. -.Pp -.Va static_hints.disabled=1 -may be specified in either a compiled-in environment or the -.Xr loader 8 -environment to disable use of these hints files. -This option has no effect if specified in any environment after the -.Xr loader 8 -environment is processed. -.Pp +.Ar filename , +unless the boot environment contains +.Va static_hints.disabled=1 . The file .Ar filename must conform to the syntax specified by Modified: head/usr.sbin/config/config.h ============================================================================== --- head/usr.sbin/config/config.h Thu Jul 5 16:27:34 2018 (r335996) +++ head/usr.sbin/config/config.h Thu Jul 5 16:28:43 2018 (r335997) @@ -179,6 +179,8 @@ SLIST_HEAD(, includepath) includepath; extern char *ident; extern char kernconfstr[]; extern int do_trace; +extern int envmode; +extern int hintmode; extern int incignore; char *get_word(FILE *); Modified: head/usr.sbin/config/config.y ============================================================================== --- head/usr.sbin/config/config.y Thu Jul 5 16:27:34 2018 (r335996) +++ head/usr.sbin/config/config.y Thu Jul 5 16:28:43 2018 (r335997) @@ -82,7 +82,8 @@ struct device_head dtab; char *ident; -char *env; +int envmode; +int hintmode; int yyline; const char *yyfile; struct file_list_head ftab; @@ -200,6 +201,7 @@ Config_spec: err(EXIT_FAILURE, "calloc"); hint->hint_name = $2; STAILQ_INSERT_HEAD(&hints, hint, hint_next); + hintmode = 1; } System_spec: @@ -359,6 +361,7 @@ newenvvar(char *name, bool is_file) envvar->env_str = name; envvar->env_is_file = is_file; STAILQ_INSERT_HEAD(&envvars, envvar, envvar_next); + envmode = 1; } /* Modified: head/usr.sbin/config/mkmakefile.c ============================================================================== --- head/usr.sbin/config/mkmakefile.c Thu Jul 5 16:27:34 2018 (r335996) +++ head/usr.sbin/config/mkmakefile.c Thu Jul 5 16:28:43 2018 (r335997) @@ -197,6 +197,7 @@ makehints(void) fprintf(ofp, "#include <sys/types.h>\n"); fprintf(ofp, "#include <sys/systm.h>\n"); fprintf(ofp, "\n"); + fprintf(ofp, "int hintmode = %d;\n", hintmode); fprintf(ofp, "char static_hints[] = {\n"); STAILQ_FOREACH(hint, &hints, hint_next) { ifp = fopen(hint->hint_name, "r"); @@ -311,6 +312,7 @@ makeenv(void) fprintf(ofp, "#include <sys/types.h>\n"); fprintf(ofp, "#include <sys/systm.h>\n"); fprintf(ofp, "\n"); + fprintf(ofp, "int envmode = %d;\n", envmode); fprintf(ofp, "char static_env[] = {\n"); STAILQ_FOREACH(envvar, &envvars, envvar_next) { if (envvar->env_is_file) {
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201807051628.w65GShLv039323>