version 1.28, 2005/10/13 12:35:30 |
version 1.29, 2005/10/15 23:39:36 |
|
|
#include "rcsprog.h" |
#include "rcsprog.h" |
#include "strtab.h" |
#include "strtab.h" |
|
|
|
#define RCS_CMD_MAXARG 128 |
|
|
const char rcs_version[] = "OpenCVS RCS version 3.6"; |
const char rcs_version[] = "OpenCVS RCS version 3.6"; |
int verbose = 1; |
int verbose = 1; |
|
|
|
|
}; |
}; |
|
|
int |
int |
|
rcs_init(char *envstr, char **argv, int argvlen) |
|
{ |
|
u_int i; |
|
int argc, error; |
|
char linebuf[256], *lp, *cp; |
|
|
|
strlcpy(linebuf, envstr, sizeof(linebuf)); |
|
memset(argv, 0, argvlen * sizeof(char *)); |
|
|
|
error = argc = 0; |
|
for (lp = linebuf; lp != NULL;) { |
|
cp = strsep(&lp, " \t\b\f\n\r\t\v");; |
|
if (cp == NULL) |
|
break; |
|
else if (*cp == '\0') |
|
continue; |
|
|
|
if (argc == argvlen) { |
|
error++; |
|
break; |
|
} |
|
|
|
argv[argc] = strdup(cp); |
|
if (argv[argc] == NULL) { |
|
cvs_log(LP_ERRNO, "failed to copy argument"); |
|
error++; |
|
break; |
|
} |
|
|
|
argc++; |
|
} |
|
|
|
if (error != 0) { |
|
for (i = 0; i < (u_int)argc; i++) |
|
free(argv[i]); |
|
argc = -1; |
|
} |
|
|
|
return (argc); |
|
} |
|
|
|
int |
rcs_getopt(int argc, char **argv, const char *optstr) |
rcs_getopt(int argc, char **argv, const char *optstr) |
{ |
{ |
char *a; |
char *a; |
|
|
main(int argc, char **argv) |
main(int argc, char **argv) |
{ |
{ |
u_int i; |
u_int i; |
int ret; |
char *rcsinit, *cmd_argv[RCS_CMD_MAXARG]; |
|
int ret, cmd_argc; |
|
|
ret = -1; |
ret = -1; |
rcs_optind = 1; |
rcs_optind = 1; |
cvs_strtab_init(); |
cvs_strtab_init(); |
cvs_log_init(LD_STD, 0); |
cvs_log_init(LD_STD, 0); |
|
|
|
cmd_argc = 0; |
|
if ((rcsinit = getenv("RCSINIT")) != NULL) { |
|
cmd_argv[cmd_argc++] = argv[0]; |
|
ret = rcs_init(rcsinit, cmd_argv + 1, |
|
RCS_CMD_MAXARG - 1); |
|
if (ret < 0) { |
|
cvs_log(LP_ERRNO, "failed to prepend RCSINIT options"); |
|
exit (1); |
|
} |
|
|
|
cmd_argc += ret; |
|
} |
|
|
|
for (ret = 1; ret < argc; ret++) |
|
cmd_argv[cmd_argc++] = argv[ret]; |
|
|
for (i = 0; i < (sizeof(programs)/sizeof(programs[0])); i++) |
for (i = 0; i < (sizeof(programs)/sizeof(programs[0])); i++) |
if (strcmp(__progname, programs[i].prog_name) == 0) { |
if (strcmp(__progname, programs[i].prog_name) == 0) { |
usage = programs[i].prog_usage; |
usage = programs[i].prog_usage; |
ret = programs[i].prog_hdlr(argc, argv); |
ret = programs[i].prog_hdlr(cmd_argc, cmd_argv); |
break; |
break; |
} |
} |
|
|