FreeCalypso > hg > freecalypso-tools
diff libpwon/readconf.c @ 571:41b3e010808d
libpwon started, compiles
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 02 Feb 2020 17:40:25 +0000 |
parents | |
children | 7d1df6d831e4 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpwon/readconf.c Sun Feb 02 17:40:25 2020 +0000 @@ -0,0 +1,63 @@ +#include <ctype.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <strings.h> + +static char conf_file_pathname[] = "/opt/freecalypso/bootctrl.conf"; + +#define MAX_BOOTCTRL_CONF_LINE 510 + +char bootctrl_pwon_cmd[MAX_BOOTCTRL_CONF_LINE+1]; + +find_bootctrl_entry(soughtname) + char *soughtname; +{ + FILE *inf; + char linebuf[MAX_BOOTCTRL_CONF_LINE+2]; + int lineno; + char *cp, *np; + + inf = fopen(conf_file_pathname, "r"); + if (!inf) { + perror(conf_file_pathname); + return(-1); + } + for (lineno = 1; fgets(linebuf, sizeof linebuf, inf); lineno++) { + cp = index(linebuf, '\n'); + if (!cp) { + fprintf(stderr, + "%s line %d: too long or missing newline\n", + conf_file_pathname, lineno); + fclose(inf); + return(-1); + } + *cp = '\0'; + for (cp = linebuf; isspace(*cp); cp++) + ; + if (*cp == '\0' || *cp == '#') + continue; + for (np = cp; *cp && !isspace(*cp); cp++) + ; + if (!*cp) { +invalid_syntax: fprintf(stderr, "%s line %d: invalid syntax\n", + conf_file_pathname, lineno); + fclose(inf); + return(-1); + } + *cp++ = '\0'; + while (isspace(*cp)) + cp++; + if (*cp == '\0' || *cp == '#') + goto invalid_syntax; + if (!strcmp(np, soughtname)) { + strcpy(bootctrl_pwon_cmd, cp); + fclose(inf); + return(0); + } + } + fclose(inf); + fprintf(stderr, "error: no \"%s\" entry found in %s\n", soughtname, + conf_file_pathname); + return(-1); +}