diff options
| author | Sam Varshavchik | 2013-08-19 16:39:41 -0400 | 
|---|---|---|
| committer | Sam Varshavchik | 2013-08-25 14:43:51 -0400 | 
| commit | 9c45d9ad13fdf439d44d7443ae75da15ea0223ed (patch) | |
| tree | 7a81a04cb51efb078ee350859a64be2ebc6b8813 /makedat/makedatprog.c | |
| parent | a9520698b770168d1f33d6301463bb70a19655ec (diff) | |
| download | courier-libs-9c45d9ad13fdf439d44d7443ae75da15ea0223ed.tar.bz2 | |
Initial checkin
Imported from subversion report, converted to git. Updated all paths in
scripts and makefiles, reflecting the new directory hierarchy.
Diffstat (limited to 'makedat/makedatprog.c')
| -rw-r--r-- | makedat/makedatprog.c | 126 | 
1 files changed, 126 insertions, 0 deletions
| diff --git a/makedat/makedatprog.c b/makedat/makedatprog.c new file mode 100644 index 0000000..e4f3722 --- /dev/null +++ b/makedat/makedatprog.c @@ -0,0 +1,126 @@ +/* +** Copyright 1998 - 1999 Double Precision, Inc. +** See COPYING for distribution information. +*/ + +#if	HAVE_CONFIG_H +#include	"config.h" +#endif +#if	HAVE_UNISTD_H +#include	<unistd.h> +#endif +#include	<stdlib.h> +#include	<string.h> +#include	<stdio.h> +#include	"dbobj.h" + + +static int addgdbm(char *p, struct dbobj *o) +{ +char	*key, *val; + +	if (!*p || *p == '#') +		return (0); + +	key=p; +	if ( (val=strchr(p, '\t')) == 0)	val=""; +	else	*val++=0; + +	if (*key) +	{ +		if (!*val)	val="1"; +		if (dbobj_store(o, key, strlen(key), val, strlen(val), "I")) +		{ +			fprintf(stderr, "Cannot store record for %s - duplicate or out of disk space.\n", key); +			return (-1); +		} +	} +	return (0); +} + +static int buildgdbm(FILE *i, struct dbobj *o) +{ +char	*buf=0; +size_t	bufsize, buflen; + +	bufsize=0; +	buflen=0; + +	for (;;) +	{ +	int	c; + +		buflen=0; +		for (;;) +		{ +			if (buflen >= bufsize) +			{ +				bufsize += 256; +				buf= buf ? realloc(buf, bufsize): +					malloc(bufsize); +				if (!buf) +				{ +					perror("malloc"); +					return (-1); +				} +			} +			c=getc(i); +			if (c == '\n' || c == EOF)	break; +			buf[buflen++]=c; +		} +		buf[buflen]=0; +		if (c == EOF)	return (-1); + +		if (strcmp(buf, ".") == 0)	return (0); +		if (addgdbm(buf, o))	return (-1); +	} +} + +int main(int argc, char **argv) +{ +FILE	*i; +struct	dbobj	obj; + +	if (argc < 4) +	{ +		fprintf(stderr, "Usage: %s textfile tmpfile gdbmfile\n", +			argv[0]); +		exit(1); +	} +	if (strcmp(argv[1], "-") == 0) +		i= stdin; +	else +	{ +		if ((i=fopen(argv[1], "r")) == 0) +		{ +			perror(argv[1]); +			exit(1); +		} +	} + +	dbobj_init(&obj); + +	if (dbobj_open(&obj, argv[2], "N")) +	{ +		fprintf(stderr, "Cannot create %s\n", argv[2]); +		exit (1); +	} + +	if (buildgdbm(i, &obj)) +	{ +		dbobj_close(&obj); +		unlink(argv[2]); +		exit (1); +	} + +	dbobj_close(&obj); + +	if (rename(argv[2], argv[3])) +	{ +		perror("rename"); +		unlink(argv[2]); +		exit(1); +	} +	exit(0); +	return (0); +} | 
