DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download
Index: ┃ T u

⟦0ac3563c3⟧ TextFile

    Length: 2438 (0x986)
    Types: TextFile
    Names: »update.c«

Derivation

└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki
    └─ ⟦this⟧ »EUUGD11/euug-87hel/sec8/cfs/update.c« 

TextFile

/*
 * update - update argv names in statfile for cfs
 */

#include "cfs.h"

char   *mktemp ();
char   *calloc ();

update (statfile, argc, argv, verbose)
char   *statfile;
int     argc;
char  **argv;
int     verbose;
{
    extern char *myname;
    FILE   *sfp;		/* statfile file pointer */
    char   *tfname;		/* temporary statfile file name */
    FILE   *tfp;		/* tempstat file pointer */
    int     errflg = 0;		/* returned error flag */
    int     rstat;		/* readline status flag */
    char    name[MAXPATHLEN];	/* path name */
    char   *arg;		/* argument for processing */
    struct stat sbuf;		/* stat data */
    int    *ufl;		/* updated filenames found list */
    int    *tfl;		/* temporary filenames found list */
    int     nargs;		/* temporary copy of argc */
    char   *poparg ();
    FILE   *openread ();
    FILE   *openwrite ();

    sfp = openread (statfile);
    tfname = mktemp ("cfs.XXXXXX");
    tfp = openwrite (tfname);
/*
 *	get storage for ufl & tfl
 */
    if (!(ufl = (int *) calloc ((unsigned) argc, sizeof (int)))) {
	fprintf (stderr, "cfs: can't calloc %d ints\n", argc);
	exit (1);
    }
    if (!(tfl = (int *) calloc ((unsigned) argc, sizeof (int)))) {
	fprintf (stderr, "cfs: can't calloc %d ints\n", argc);
	exit (1);
    }
/*
 *  for each entry in statfile
 */
    while (!(rstat = readstat (sfp, statfile, name, &sbuf))) {
	if (!cavn (argc, argv, tfl, name)) {
/* 
 *	    no match - write entry to tempstat
 */
	    writestat (tfp, name, &sbuf);
	}
	else {
/*
 *	    match found - update tempstat
 */
	    nargs = argc;
	    while (nargs-- > 0) {
		if (*tfl && !*ufl)
		    if (!addname (tfp, name)) {
			if (verbose)
			    printf ("u %s\n", name);
			*ufl = 1;
		    }
		    else
			errflg++;
		*tfl = 0;
		tfl++;
		ufl++;
	    }
	    tfl -= argc;
	    ufl -= argc;
	}
    }

    if (rstat > 0) {
/*
 *    check each arg - add if not updated
 */
	arg = poparg (&argc, &argv);
	while (arg != NULL) {
	    if (!*ufl) {
		if (!addname (tfp, arg)) {
		    if (verbose)
			printf ("a %s\n", arg);
		}
		else
		    errflg++;
	    }
	    arg = poparg (&argc, &argv);
	    ufl++;
	}
	fclose (tfp);
	fclose (sfp);
	if (movefile (tfname, statfile)) {
	    fprintf (stderr, "%s: %s not changed\n", myname, statfile);
	    errflg++;
	}
    }
    else {
	fclose (tfp);
	fclose (sfp);
	unlink (tfname);
	fprintf (stderr, "%s: %s not changed\n", myname, statfile);
	errflg++;
    }
    return (errflg);
}