Windows: Use Jenkins' Hash
[openafs.git] / src / WINNT / afsd / cm_utils.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 OPENAFS_WINNT_AFSD_CM_UTILS_H
11 #define OPENAFS_WINNT_AFSD_CM_UTILS_H 1
12
13 #define CM_UTILS_SPACESIZE              8192    /* space to allocate */
14 typedef struct cm_space {
15     union {
16         clientchar_t wdata[CM_UTILS_SPACESIZE];
17         char data[CM_UTILS_SPACESIZE];
18     };
19     struct cm_space *nextp;
20 } cm_space_t;
21
22 /* error code hack */
23 #define VL_IDEXIST                               (363520L)
24 #define VL_IO                                    (363521L)
25 #define VL_NAMEEXIST                             (363522L)
26 #define VL_CREATEFAIL                            (363523L)
27 #define VL_NOENT                                 (363524L)
28 #define VL_EMPTY                                 (363525L)
29 #define VL_ENTDELETED                            (363526L)
30 #define VL_BADNAME                               (363527L)
31 #define VL_BADINDEX                              (363528L)
32 #define VL_BADVOLTYPE                            (363529L)
33 #define VL_BADSERVER                             (363530L)
34 #define VL_BADPARTITION                          (363531L)
35 #define VL_REPSFULL                              (363532L)
36 #define VL_NOREPSERVER                           (363533L)
37 #define VL_DUPREPSERVER                          (363534L)
38 #define VL_RWNOTFOUND                            (363535L)
39 #define VL_BADREFCOUNT                           (363536L)
40 #define VL_SIZEEXCEEDED                          (363537L)
41 #define VL_BADENTRY                              (363538L)
42 #define VL_BADVOLIDBUMP                          (363539L)
43 #define VL_IDALREADYHASHED                       (363540L)
44 #define VL_ENTRYLOCKED                           (363541L)
45 #define VL_BADVOLOPER                            (363542L)
46 #define VL_BADRELLOCKTYPE                        (363543L)
47 #define VL_RERELEASE                             (363544L)
48 #define VL_BADSERVERFLAG                         (363545L)
49 #define VL_PERM                                  (363546L)
50 #define VL_NOMEM                                 (363547L)
51 #define VL_BADVERSION                            (363548L)
52 #define VL_INDEXERANGE                           (363549L)
53 #define VL_MULTIPADDR                            (363550L)
54 #define VL_BADMASK                               (363551L)
55
56 extern cm_space_t *cm_GetSpace(void);
57
58 extern void cm_FreeSpace(cm_space_t *);
59
60 extern long cm_MapRPCError(long error, cm_req_t *reqp);
61
62 extern long cm_MapRPCErrorRmdir(long error, cm_req_t *reqp);
63
64 extern long cm_MapVLRPCError(long error, cm_req_t *reqp);
65
66 extern void init_et_to_sys_error(void);
67
68 extern int cm_Is8Dot3(clientchar_t *namep);
69
70 extern void cm_Gen8Dot3Name(struct cm_dirEntry *dep, clientchar_t *shortName,
71                             clientchar_t **shortNameEndp);
72
73 #define cm_Gen8Dot3Name(dep,shortName,shortNameEndp)                  \
74 cm_Gen8Dot3NameInt((dep)->name, &(dep)->fid, shortName, shortNameEndp)
75
76 extern void cm_Gen8Dot3NameInt(const fschar_t * longname, cm_dirFid_t * pfid,
77                                clientchar_t *shortName, clientchar_t **shortNameEndp);
78
79 extern void cm_Gen8Dot3NameIntW(const clientchar_t* longname, cm_dirFid_t * pfid,
80                                 clientchar_t *shortName, clientchar_t **shortNameEndp);
81
82 extern void cm_Gen8Dot3VolNameW(afs_uint32 cell, afs_uint32 volume,
83                                 clientchar_t *shortName, clientchar_t **shortNameEndp);
84
85 extern int cm_MatchMask(clientchar_t *namep, clientchar_t *maskp, int flags);
86
87 extern BOOL cm_TargetPerceivedAsDirectory(const fschar_t *target);
88
89 extern HANDLE cm_LoadAfsdHookLib(void);
90
91 extern BOOL cm_GetOSFileVersion(char *filename, LARGE_INTEGER *liVer);
92
93 extern BOOL msftSMBRedirectorSupportsExtendedTimeouts(void);
94
95 /* thread priority */
96 extern void cm_UpdateServerPriority(void);
97
98 extern void cm_SetRequestStartTime(void);
99
100 extern void cm_ResetServerPriority(void);
101
102 /* time related functions */
103
104 extern void cm_LargeSearchTimeFromUnixTime(FILETIME *largeTimep, time_t unixTime);
105
106 extern void cm_UnixTimeFromLargeSearchTime(time_t *unixTimep, FILETIME *largeTimep);
107
108 extern void cm_SearchTimeFromUnixTime(afs_uint32 *searchTimep, time_t unixTime);
109
110 extern void cm_UnixTimeFromSearchTime(time_t *unixTimep, afs_uint32 searchTime);
111
112 extern void cm_utilsInit(void);
113
114 extern void cm_utilsCleanup(void);
115
116 __inline void
117 cm_InterlockedAnd(LONG * pdest, LONG value)
118 {
119     LONG orig, current, new;
120
121     current = *pdest;
122
123     do
124     {
125         orig = current;
126         new = orig & value;
127         current = _InterlockedCompareExchange(pdest, new, orig);
128     } while (orig != current);
129 }
130
131 __inline void
132 cm_InterlockedOr(LONG * pdest, LONG value)
133 {
134     LONG orig, current, new;
135
136     current = *pdest;
137
138     do
139     {
140         orig = current;
141         new = orig | value;
142         current = _InterlockedCompareExchange(pdest, new, orig);
143     } while (orig != current);
144 }
145
146 #ifdef DEBUG
147 #ifdef _M_IX86
148 #define _InterlockedOr   cm_InterlockedOr
149 #define _InterlockedAnd  cm_InterlockedAnd
150 #endif
151 #endif
152
153 extern afs_uint32
154 cm_NextHighestPowerOf2(afs_uint32 n);
155
156 #endif /*  OPENAFS_WINNT_AFSD_CM_UTILS_H */