windows-combined-20041010
[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 /* parms for attribute setting call */
16 typedef struct cm_attr {
17         int mask;
18         time_t clientModTime;
19         osi_hyper_t length;
20         int unixModeBits;
21         long owner;
22         long group;
23 } cm_attr_t;
24
25 #define CM_ATTRMASK_CLIENTMODTIME       1       /* set if field is valid */
26 #define CM_ATTRMASK_LENGTH              2       /* field is valid */
27 #define CM_ATTRMASK_UNIXMODEBITS        4       /* field is valid */
28 #define CM_ATTRMASK_OWNER               8       /* field is valid */
29 #define CM_ATTRMASK_GROUP               0x10    /* field is valid */
30
31 /* type of rock for lookup's searches */
32 typedef struct cm_lookupSearch {
33         cm_fid_t fid;
34         char *searchNamep;
35         int found;
36         int LCfound, UCfound, NCfound, ExactFound;
37         int caseFold;
38         int hasTilde;
39 } cm_lookupSearch_t;
40
41 #include "cm_dir.h"
42
43 typedef int (*cm_DirFuncp_t)(struct cm_scache *, struct cm_dirEntry *, void *,
44         osi_hyper_t *entryOffsetp);
45
46 /* arrays */
47
48 extern unsigned char cm_foldUpper[];
49
50 /* functions */
51
52 extern int cm_NoneLower(char *s);
53
54 extern int cm_NoneUpper(char *s);
55
56 extern int cm_Is8Dot3(char *namep);
57
58 extern int cm_stricmp(const char *, const char *);
59
60 extern void cm_Gen8Dot3Name(struct cm_dirEntry *dep, char *shortName,
61         char **shortNameEndp);
62
63 extern long cm_ReadMountPoint(cm_scache_t *scp, cm_user_t *userp,
64         cm_req_t *reqp);
65
66 extern long cm_NameI(cm_scache_t *rootSCachep, char *pathp, long flags,
67         cm_user_t *userp, char *tidPathp, cm_req_t *reqp,
68         cm_scache_t **outScpp);
69
70 extern long cm_Lookup(cm_scache_t *dscp, char *namep, long flags,
71         cm_user_t *userp, cm_req_t *reqp, cm_scache_t **outpScpp);
72
73 extern long cm_LookupInternal(cm_scache_t *dscp, char *namep, long flags,
74                               cm_user_t *userp, cm_req_t *reqp, 
75                               cm_scache_t **outpScpp);
76
77 extern void cm_TryBulkStat(cm_scache_t *dscp, osi_hyper_t *offsetp,
78         cm_user_t *userp, cm_req_t *reqp);
79
80 extern long cm_SetAttr(cm_scache_t *scp, cm_attr_t *attrp, cm_user_t *userp,
81         cm_req_t *reqp);
82
83 extern long cm_Create(cm_scache_t *scp, char *namep, long flags,
84         cm_attr_t *attrp, cm_scache_t **scpp, cm_user_t *userp, cm_req_t *reqp);
85
86 extern long cm_FSync(cm_scache_t *scp, cm_user_t *userp, cm_req_t *reqp);
87
88 extern void cm_StatusFromAttr(struct AFSStoreStatus *statusp,
89         struct cm_scache *scp, struct cm_attr *attrp);
90
91 extern long cm_Unlink(cm_scache_t *dscp, char *namep, cm_user_t *userp,
92         cm_req_t *reqp);
93
94 extern long cm_ApplyDir(cm_scache_t *scp, cm_DirFuncp_t funcp, void *parmp,
95         osi_hyper_t *startOffsetp, cm_user_t *userp, cm_req_t *reqp, 
96         cm_scache_t **retscp);
97
98 extern long cm_MakeDir(cm_scache_t *dscp, char *lastNamep, long flags,
99         cm_attr_t *attrp, cm_user_t *userp, cm_req_t *reqp);
100
101 extern long cm_RemoveDir(cm_scache_t *dscp, char *lastNamep, cm_user_t *userp,
102         cm_req_t *reqp);
103
104 extern long cm_Rename(cm_scache_t *oldDscp, char *oldLastNamep,
105         cm_scache_t *newDscp, char *newLastNamep, cm_user_t *userp,
106         cm_req_t *reqp);
107
108 extern long cm_HandleLink(cm_scache_t *linkScp, struct cm_user *userp,
109         cm_req_t *reqp);
110
111 extern long cm_Link(cm_scache_t *dscp, char *namep, cm_scache_t *sscp,
112     long flags, cm_user_t *userp, cm_req_t *reqp);
113
114 extern long cm_SymLink(cm_scache_t *dscp, char *namep, char *contentsp,
115         long flags, cm_attr_t *attrp, cm_user_t *userp, cm_req_t *reqp);
116
117 extern int cm_ExpandSysName(char *inp, char *outp, long outSize,
118                             unsigned int sysNameIndex);
119
120 extern long cm_Open(cm_scache_t *scp, int type, cm_user_t *userp);
121
122 extern long cm_CheckOpen(cm_scache_t *scp, int openMode, int trunc,
123         cm_user_t *userp, cm_req_t *reqp);
124
125 /*
126  * Combinations of file opening access bits for AFS.
127  * We don't insist on write rights to open the file with FILE_WRITE_ATTRIBUTES,
128  * because we want to enable the owner to set/clear the READONLY flag.
129  * The RPC will fail if you can't modify the attributes, anyway.
130  */
131 #define AFS_ACCESS_READ (FILE_GENERIC_READ & ~SYNCHRONIZE)
132 #define AFS_ACCESS_WRITE ((FILE_GENERIC_WRITE & ~(READ_CONTROL | SYNCHRONIZE)) \
133                                 & ~FILE_WRITE_ATTRIBUTES)
134
135 extern long cm_CheckNTOpen(cm_scache_t *scp, unsigned int desiredAccess,
136         unsigned int createDisp, cm_user_t *userp, cm_req_t *reqp);
137
138 extern long cm_CheckNTDelete(cm_scache_t *dscp, cm_scache_t *scp,
139         cm_user_t *userp, cm_req_t *reqp);
140
141 extern long cm_EvaluateSymLink(cm_scache_t *dscp, cm_scache_t *linkScp,
142         cm_scache_t **outScpp, cm_user_t *userp, cm_req_t *reqp);
143
144 extern long cm_Lock(cm_scache_t *scp, unsigned char LockType,
145         LARGE_INTEGER LOffset, LARGE_INTEGER LLength,
146         u_long Timeout, cm_user_t *userp, cm_req_t *reqp,
147         void **lockpp);
148
149 extern long cm_Unlock(cm_scache_t *scp, unsigned char LockType,
150         LARGE_INTEGER LOffset, LARGE_INTEGER LLength,
151         cm_user_t *userp, cm_req_t *reqp);
152
153 extern void cm_CheckLocks();
154
155 extern long cm_RetryLock(cm_file_lock_t *oldFileLock, int vcp_is_dead);
156
157 #endif /*  __CM_VNODEOPS_H_ENV__ */