From 63450d9255e220eae71809916a53b0271fe91396 Mon Sep 17 00:00:00 2001 From: obrien Date: Sat, 4 Dec 1999 01:23:26 +0000 Subject: Support the environtmental var "CVS_OPTIONS". Which can hold a set of default options for cvs. These options are interpreted first and can be overwritten by explicit command line parameters. Obtained from: GNU Grep 2.3 --- contrib/cvs/src/main.c | 5 +++ contrib/cvs/src/prepend_args.c | 87 ++++++++++++++++++++++++++++++++++++++++++ contrib/cvs/src/prepend_args.h | 26 +++++++++++++ 3 files changed, 118 insertions(+) create mode 100644 contrib/cvs/src/prepend_args.c create mode 100644 contrib/cvs/src/prepend_args.h (limited to 'contrib/cvs/src') diff --git a/contrib/cvs/src/main.c b/contrib/cvs/src/main.c index c016a02..6792245 100644 --- a/contrib/cvs/src/main.c +++ b/contrib/cvs/src/main.c @@ -12,7 +12,10 @@ * */ +/* $FreeBSD$ */ + #include "cvs.h" +#include "prepend_args.h" #ifdef HAVE_WINSOCK_H #include @@ -465,6 +468,8 @@ main (argc, argv) logoff = 1; } + prepend_default_options (getenv ("CVS_OPTIONS"), &argc, &argv); + /* Set this to 0 to force getopt initialization. getopt() sets this to 1 internally. */ optind = 0; diff --git a/contrib/cvs/src/prepend_args.c b/contrib/cvs/src/prepend_args.c new file mode 100644 index 0000000..2c15a24 --- /dev/null +++ b/contrib/cvs/src/prepend_args.c @@ -0,0 +1,87 @@ +/* prepend_args.c - utilility programs for manpiulating argv[] + Copyright (C) 1999 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + +/* $FreeBSD$ */ + + +#ifdef HAVE_CONFIG_H +# include +#endif +#include "cvs.h" +#include "../diff/system.h" +#include "prepend_args.h" + + +/* Find the white-space-separated options specified by OPTIONS, and + using BUF to store copies of these options, set ARGV[0], ARGV[1], + etc. to the option copies. Return the number N of options found. + Do not set ARGV[N] to NULL. If ARGV is NULL, do not store ARGV[0] + etc. Backslash can be used to escape whitespace (and backslashes). */ +static int +prepend_args (options, buf, argv) + char const *options; + char *buf; + char **argv; +{ + char const *o = options; + char *b = buf; + int n = 0; + + for (;;) + { + while (ISSPACE ((unsigned char) *o)) + o++; + if (!*o) + return n; + if (argv) + argv[n] = b; + n++; + + do + if ((*b++ = *o++) == '\\' && *o) + b[-1] = *o++; + while (*o && ! ISSPACE ((unsigned char) *o)); + + *b++ = '\0'; + } +} + +/* Prepend the whitespace-separated options in OPTIONS to the argument + vector of a main program with argument count *PARGC and argument + vector *PARGV. */ +void +prepend_default_options (options, pargc, pargv) + char const *options; + int *pargc; + char ***pargv; +{ + if (options) + { + char *buf = xmalloc (strlen (options) + 1); + int prepended = prepend_args (options, buf, (char **) NULL); + int argc = *pargc; + char * const *argv = *pargv; + char **pp = (char **) xmalloc ((prepended + argc + 1) * sizeof *pp); + *pargc = prepended + argc; + *pargv = pp; + *pp++ = *argv++; + pp += prepend_args (options, buf, pp); + while ((*pp++ = *argv++)) + continue; + } +} diff --git a/contrib/cvs/src/prepend_args.h b/contrib/cvs/src/prepend_args.h new file mode 100644 index 0000000..6708442 --- /dev/null +++ b/contrib/cvs/src/prepend_args.h @@ -0,0 +1,26 @@ +/* prepend_args.h - utilility programs for manpiulating argv[] + Copyright (C) 1999 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + +/* $FreeBSD$ */ + +/* This code, taken from GNU Grep, originally used the "PARAM" macro, as the + current GNU coding standards requires. Older GNU code used the "PROTO" + macro, before the GNU coding standards replaced it. We use the older + form here to keep from having to include another file in cvs/src/main.c. */ + +void prepend_default_options PROTO ((char const *, int *, char ***)); -- cgit v1.1