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 /ldapaddressbook/abookdel.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 'ldapaddressbook/abookdel.c')
| -rw-r--r-- | ldapaddressbook/abookdel.c | 53 | 
1 files changed, 53 insertions, 0 deletions
| diff --git a/ldapaddressbook/abookdel.c b/ldapaddressbook/abookdel.c new file mode 100644 index 0000000..a5da9d0 --- /dev/null +++ b/ldapaddressbook/abookdel.c @@ -0,0 +1,53 @@ +/* +** Copyright 2006, Double Precision Inc. +** +** See COPYING for distribution information. +*/ + +#include	"config.h" +#include	"ldapaddressbook.h" + +#include	<stdio.h> +#include	<string.h> +#include	<stdlib.h> +#include	<unistd.h> + +int ldapabook_del(const char *filename, const char *tempname, +		const char *delname) +{ +/* This is cheating, but we won't really have many abooks, come on... */ +struct ldapabook *a=ldapabook_read(filename), *b; + +FILE	*fp; + +	if (!a)	return (0); + +	if ((fp=fopen(tempname, "w")) == 0) +	{ +		ldapabook_free(a); +		return (-1); +	} + +	for (b=a; b; b=b->next) +	{ +		if (strcmp(b->name, delname) == 0)	continue; + +		ldapabook_writerec(b, fp); +	} +	ldapabook_free(a); + +	if (fflush(fp) || fclose(fp)) +	{ +		fclose(fp); +		unlink(tempname); +		return (-1); +	} + +	if (rename(tempname, filename)) +	{ +		unlink(tempname); +		return (-1); +	} + +	return (0); +} | 
