This is cvsrc.c in view mode; [Download] [Up]
/*
* Copyright (c) 1993 david d zuhn
*
* written by david d `zoo' zuhn while at Cygnus Support
*
* You may distribute under the terms of the GNU General Public License
* as specified in the README file that comes with the CVS 1.4 kit.
*
*/
#include "cvs.h"
#ifndef lint
static const char rcsid[] = "$CVSid: @(#)cvsrc.c 1.9 94/09/30 $";
USE(rcsid)
#endif /* lint */
/* this file is to be found in the user's home directory */
#ifndef CVSRC_FILENAME
#define CVSRC_FILENAME ".cvsrc"
#endif
char cvsrc[] = CVSRC_FILENAME;
#define GROW 10
extern char *strtok ();
void
read_cvsrc (argc, argv)
int *argc;
char ***argv;
{
char *homedir;
char *homeinit;
FILE *cvsrcfile;
char linebuf [MAXLINELEN];
char *optstart;
int found = 0;
int i;
int new_argc;
int max_new_argv;
char **new_argv;
/* don't do anything if argc is -1, since that implies "help" mode */
if (*argc == -1)
return;
/* setup the new options list */
new_argc = 1;
max_new_argv = (*argc) + GROW;
new_argv = (char **) xmalloc (max_new_argv * sizeof (char*));
new_argv[0] = xstrdup ((*argv)[0]);
/* determine filename for ~/.cvsrc */
homedir = getenv ("HOME");
if (!homedir)
return;
homeinit = (char *) xmalloc (strlen (homedir) + strlen (cvsrc) + 10);
strcpy (homeinit, homedir);
strcat (homeinit, "/");
strcat (homeinit, cvsrc);
/* if it can't be read, there's no point to continuing */
if (access (homeinit, R_OK) != 0)
{
free (homeinit);
return;
}
/* now scan the file until we find the line for the command in question */
cvsrcfile = open_file (homeinit, "r");
while (fgets (linebuf, MAXLINELEN, cvsrcfile))
{
/* skip over comment lines */
if (linebuf[0] == '#')
continue;
/* stop if we match the current command */
if (!strncmp (linebuf, (*argv)[0], strlen ((*argv)[0])))
{
found = 1;
break;
}
}
fclose (cvsrcfile);
if (found)
{
/* skip over command in the options line */
optstart = strtok(linebuf+strlen((*argv)[0]), "\t \n");
do
{
new_argv [new_argc] = xstrdup (optstart);
new_argv [new_argc+1] = NULL;
new_argc += 1;
if (new_argc >= max_new_argv)
{
char **tmp_argv;
max_new_argv += GROW;
tmp_argv = (char **) xmalloc (max_new_argv * sizeof (char*));
for (i = 0; i <= new_argc; i++)
tmp_argv[i] = new_argv[i];
free(new_argv);
new_argv = tmp_argv;
}
}
while ((optstart = strtok (NULL, "\t \n")) != NULL);
}
/* now copy the remaining arguments */
for (i=1; i < *argc; i++)
{
new_argv [new_argc] = (*argv)[i];
new_argc += 1;
}
*argc = new_argc;
*argv = new_argv;
free (homeinit);
return;
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.