Files
Arquivotheca.AIX-4.1.3/bldenv/pkgtools/updatefixdata/addfixdata.c
seta75D d6fe8fe829 Init
2021-10-11 22:19:34 -03:00

159 lines
4.7 KiB
C

static char sccsid[] = "@(#)31 1.2 src/bldenv/pkgtools/updatefixdata/addfixdata.c, pkgtools, bos412, GOLDA411a 10/4/94 16:43:36";
/*
* COMPONENT_NAME: PKGTOOLS
*
* FUNCTIONS: addfixdata
* matchline
*
* ORIGINS: 27
*
* IBM CONFIDENTIAL -- (IBM Confidential Restricted when 20
* combined with the aggregated modules for this product)
* SOURCE MATERIALS
*
* (C) COPYRIGHT International Business Machines Corp. 1994
* All Rights Reserved
* US Government Users Restricted Rights - Use, duplication or
* disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
*/
/* NAME: addfixdata
*
* DESCRIPTION: Filter fixdata stanzas.
*
* PRECONDITIONS: fixdataDB exists (may be empty, but must be
* present). This is to ensure we update what we
* intend to update. The format of fixdata stanza is:
*
* fix:
* name = IX12345
* abstract = Apar abstract text
* type = f
* filesets = "foo.bar.fileset 04.01.0001.0003\n\
* foo.bar.second_fileset 04.01.0002.0001\n\
* "
* symptom = "Some symptom string which can be arbitrarily\n\
* short or long or absent.\n\
* "
*
* POSTCONDITIONS: output: writes stanzas that do not already exist in the
* database to stdout.
*
* INPUT PARAMETERS: stdin is fixdata stanzas
* argv[1] is the name of the database file
*
* The input is the output of buildfixdata
* (a set of fix database stanzas such as:)
*
* DATA STRUCTURES: None
*
* RETURNS:
*/
#include <stdio.h>
#include <sys/param.h>
#define BUFSIZE 1024
#define NAMEEQUAL "name ="
/*------------------------------------------------------------------------
| global variables
------------------------------------------------------------------------*/
char * commandName = NULL;
char *Usage;
main (int argc, char **argv)
{
FILE *infile; /* input file pointer */
FILE *datafile; /* pointer to database file */
char *datafilename[MAXPATHLEN+1]; /* name of database file name */
char *line[BUFSIZE];/* buffer to read in lines from input file */
char *buf[BUFSIZE];
char *ptr; /* temporary pointer */
char *apar; /* apar number */
/*-------------------------------------------------------------------
| get the command name
--------------------------------------------------------------------*/
commandName = getCommandName (argv[0]);
/*---------------------------------------------------------------------
| get the database name from the command line
----------------------------------------------------------------------*/
strcpy (datafilename,argv[1]);
/*--------------------------------------------------------------------
| open the database file (stream)
----------------------------------------------------------------------*/
datafile = openFile (datafilename, "r");
/*--------------------------------------------------------------------
| read stanzas from stdin
---------------------------------------------------------------------*/
infile = stdin;
while ((fgets(line,BUFSIZE,infile)) != NULL)
{
/*-----------------------------------------------------------------
| look for pattern 'name ='
------------------------------------------------------------------*/
if (strstr(line,NAMEEQUAL))
{
/*--------------------------------------------------------------
| check for matching stanza in fixdatabase
| if no match, print the stanza
---------------------------------------------------------------*/
if ((matchline(datafile,line)) == 1)
{
printf("fix:\n");
printf("%s",line);
while ((fgets(line,BUFSIZE,infile)) != NULL)
{
strcpy(buf,line);
ptr=strtok(line," \n");
if (strstr(ptr,"fix:"))
break;
printf("%s",buf);
}
}
}
}
exit(0);
}
/* NAME: matchline
*
* DESCRIPTION: This functions checks to see if a fixdata stanza exists in
* the database file for a given apar
*
* PRE CONDITIONS: expects top/HISTORY/database file to exist
*
* POST CONDITIONS: None
*
* PARAMETERS: apar number and database file pointer
*
* DATA STRUCTURES: None
*
* NOTES: The performance will be better if the stanza if found at the top of
* the fixdata database.
*
* RETURNS: Returns 0 if a fixdata stanza was not found in the database file
* for an apar else returns 1
*/
int matchline(fp,line)
FILE *fp;
char *line;
{
char *buf[BUFSIZE];
rewind(fp);
while ((fgets(buf,BUFSIZE,fp)) != NULL)
{
if (strstr(buf,line))
return(0);
}
return(1);
}