File: abookdel.c

package info (click to toggle)
courier 0.65.0-3
  • links: PTS
  • area: main
  • in suites: squeeze
  • size: 45,372 kB
  • ctags: 14,007
  • sloc: ansic: 169,792; cpp: 24,478; sh: 15,017; perl: 6,883; makefile: 3,682; yacc: 291; sed: 16
file content (54 lines) | stat: -rw-r--r-- 913 bytes parent folder | download | duplicates (5)
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
54
/* $Id: abookdel.c,v 1.3 2006/02/12 17:59:56 mrsam Exp $
**
** 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);
}