=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/cvs/Attic/req.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -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 +1,4 @@ -/* $OpenBSD: req.c,v 1.1 2004/08/03 04:58:45 jfb Exp $ */ +/* $OpenBSD: req.c,v 1.2 2004/08/04 12:41:58 jfb Exp $ */ /* * Copyright (c) 2004 Jean-Francois Brousseau * All rights reserved. @@ -57,6 +57,7 @@ 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,7 +84,8 @@ { NULL }, { NULL }, { NULL }, - { NULL }, /* 20 */ + { cvs_req_argument }, /* 20 */ + { cvs_req_argument }, { NULL }, { NULL }, { NULL }, @@ -92,7 +94,6 @@ { NULL }, { NULL }, { NULL }, - { NULL }, { NULL }, /* 30 */ { NULL }, { NULL }, @@ -138,6 +139,17 @@ /* + * 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,6 +196,44 @@ { + + 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); }