imapext-2007

view src/osdep/unix/flocksim.h @ 0:ada5e610ab86

imap-2007e
author yuuji@gentei.org
date Mon, 14 Sep 2009 15:17:45 +0900
parents
children
line source
1 /* ========================================================================
2 * Copyright 1988-2006 University of Washington
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 *
11 * ========================================================================
12 */
14 /*
15 * Program: flock() emulation via fcntl() locking
16 *
17 * Author: Mark Crispin
18 * Networks and Distributed Computing
19 * Computing & Communications
20 * University of Washington
21 * Administration Building, AG-44
22 * Seattle, WA 98195
23 * Internet: MRC@CAC.Washington.EDU
24 *
25 * Date: 10 April 2001
26 * Last Edited: 20 December 2006
27 */
30 #include "dummy.h" /* get scan_contents() prototype */
32 #define flock flocksim /* use ours instead of theirs */
34 #undef LOCK_SH
35 #define LOCK_SH 1 /* shared lock */
36 #undef LOCK_EX
37 #define LOCK_EX 2 /* exclusive lock */
38 #undef LOCK_NB
39 #define LOCK_NB 4 /* no blocking */
40 #undef LOCK_UN
41 #define LOCK_UN 8 /* unlock */
43 /* Safe locking definitions */
45 extern int lockslavep; /* non-zero means slave process */
47 #undef SAFE_DELETE
48 #define SAFE_DELETE(dtb,stream,mbx) (dtb->flags & DR_LOCKING) ? \
49 safe_delete (dtb,stream,mbx) : (*dtb->mbxdel) (stream,mbx)
50 #undef SAFE_RENAME
51 #define SAFE_RENAME(dtb,stream,old,newname) (dtb->flags & DR_LOCKING) ? \
52 safe_rename (dtb,stream,old,newname) : (*dtb->mbxren) (stream,old,newname)
53 #undef SAFE_STATUS
54 #define SAFE_STATUS(dtb,stream,mbx,bits) (dtb->flags & DR_LOCKING) ? \
55 safe_status (dtb,stream,mbx,bits) : (*dtb->status) (stream,mbx,bits)
56 #undef SAFE_SCAN_CONTENTS
57 #define SAFE_SCAN_CONTENTS(dtb,name,contents,csiz,fsiz) \
58 (!dtb || (dtb->flags & DR_LOCKING)) ? \
59 safe_scan_contents (dtb,name,contents,csiz,fsiz) : \
60 scan_contents (dtb,name,contents,csiz,fsiz)
61 #undef SAFE_COPY
62 #define SAFE_COPY(dtb,stream,seq,mbx,bits) (dtb->flags & DR_LOCKING) ? \
63 safe_copy (dtb,stream,seq,mbx,bits) : (*dtb->copy) (stream,seq,mbx,bits)
64 #undef SAFE_APPEND
65 #define SAFE_APPEND(dtb,stream,mbx,af,data) (dtb->flags & DR_LOCKING) ? \
66 safe_append (dtb,stream,mbx,af,data) : (*dtb->append) (stream,mbx,af,data)
68 #undef MM_EXISTS
69 #define MM_EXISTS (lockslavep ? slave_exists : mm_exists)
70 #undef MM_EXPUNGED
71 #define MM_EXPUNGED (lockslavep ? slave_expunged : mm_expunged)
72 #undef MM_FLAGS
73 #define MM_FLAGS (lockslavep ? slave_flags : mm_flags)
74 #undef MM_NOTIFY
75 #define MM_NOTIFY (lockslavep ? slave_notify : mm_notify)
76 #undef MM_STATUS
77 #define MM_STATUS (lockslavep ? slave_status : mm_status)
78 #undef MM_LOG
79 #define MM_LOG (lockslavep ? slave_log : mm_log)
80 #undef MM_CRITICAL
81 #define MM_CRITICAL (lockslavep ? slave_critical : mm_critical)
82 #undef MM_NOCRITICAL
83 #define MM_NOCRITICAL (lockslavep ? slave_nocritical : mm_nocritical)
84 #undef MM_DISKERROR
85 #define MM_DISKERROR (lockslavep ? slave_diskerror : mm_diskerror)
86 #undef MM_FATAL
87 #define MM_FATAL (lockslavep ? slave_fatal : mm_fatal)
88 #undef MM_APPEND
89 #define MM_APPEND(af) (lockslavep ? slave_append : (*af))
91 /* Function prototypes */
93 int flocksim (int fd,int operation);
95 long safe_delete (DRIVER *dtb,MAILSTREAM *stream,char *mbx);
96 long safe_rename (DRIVER *dtb,MAILSTREAM *stream,char *old,char *newname);
97 long safe_status (DRIVER *dtb,MAILSTREAM *stream,char *mbx,long flags);
98 long safe_scan_contents (DRIVER *dtb,char *name,char *contents,
99 unsigned long csiz,unsigned long fsiz);
100 long safe_copy (DRIVER *dtb,MAILSTREAM *stream,char *seq,char *mbx,long flags);
101 long safe_append (DRIVER *dtb,MAILSTREAM *stream,char *mbx,append_t af,
102 void *data);
104 void slave_exists (MAILSTREAM *stream,unsigned long number);
105 void slave_expunged (MAILSTREAM *stream,unsigned long number);
106 void slave_flags (MAILSTREAM *stream,unsigned long number);
107 void slave_notify (MAILSTREAM *stream,char *string,long errflg);
108 void slave_status (MAILSTREAM *stream,char *mailbox,MAILSTATUS *status);
109 void slave_log (char *string,long errflg);
110 void slave_critical (MAILSTREAM *stream);
111 void slave_nocritical (MAILSTREAM *stream);
112 long slave_diskerror (MAILSTREAM *stream,long errcode,long serious);
113 void slave_fatal (char *string);
114 long slave_append (MAILSTREAM *stream,void *data,char **flags,char **date,
115 STRING **message);
116 long slaveproxycopy (MAILSTREAM *stream,char *sequence,char *mailbox,
117 long options);

UW-IMAP'd extensions by yuuji