FreeCalypso > hg > freecalypso-sw
view loadtools/ltexit.c @ 38:5b3d7398d2d9
target-utils top level Makefile buglet
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Mon, 13 May 2013 20:40:44 +0000 |
parents | 768a3d012931 |
children | 6f8d3771aa6c |
line wrap: on
line source
/* * This module implements the loadtool exit command, along with its * options for jump-reboot or eventual Iota power-off. */ #include <stdio.h> #include <string.h> #include <strings.h> #include <stdlib.h> static void exit_bare() { exit(0); } static void exit_jump0() { static char *jump0_argv[3] = {"jump", "0", 0}; tpinterf_make_cmd(jump0_argv); tpinterf_send_cmd(); exit(0); } void (*default_exit)() = exit_bare; static struct kwtab { char *kw; void (*func)(); } exit_modes[] = { {"bare", exit_bare}, {"jump0", exit_jump0}, {0, 0} }; cmd_exit(argc, argv) char **argv; { struct kwtab *tp; if (argc < 2) default_exit(); for (tp = exit_modes; tp->kw; tp++) if (!strcmp(tp->kw, argv[1])) break; if (!tp->func) { fprintf(stderr, "error: \"%s\" is not an understood exit mode\n", argv[1]); return(-1); } tp->func(); } /* called from hwparam.c config file parser */ void set_default_exit_mode(arg, filename_for_errs, lineno_for_errs) char *arg; char *filename_for_errs; int lineno_for_errs; { char *cp; struct kwtab *tp; while (isspace(*arg)) arg++; if (!*arg) { fprintf(stderr, "%s line %d: exit-mode setting requires an argument\n", filename_for_errs, lineno_for_errs); exit(1); } for (cp = arg; *cp && !isspace(*cp); cp++) ; *cp = '\0'; for (tp = exit_modes; tp->kw; tp++) if (!strcmp(tp->kw, arg)) break; if (!tp->func) { fprintf(stderr, "%s line %d: \"%s\" is not an understood exit mode\n", filename_for_errs, lineno_for_errs, arg); exit(1); } default_exit = tp->func; }