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