diff options
author | Kyle Evans <kevans@FreeBSD.org> | 2018-07-05 18:55:42 +0000 |
---|---|---|
committer | Kyle Evans <kevans@FreeBSD.org> | 2018-07-05 18:55:42 +0000 |
commit | 417d105fae1e04326f2e6dc5234b612aa0093575 (patch) | |
tree | fe75891c781d8d319a96576ac50bcc7d0e6c7312 /usr.sbin/config | |
parent | f1e0a986a883ca897cf829667ea4317a54c3ef8a (diff) | |
download | src-417d105fae1e04326f2e6dc5234b612aa0093575.tar.gz src-417d105fae1e04326f2e6dc5234b612aa0093575.zip |
Revert r336011,r336012 until I can competently test
Notes
Notes:
svn path=/head/; revision=336013
Diffstat (limited to 'usr.sbin/config')
-rw-r--r-- | usr.sbin/config/Makefile | 4 | ||||
-rw-r--r-- | usr.sbin/config/mkmakefile.c | 169 |
2 files changed, 75 insertions, 98 deletions
diff --git a/usr.sbin/config/Makefile b/usr.sbin/config/Makefile index 12e62bfbb497..845a3263dfc5 100644 --- a/usr.sbin/config/Makefile +++ b/usr.sbin/config/Makefile @@ -14,11 +14,11 @@ kernconf.c: kernconf.tmpl ${FILE2C} 'char kernconfstr[] = {' ',0};' < \ ${SRCDIR}/kernconf.tmpl > kernconf.c -CFLAGS+= -I. -I${SRCDIR} -I${SRCTOP}/sys +CFLAGS+= -I. -I${SRCDIR} NO_WMISSING_VARIABLE_DECLARATIONS= -LIBADD= l nv sbuf +LIBADD= l sbuf CLEANFILES+= kernconf.c diff --git a/usr.sbin/config/mkmakefile.c b/usr.sbin/config/mkmakefile.c index edde07ce694a..bc9104b691b7 100644 --- a/usr.sbin/config/mkmakefile.c +++ b/usr.sbin/config/mkmakefile.c @@ -49,8 +49,6 @@ static const char rcsid[] = #include <stdbool.h> #include <stdio.h> #include <string.h> -#include <sys/cnv.h> -#include <sys/nv.h> #include <sys/param.h> #include "y.tab.h" #include "config.h" @@ -64,10 +62,6 @@ static void do_objs(FILE *); static void do_before_depend(FILE *); static int opteq(const char *, const char *); static void read_files(void); -static void sanitize_envline(char *result, const char *src); -static void process_into_file(char *line, FILE *ofp); -static void process_into_nvlist(char *line, nvlist_t *nvl); -static void dump_nvlist(nvlist_t *nvl, FILE *ofp); static void errout(const char *fmt, ...) { @@ -186,6 +180,64 @@ makefile(void) moveifchanged(path("Makefile.new"), path("Makefile")); } +/* + * Build hints.c from the skeleton + */ +void +makehints(void) +{ + FILE *ifp, *ofp; + char line[BUFSIZ]; + char *s; + struct hint *hint; + + ofp = fopen(path("hints.c.new"), "w"); + if (ofp == NULL) + err(1, "%s", path("hints.c.new")); + fprintf(ofp, "#include <sys/types.h>\n"); + fprintf(ofp, "#include <sys/systm.h>\n"); + fprintf(ofp, "\n"); + fprintf(ofp, "char static_hints[] = {\n"); + STAILQ_FOREACH(hint, &hints, hint_next) { + ifp = fopen(hint->hint_name, "r"); + if (ifp == NULL) + err(1, "%s", hint->hint_name); + while (fgets(line, BUFSIZ, ifp) != NULL) { + /* zap trailing CR and/or LF */ + while ((s = strrchr(line, '\n')) != NULL) + *s = '\0'; + while ((s = strrchr(line, '\r')) != NULL) + *s = '\0'; + /* remove # comments */ + s = strchr(line, '#'); + if (s) + *s = '\0'; + /* remove any whitespace and " characters */ + s = line; + while (*s) { + if (*s == ' ' || *s == '\t' || *s == '"') { + while (*s) { + s[0] = s[1]; + s++; + } + /* start over */ + s = line; + continue; + } + s++; + } + /* anything left? */ + if (*line == '\0') + continue; + fprintf(ofp, "\"%s\\0\"\n", line); + } + fclose(ifp); + } + fprintf(ofp, "\"\\0\"\n};\n"); + fclose(ofp); + moveifchanged(path("hints.c.new"), path("hints.c")); +} + static void sanitize_envline(char *result, const char *src) { @@ -243,87 +295,6 @@ sanitize_envline(char *result, const char *src) *dst = 0; } -static void -process_into_file(char *line, FILE *ofp) -{ - char result[BUFSIZ]; - - sanitize_envline(result, line); - /* anything left? */ - if (*result == '\0') - return; - fprintf(ofp, "\"%s\\0\"\n", result); -} - -static void -process_into_nvlist(char *line, nvlist_t *nvl) -{ - char result[BUFSIZ], *s; - - sanitize_envline(result, line); - /* anything left? */ - if (*result == '\0') - return; - s = strchr(result, '='); - *s = 0; - if (nvlist_exists(nvl, result)) - nvlist_free(nvl, result); - nvlist_add_string(nvl, result, s + 1); -} - -static void -dump_nvlist(nvlist_t *nvl, FILE *ofp) -{ - const char *name; - void *cookie; - - if (nvl == NULL) - return; - - while (!nvlist_empty(nvl)) { - cookie = NULL; - name = nvlist_next(nvl, NULL, &cookie); - fprintf(ofp, "\"%s=%s\\0\"\n", name, - cnvlist_get_string(cookie)); - - cnvlist_free_string(cookie); - } -} - -/* - * Build hints.c from the skeleton - */ -void -makehints(void) -{ - FILE *ifp, *ofp; - nvlist_t *nvl; - char line[BUFSIZ]; - struct hint *hint; - - ofp = fopen(path("hints.c.new"), "w"); - if (ofp == NULL) - err(1, "%s", path("hints.c.new")); - fprintf(ofp, "#include <sys/types.h>\n"); - fprintf(ofp, "#include <sys/systm.h>\n"); - fprintf(ofp, "\n"); - fprintf(ofp, "char static_hints[] = {\n"); - nvl = nvlist_create(0); - STAILQ_FOREACH(hint, &hints, hint_next) { - ifp = fopen(hint->hint_name, "r"); - if (ifp == NULL) - err(1, "%s", hint->hint_name); - while (fgets(line, BUFSIZ, ifp) != NULL) - process_into_nvlist(line, nvl); - dump_nvlist(nvl, ofp); - fclose(ifp); - } - nvlist_destroy(nvl); - fprintf(ofp, "\"\\0\"\n};\n"); - fclose(ofp); - moveifchanged(path("hints.c.new"), path("hints.c")); -} - /* * Build env.c from the skeleton */ @@ -331,8 +302,7 @@ void makeenv(void) { FILE *ifp, *ofp; - nvlist_t *nvl; - char line[BUFSIZ]; + char line[BUFSIZ], result[BUFSIZ], *linep; struct envvar *envvar; ofp = fopen(path("env.c.new"), "w"); @@ -342,20 +312,27 @@ makeenv(void) fprintf(ofp, "#include <sys/systm.h>\n"); fprintf(ofp, "\n"); fprintf(ofp, "char static_env[] = {\n"); - nvl = nvlist_create(0); STAILQ_FOREACH(envvar, &envvars, envvar_next) { if (envvar->env_is_file) { ifp = fopen(envvar->env_str, "r"); if (ifp == NULL) err(1, "%s", envvar->env_str); - while (fgets(line, BUFSIZ, ifp) != NULL) - process_into_nvlist(line, nvl); - dump_nvlist(nvl, ofp); + while (fgets(line, BUFSIZ, ifp) != NULL) { + sanitize_envline(result, line); + /* anything left? */ + if (*result == '\0') + continue; + fprintf(ofp, "\"%s\\0\"\n", result); + } fclose(ifp); - } else - process_into_file(envvar->env_str, ofp); + } else { + linep = envvar->env_str; + sanitize_envline(result, linep); + if (*result == '\0') + continue; + fprintf(ofp, "\"%s\\0\"\n", result); + } } - nvlist_destroy(nvl); fprintf(ofp, "\"\\0\"\n};\n"); fclose(ofp); moveifchanged(path("env.c.new"), path("env.c")); |