blob: a5da9d0beb20f239c8779017ac73124655896ee3 (
plain)
| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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);
}
 |