FreeCalypso > hg > freecalypso-tools
changeset 571:41b3e010808d
libpwon started, compiles
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 02 Feb 2020 17:40:25 +0000 |
parents | fb3deb215cb0 |
children | 070b8c8f9be5 |
files | libpwon/Makefile libpwon/forkoff.c libpwon/readconf.c |
diffstat | 3 files changed, 101 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpwon/Makefile Sun Feb 02 17:40:25 2020 +0000 @@ -0,0 +1,13 @@ +CC= gcc +CFLAGS= -O2 +OBJS= forkoff.o readconf.o +LIB= libpwon.a + +all: ${LIB} + +${LIB}: ${OBJS} + ar rcu $@ ${OBJS} + ranlib $@ + +clean: + rm -f *.[oa] errs
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpwon/forkoff.c Sun Feb 02 17:40:25 2020 +0000 @@ -0,0 +1,25 @@ +#include <sys/types.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> + +extern char bootctrl_pwon_cmd[]; + +static char shell_pathname[] = "/bin/sh"; + +void +fork_exec_pwon_cmd() +{ + int i; + + i = vfork(); + if (i < 0) { + perror("vfork"); + exit(1); + } + if (i) + return; + execl(shell_pathname, "sh", "-c", bootctrl_pwon_cmd, (char *) 0); + perror(shell_pathname); + _exit(1); +}
--- /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); +}