imapext-2007

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

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

UW-IMAP'd extensions by yuuji