Initial IBM OpenAFS 1.0 tree
[openafs.git] / src / util / afsutil.h
1 /* Copyright (C)  1998  Transarc Corporation.  All rights reserved. */
2
3
4 #ifndef _AFSUTIL_H_
5 #define _AFSUTIL_H_
6
7 #include <time.h>
8 /* Include afs installation dir retrieval routines */
9 #include <afs/dirpath.h>
10
11 /* These macros are return values from extractAddr. They do not represent
12  * any valid IP address and so can indicate a failure.
13  */
14 #define AFS_IPINVALID           0xffffffff /* invalid IP address */
15 #define AFS_IPINVALIDIGNORE     0xfffffffe /* no input given to extractAddr */
16
17 /* logging defines
18  */
19 #include <stdio.h>
20 #include <stdarg.h>
21 extern int LogLevel;
22 extern void FSLog(const char *format, ...);
23 #define ViceLog(level, str)  if ((level) <= LogLevel) (FSLog str)
24
25 extern int OpenLog(const char *filename);
26 extern int ReOpenLog(const char *fileName);
27 extern void SetupLogSignals(void);
28
29
30 /* special version of ctime that clobbers a *different static variable, so
31  * that ViceLog can call ctime and not cause buffer confusion.
32  */
33 extern char *vctime(const time_t *atime);
34
35 /* Need a thead safe ctime for pthread builds. Use std ctime for LWP */
36 #if defined(AFS_PTHREAD_ENV) && !defined(AFS_NT40_ENV)
37 #ifdef AFS_SUN5_ENV
38 #define afs_ctime(C, B, L) ctime_r(C, B, L)
39 #else
40 /* Cast is for platforms which do not prototype ctime_r */
41 #define afs_ctime(C, B, L) (char*)ctime_r(C, B)
42 #endif /* AFS_SUN5_ENV */
43 #else /* AFS_PTHREAD_ENV && !AFS_NT40_ENV */
44 #define afs_ctime(C, B, S) \
45         ((void)strncpy(B, ctime(C), (S-1)), (B)[S-1] = '\0', (B))
46 #endif  /* AFS_PTHREAD_ENV && !AFS_NT40_ENV */
47
48
49 /* Convert a 4 byte integer to a text string. */
50 extern char*    afs_inet_ntoa(afs_int32 addr);
51
52
53 /* copy strings, converting case along the way. */
54 extern char *lcstring(char *d, char *s, int n);
55 extern char *ucstring(char *d, char *s, int n);
56 extern char *strcompose(char *buf, size_t len, ...);
57
58 /* abort the current process. */
59 #ifdef AFS_NT40_ENV
60 #define afs_abort() afs_NTAbort()
61 #else
62 #define afs_abort() abort()
63 #endif
64
65
66 #ifdef AFS_NT40_ENV
67 #include <winsock2.h>
68
69 /* Initialize the windows sockets before calling networking routines. */
70 extern int afs_winsockInit(void);
71
72 struct timezone {
73     int  tz_minuteswest;     /* of Greenwich */
74     int  tz_dsttime;    /* type of dst correction to apply */
75 };
76 #define gettimeofday afs_gettimeofday
77 int afs_gettimeofday(struct timeval *tv, struct timezone *tz);
78
79 /* Unbuffer output when Un*x would do line buffering. */
80 #define setlinebuf(S) setvbuf(S, NULL, _IONBF, 0)
81
82 /* regular expression parser for NT */
83 extern char *re_comp(char *sp);
84 extern int rc_exec(char *p);
85
86 /* Abort on error, possibly trapping to debugger or dumping a trace. */
87 void afs_NTAbort(void);
88 #endif
89
90 /* get temp dir path */
91 char *gettmpdir(void);
92
93 /* Base 32 conversions used for NT since directory names are
94  * case-insensitive.
95  */
96 typedef char b32_string_t[8];
97 char *int_to_base32(b32_string_t s, int a);
98 int base32_to_int(char *s);
99
100 #if defined(AFS_NAMEI_ENV) && !defined(AFS_NT40_ENV)
101 /* base 64 converters for namei interface. Flip bits to differences are
102  * early in name.
103  */
104 typedef char lb64_string_t[12];
105 char *int64_to_flipbase64(b64_string_t s, u_int64_t a);
106 int64_t flipbase64_to_int64(char *s);
107 #define int32_to_flipbase64(S, A) int64_to_flipbase64(S, (u_int64_t)(A))
108 #endif
109
110 /* This message preserves our ability to license AFS to the U.S. Government
111  * more than once.
112  */
113
114 #define AFS_GOVERNMENT_MESSAGE \
115 "===================== U.S. Government Restricted Rights ======================\n\
116 If you are licensing the Software on behalf of the U.S. Government\n\
117 (\"Government\"), the following provisions apply to you.  If the Software is\n\
118 supplied to the Department of Defense (\"DoD\"), it is classified as \"Commercial\n\
119 Computer Software\" under paragraph 252.227-7014 of the DoD Supplement to the\n\
120 Federal Acquisition Regulations (\"DFARS\") (or any successor regulations)\n\
121 and the Government is acquiring only the license rights granted herein (the\n\
122 license rights customarily provided to non-Government users).  If the Software\n\
123 is supplied to any unit or agency of the Government other than DoD, it is\n\
124 classified as \"Restricted Computer Software\" and the Government's rights in\n\
125 the Software are defined in paragraph 52.227-19 of the Federal Acquisition\n\
126 Regulations (\"FAR\") (or any successor regulations) or, in the case of NASA,\n\
127 in paragraph 18.52.227-86 of the NASA Supplement in the FAR (or any successor\n\
128 regulations).\n"
129
130 #endif /* _AFSUTIL_H_ */