windows-dbg-refcount-20061016
[openafs.git] / src / WINNT / afsd / cm_vnodeops.h
1 /*
2  * Copyright 2000, International Business Machines Corporation and others.
3  * All Rights Reserved.
4  * 
5  * This software has been released under the terms of the IBM Public
6  * License.  For details, see the LICENSE file in the top-level source
7  * directory or online at http://www.openafs.org/dl/license10.html
8  */
9
10 #ifndef __CM_VNODEOPS_H_ENV__
11 #define __CM_VNODEOPS_H_ENV__ 1
12
13 extern unsigned int cm_mountRootGen;
14
15 extern int cm_enableServerLocks;
16
17 /* parms for attribute setting call */
18 typedef struct cm_attr {
19         int mask;
20         time_t clientModTime;
21         osi_hyper_t length;
22         int unixModeBits;
23         long owner;
24         long group;
25 } cm_attr_t;
26
27 #define CM_ATTRMASK_CLIENTMODTIME       1       /* set if field is valid */
28 #define CM_ATTRMASK_LENGTH              2       /* field is valid */
29 #define CM_ATTRMASK_UNIXMODEBITS        4       /* field is valid */
30 #define CM_ATTRMASK_OWNER               8       /* field is valid */
31 #define CM_ATTRMASK_GROUP               0x10    /* field is valid */
32
33 /* type of rock for lookup's searches */
34 typedef struct cm_lookupSearch {
35         cm_fid_t fid;
36         char *searchNamep;
37         int found;
38         int LCfound, UCfound, NCfound, ExactFound;
39         int caseFold;
40         int hasTilde;
41 } cm_lookupSearch_t;
42
43 #include "cm_dir.h"
44
45 typedef int (*cm_DirFuncp_t)(struct cm_scache *, struct cm_dirEntry *, void *,
46         osi_hyper_t *entryOffsetp);
47
48 /* arrays */
49
50 extern unsigned char cm_foldUpper[];
51
52 /* functions */
53
54 extern int cm_NoneLower(char *s);
55
56 extern int cm_NoneUpper(char *s);
57
58 extern int cm_Is8Dot3(char *namep);
59
60 extern int cm_stricmp(const char *, const char *);
61
62 extern void cm_Gen8Dot3Name(struct cm_dirEntry *dep, char *shortName,
63         char **shortNameEndp);
64
65 extern long cm_ReadMountPoint(cm_scache_t *scp, cm_user_t *userp,
66         cm_req_t *reqp);
67
68 #ifdef DEBUG_REFCOUNT
69 extern long cm_NameIDbg(cm_scache_t *rootSCachep, char *pathp, long flags,
70         cm_user_t *userp, char *tidPathp, cm_req_t *reqp,
71         cm_scache_t **outScpp, char *, long);
72
73 extern long cm_LookupDbg(cm_scache_t *dscp, char *namep, long flags,
74         cm_user_t *userp, cm_req_t *reqp, cm_scache_t **outpScpp, char *, long);
75
76 #define cm_Lookup(a,b,c,d,e,f)  cm_LookupDbg(a,b,c,d,e,f,__FILE__,__LINE__)
77 #define cm_NameI(a,b,c,d,e,f,g) cm_NameIDbg(a,b,c,d,e,f,g,__FILE__,__LINE__)
78 #else
79 extern long cm_NameI(cm_scache_t *rootSCachep, char *pathp, long flags,
80         cm_user_t *userp, char *tidPathp, cm_req_t *reqp,
81         cm_scache_t **outScpp);
82 extern long cm_Lookup(cm_scache_t *dscp, char *namep, long flags,
83         cm_user_t *userp, cm_req_t *reqp, cm_scache_t **outpScpp);
84 #endif
85
86 extern long cm_LookupInternal(cm_scache_t *dscp, char *namep, long flags,
87                               cm_user_t *userp, cm_req_t *reqp, 
88                               cm_scache_t **outpScpp);
89
90 extern afs_int32 cm_TryBulkStat(cm_scache_t *dscp, osi_hyper_t *offsetp,
91         cm_user_t *userp, cm_req_t *reqp);
92
93 extern long cm_SetAttr(cm_scache_t *scp, cm_attr_t *attrp, cm_user_t *userp,
94         cm_req_t *reqp);
95
96 extern long cm_Create(cm_scache_t *scp, char *namep, long flags,
97         cm_attr_t *attrp, cm_scache_t **scpp, cm_user_t *userp, cm_req_t *reqp);
98
99 extern long cm_FSync(cm_scache_t *scp, cm_user_t *userp, cm_req_t *reqp);
100
101 extern void cm_StatusFromAttr(struct AFSStoreStatus *statusp,
102         struct cm_scache *scp, struct cm_attr *attrp);
103
104 extern long cm_Unlink(cm_scache_t *dscp, char *namep, cm_user_t *userp,
105         cm_req_t *reqp);
106
107 extern long cm_ApplyDir(cm_scache_t *scp, cm_DirFuncp_t funcp, void *parmp,
108         osi_hyper_t *startOffsetp, cm_user_t *userp, cm_req_t *reqp, 
109         cm_scache_t **retscp);
110
111 extern long cm_MakeDir(cm_scache_t *dscp, char *lastNamep, long flags,
112         cm_attr_t *attrp, cm_user_t *userp, cm_req_t *reqp);
113
114 extern long cm_RemoveDir(cm_scache_t *dscp, char *lastNamep, cm_user_t *userp,
115         cm_req_t *reqp);
116
117 extern long cm_Rename(cm_scache_t *oldDscp, char *oldLastNamep,
118         cm_scache_t *newDscp, char *newLastNamep, cm_user_t *userp,
119         cm_req_t *reqp);
120
121 extern long cm_HandleLink(cm_scache_t *linkScp, struct cm_user *userp,
122         cm_req_t *reqp);
123
124 extern long cm_Link(cm_scache_t *dscp, char *namep, cm_scache_t *sscp,
125     long flags, cm_user_t *userp, cm_req_t *reqp);
126
127 extern long cm_SymLink(cm_scache_t *dscp, char *namep, char *contentsp,
128         long flags, cm_attr_t *attrp, cm_user_t *userp, cm_req_t *reqp);
129
130 extern long cm_AssembleLink(cm_scache_t *linkScp, char *pathSuffixp,
131                             cm_scache_t **newRootScpp, cm_space_t **newSpaceBufferp,
132                             cm_user_t *userp, cm_req_t *reqp);
133
134 extern int cm_ExpandSysName(char *inp, char *outp, long outSize,
135                             unsigned int sysNameIndex);
136
137 extern long cm_Open(cm_scache_t *scp, int type, cm_user_t *userp);
138
139 extern long cm_CheckOpen(cm_scache_t *scp, int openMode, int trunc,
140         cm_user_t *userp, cm_req_t *reqp);
141
142 /*
143  * Combinations of file opening access bits for AFS.
144  * We don't insist on write rights to open the file with FILE_WRITE_ATTRIBUTES,
145  * because we want to enable the owner to set/clear the READONLY flag.
146  * The RPC will fail if you can't modify the attributes, anyway.
147  */
148 #define AFS_ACCESS_READ (FILE_GENERIC_READ & ~SYNCHRONIZE)
149 #define AFS_ACCESS_WRITE ((FILE_GENERIC_WRITE & ~(READ_CONTROL | SYNCHRONIZE)) \
150                                 & ~FILE_WRITE_ATTRIBUTES)
151
152 extern long cm_CheckNTOpen(cm_scache_t *scp, unsigned int desiredAccess,
153         unsigned int createDisp, cm_user_t *userp, cm_req_t *reqp);
154
155 extern long cm_CheckNTDelete(cm_scache_t *dscp, cm_scache_t *scp,
156         cm_user_t *userp, cm_req_t *reqp);
157
158 extern long cm_EvaluateSymLink(cm_scache_t *dscp, cm_scache_t *linkScp,
159         cm_scache_t **outScpp, cm_user_t *userp, cm_req_t *reqp);
160
161 extern long cm_Lock(cm_scache_t *scp, unsigned char sLockType,
162         LARGE_INTEGER LOffset, LARGE_INTEGER LLength, cm_key_t key,
163         int allowWait, cm_user_t *userp, cm_req_t *reqp,
164         cm_file_lock_t **lockpp);
165
166 #define CM_UNLOCK_BY_FID        0x0001
167
168 extern long cm_UnlockByKey(cm_scache_t * scp,
169         cm_key_t key,
170         int flags,
171         cm_user_t * userp,
172         cm_req_t * reqp);
173
174 extern long cm_Unlock(cm_scache_t *scp, unsigned char sLockType,
175         LARGE_INTEGER LOffset, LARGE_INTEGER LLength, cm_key_t key,
176         cm_user_t *userp, cm_req_t *reqp);
177
178 extern long cm_LockCheckRead(cm_scache_t *scp, 
179         LARGE_INTEGER LOffset, 
180         LARGE_INTEGER LLength, 
181         cm_key_t key);
182
183 extern long cm_LockCheckWrite(cm_scache_t *scp,
184         LARGE_INTEGER LOffset,
185         LARGE_INTEGER LLength,
186         cm_key_t key);
187
188 extern void cm_CheckLocks(void);
189
190 extern void cm_ReleaseAllLocks(void);
191
192 extern long cm_RetryLock(cm_file_lock_t *oldFileLock, int client_is_dead);
193
194 #define CM_SESSION_SMB      0xffff
195 #define CM_SESSION_IFS      0xfffe
196 #define CM_SESSION_CMINT    0xfffd
197 #define CM_SESSION_RESERVED 0xfff0
198
199 extern cm_key_t cm_GenerateKey(unsigned int session, unsigned long process_id, unsigned int file_id);
200
201 #define MAX_SYMLINK_COUNT 16
202 #endif /*  __CM_VNODEOPS_H_ENV__ */