=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/cvs/Attic/req.c,v retrieving revision 1.1 retrieving revision 1.2 diff -c -r1.1 -r1.2 *** src/usr.bin/cvs/Attic/req.c 2004/08/03 04:58:45 1.1 --- src/usr.bin/cvs/Attic/req.c 2004/08/04 12:41:58 1.2 *************** *** 1,4 **** ! /* $OpenBSD: req.c,v 1.1 2004/08/03 04:58:45 jfb Exp $ */ /* * Copyright (c) 2004 Jean-Francois Brousseau * All rights reserved. --- 1,4 ---- ! /* $OpenBSD: req.c,v 1.2 2004/08/04 12:41:58 jfb Exp $ */ /* * Copyright (c) 2004 Jean-Francois Brousseau * All rights reserved. *************** *** 57,62 **** --- 57,63 ---- static int cvs_req_root (int, char *); static int cvs_req_directory (int, char *); + static int cvs_req_argument (int, char *); static int cvs_req_version (int, char *); *************** *** 83,89 **** { NULL }, { NULL }, { NULL }, ! { NULL }, /* 20 */ { NULL }, { NULL }, { NULL }, --- 84,91 ---- { NULL }, { NULL }, { NULL }, ! { cvs_req_argument }, /* 20 */ ! { cvs_req_argument }, { NULL }, { NULL }, { NULL }, *************** *** 92,98 **** { NULL }, { NULL }, { NULL }, - { NULL }, { NULL }, /* 30 */ { NULL }, { NULL }, --- 94,99 ---- *************** *** 138,143 **** --- 139,155 ---- /* + * Argument array built by `Argument' and `Argumentx' requests. + */ + + static char *cvs_req_args[CVS_PROTO_MAXARG]; + static int cvs_req_nargs = 0; + + + + + + /* * cvs_req_handle() * * Generic request handler dispatcher. The handler expects the first line *************** *** 184,189 **** --- 196,239 ---- { + + return (0); + } + + + static int + cvs_req_argument(int reqid, char *line) + { + char *nap; + + if (cvs_req_nargs == CVS_PROTO_MAXARG) { + cvs_log(LP_ERR, "too many arguments"); + return (-1); + } + + if (reqid == CVS_REQ_ARGUMENT) { + cvs_req_args[cvs_req_nargs] = strdup(line); + if (cvs_req_args[cvs_req_nargs] == NULL) { + cvs_log(LP_ERRNO, "failed to copy argument"); + return (-1); + } + cvs_req_nargs++; + } + else if (reqid == CVS_REQ_ARGUMENTX) { + if (cvs_req_nargs == 0) + cvs_log(LP_WARN, "no argument to append to"); + else { + asprintf(&nap, "%s%s", cvs_req_args[cvs_req_nargs - 1], + line); + if (nap == NULL) { + cvs_log(LP_ERRNO, + "failed to append to argument"); + return (-1); + } + free(cvs_req_args[cvs_req_nargs - 1]); + cvs_req_args[cvs_req_nargs - 1] = nap; + } + } return (0); }