diff options
Diffstat (limited to 'innbbsd/daemon.c')
-rw-r--r-- | innbbsd/daemon.c | 267 |
1 files changed, 135 insertions, 132 deletions
diff --git a/innbbsd/daemon.c b/innbbsd/daemon.c index 973a96c8..a60d7d73 100644 --- a/innbbsd/daemon.c +++ b/innbbsd/daemon.c @@ -1,173 +1,176 @@ #include "daemon.h" /* -typedef struct daemoncmd { - char *cmdname; - char *usage; - int argc; - int (*main) ARG((FILE*,FILE*,int,char**,char*)); -} daemoncmd_t; + * typedef struct daemoncmd { char *cmdname; char *usage; int argc; int + * (*main) ARG((FILE*,FILE*,int,char**,char*)); } daemoncmd_t; + * + */ -*/ +void deargify ARG((char ***)); +static daemoncmd_t *dcmdp = NULL; +static char *startupmessage = NULL; +static int startupcode = 100; +static FILE *DIN, *DOUT, *DIO; +typedef int (*F) (); -void deargify ARG((char ***)); -static daemoncmd_t *dcmdp=NULL; -static char *startupmessage=NULL; -static int startupcode=100; -static FILE *DIN,*DOUT,*DIO; -typedef int (*F)(); - -void installdaemon(cmds,code,startupmsg) -daemoncmd_t *cmds; -int code; -char *startupmsg; +void +installdaemon(cmds, code, startupmsg) + daemoncmd_t *cmds; + int code; + char *startupmsg; { - dcmdp = cmds; - startupcode = code; - startupmessage = startupmsg; + dcmdp = cmds; + startupcode = code; + startupmessage = startupmsg; } -daemoncmd_t *searchcmd(cmd) -char *cmd; +daemoncmd_t * +searchcmd(cmd) + char *cmd; { - daemoncmd_t *p; - for (p=dcmdp;p->name != NULL ; p++) { + daemoncmd_t *p; + for (p = dcmdp; p->name != NULL; p++) { #ifdef DEBUGCMD - printf("searching name %s for cmd %s\n",p->name,cmd); + printf("searching name %s for cmd %s\n", p->name, cmd); #endif - if (!strncasecmp(p->name,cmd,1024)) - return p; - } - return NULL; + if (!strncasecmp(p->name, cmd, 1024)) + return p; + } + return NULL; } #if 0 -int daemon(dfd) -int dfd; +int +daemon(dfd) + int dfd; { - static char BUF[1024]; - /*hash_init();*/ - if (dfd > 0) { - DIO = fdopen(dfd,"rw"); - DIN = fdopen(dfd,"r"); - DOUT = fdopen(dfd,"w"); - if (DIO == NULL || DIN == NULL || DOUT == NULL) { - perror("fdopen"); - return -1; - } - } - if (startupmessage) { - fprintf(DOUT,"%d %s\n",startupcode,startupmessage); - fflush(DOUT); + static char BUF[1024]; + /* hash_init(); */ + if (dfd > 0) { + DIO = fdopen(dfd, "rw"); + DIN = fdopen(dfd, "r"); + DOUT = fdopen(dfd, "w"); + if (DIO == NULL || DIN == NULL || DOUT == NULL) { + perror("fdopen"); + return -1; } - while (fgets(BUF,1024,DIN) != NULL) { - int i; - int (*Main)(); - daemoncmd_t *dp; - argv_t Argv; + } + if (startupmessage) { + fprintf(DOUT, "%d %s\n", startupcode, startupmessage); + fflush(DOUT); + } + while (fgets(BUF, 1024, DIN) != NULL) { + int i; + int (*Main) (); + daemoncmd_t *dp; + argv_t Argv; - char *p=(char*)strchr(BUF,'\r'); - if (p == NULL) p=(char*)strchr(BUF,'\n'); - if (p == NULL) continue; - *p='\0'; - if (p==BUF) continue; + char *p = (char *)strchr(BUF, '\r'); + if (p == NULL) + p = (char *)strchr(BUF, '\n'); + if (p == NULL) + continue; + *p = '\0'; + if (p == BUF) + continue; - Argv.argc = 0, Argv.argv = NULL, Argv.inputline=BUF; - Argv.in = DIN, Argv.out = DOUT; - printf("command entered: %s\n",BUF); + Argv.argc = 0, Argv.argv = NULL, Argv.inputline = BUF; + Argv.in = DIN, Argv.out = DOUT; + printf("command entered: %s\n", BUF); #ifdef DEBUGSERVER - fprintf(DOUT,"BUF in client %s\n",BUF); - fprintf(stdout,"BUF in server %s\n",BUF); - fflush(DOUT); + fprintf(DOUT, "BUF in client %s\n", BUF); + fprintf(stdout, "BUF in server %s\n", BUF); + fflush(DOUT); #endif - Argv.argc = argify(BUF,&Argv.argv); + Argv.argc = argify(BUF, &Argv.argv); #ifdef DEBUGSERVER - fprintf(stdout,"argc %d argv ",Argv.argc); - for (i=0;i<Argv.argc;++i) - fprintf(stdout,"%s ",Argv.argv[i]); - fprintf(stdout,"\n"); + fprintf(stdout, "argc %d argv ", Argv.argc); + for (i = 0; i < Argv.argc; ++i) + fprintf(stdout, "%s ", Argv.argv[i]); + fprintf(stdout, "\n"); #endif - dp = searchcmd(Argv.argv[0]); - Argv.dc = dp; - if (dp) { + dp = searchcmd(Argv.argv[0]); + Argv.dc = dp; + if (dp) { #ifdef DEBUGSERVER - printf("find cmd %s by %s\n",dp->name,dp->usage); + printf("find cmd %s by %s\n", dp->name, dp->usage); #endif - if (Argv.argc < dp->argc) { - fprintf(DOUT,"%d Usage: %s\n",dp->errorcode,dp->usage); - fflush(DOUT); - goto cont; - } - if (dp->argno != 0 && Argv.argc > dp->argno) { - fprintf(DOUT,"%d Usage: %s\n",dp->errorcode,dp->usage); - fflush(DOUT); - goto cont; - } - Main=dp->main; - if (Main) { - fflush(stdout); - (*Main)(&Argv); - } - } - else { - fprintf(DOUT,"99 command %s not available\n",Argv.argv[0]); - fflush(DOUT); - } -cont: - deargify(&Argv.argv); + if (Argv.argc < dp->argc) { + fprintf(DOUT, "%d Usage: %s\n", dp->errorcode, dp->usage); + fflush(DOUT); + goto cont; + } + if (dp->argno != 0 && Argv.argc > dp->argno) { + fprintf(DOUT, "%d Usage: %s\n", dp->errorcode, dp->usage); + fflush(DOUT); + goto cont; + } + Main = dp->main; + if (Main) { + fflush(stdout); + (*Main) (&Argv); + } + } else { + fprintf(DOUT, "99 command %s not available\n", Argv.argv[0]); + fflush(DOUT); } - /*hash_reclaim();*/ +cont: + deargify(&Argv.argv); + } + /* hash_reclaim(); */ } #endif #define MAX_ARG 32 #define MAX_ARG_SIZE 16384 -int argify(line, argvp) -char *line, ***argvp; +int +argify(line, argvp) + char *line, ***argvp; { - static char *argvbuffer[MAX_ARG+2]; - char **argv = argvbuffer; - int i; - static char argifybuffer[MAX_ARG_SIZE]; - char *p; - while (strchr("\t\n\r ",*line)) line++; - i=strlen(line); - /*p=(char*) mymalloc(i+1);*/ - p = argifybuffer; - strncpy(p,line, sizeof argifybuffer); - for (*argvp = argv, i=0 ;*p && i < MAX_ARG;){ - for (*argv++=p;*p && !strchr("\t\r\n ",*p);p++); - if (*p=='\0') break; - for (*p++='\0'; strchr("\t\r\n ",*p) && *p;p++); - } - *argv = NULL; - return argv - *argvp; + static char *argvbuffer[MAX_ARG + 2]; + char **argv = argvbuffer; + int i; + static char argifybuffer[MAX_ARG_SIZE]; + char *p; + while (strchr("\t\n\r ", *line)) + line++; + i = strlen(line); + /* p=(char*) mymalloc(i+1); */ + p = argifybuffer; + strncpy(p, line, sizeof argifybuffer); + for (*argvp = argv, i = 0; *p && i < MAX_ARG;) { + for (*argv++ = p; *p && !strchr("\t\r\n ", *p); p++); + if (*p == '\0') + break; + for (*p++ = '\0'; strchr("\t\r\n ", *p) && *p; p++); + } + *argv = NULL; + return argv - *argvp; } -void deargify (argv) -char ***argv; +void +deargify(argv) + char ***argv; { - return; - /*if (*argv != NULL) { - if (*argv[0] != NULL){ - free(*argv[0]); - *argv[0] = NULL; - } - free(*argv); - *argv = NULL; - }*/ + return; + /* + * if (*argv != NULL) { if (*argv[0] != NULL){ free(*argv[0]); argv[0] = + * NULL; } free(*argv); argv = NULL; } + */ } -int daemonprintf(format) -char *format; +int +daemonprintf(format) + char *format; { - fprintf(DOUT,format); - fflush(DOUT); + fprintf(DOUT, format); + fflush(DOUT); } -int daemonputs(output) -char* output; +int +daemonputs(output) + char *output; { - fputs(output, DOUT); - fflush(DOUT); + fputs(output, DOUT); + fflush(DOUT); } |