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