8 #define GLOBUS_LIBC_H 1
13 #if defined(WIN32) && !defined(__CYGWIN__)
19 #if !defined(__USE_MINGW_ANSI_STDIO)
20 #define snprintf _snprintf
25 # define GLOBUS_DEPRECATED(func) func __attribute__((deprecated))
26 #elif defined(_MSC_VER)
27 # define GLOBUS_DEPRECATED(func) __declspec(deprecated) func
29 # define GLOBUS_DEPRECATED(func) func
38 #define globus_macro_libc_lock() \
39 globus_mutex_lock(&globus_libc_mutex)
40 #define globus_macro_libc_unlock() \
41 globus_mutex_unlock(&globus_libc_mutex)
44 #define globus_libc_lock() globus_macro_libc_lock()
45 #define globus_libc_unlock() globus_macro_libc_unlock()
47 extern int globus_libc_lock(
void);
48 extern int globus_libc_unlock(
void);
52 # define globus_libc_va_copy(dest,src) \
54 #elif defined(__va_copy)
55 # define globus_libc_va_copy(dest,src) \
58 # define globus_libc_va_copy(dest,src) \
59 memcpy(&dest, &src, sizeof(va_list))
63 #define globus_stdio_lock globus_libc_lock
64 #define globus_stdio_unlock globus_libc_unlock
65 #define globus_libc_printf printf
66 #define globus_libc_fprintf fprintf
67 #define globus_libc_sprintf sprintf
68 #define globus_libc_vprintf vprintf
69 #define globus_libc_vfprintf vfprintf
70 #define globus_libc_vsprintf vsprintf
72 #if __STDC_VERSION__ >= 199901L
73 #define globus_libc_snprintf snprintf
74 #define globus_libc_vsnprintf vsnprintf
76 extern int globus_libc_snprintf(
char *s,
size_t n,
const char *format, ...);
77 extern int globus_libc_vsnprintf(
char *s,
size_t n,
const char *format,
85 #define globus_libc_open open
86 #define globus_libc_close close
87 #define globus_libc_read read
88 #define globus_libc_write write
89 #define globus_libc_umask umask
90 #define globus_libc_writev writev
91 #define globus_libc_fstat fstat
93 #define globus_libc_opendir opendir
94 #define globus_libc_telldir telldir
95 #define globus_libc_seekdir seekdir
96 #define globus_libc_rewinddir rewinddir
97 #define globus_libc_closedir closedir
98 #define globus_libc_getpwuid_r getpwuid_r
104 globus_libc_umask_win32(
107 # define globus_libc_open _open
108 # define globus_libc_close _close
109 # define globus_libc_read _read
110 # define globus_libc_write _write
111 # define globus_libc_umask globus_libc_umask_win32
112 # define globus_libc_writev(fd,iov,iovcnt) \
113 write(fd,iov[0].iov_base,iov[0].iov_len)
115 #if defined(TARGET_ARCH_CYGWIN) || defined(TARGET_ARCH_MINGW32)
116 #define globus_libc_opendir opendir
117 #define globus_libc_telldir telldir
118 #define globus_libc_seekdir seekdir
119 #define globus_libc_rewinddir rewinddir
120 #define globus_libc_closedir closedir
125 globus_libc_readdir_r(
127 struct dirent ** result);
132 #define globus_malloc(bytes) globus_libc_malloc(bytes)
133 #define globus_realloc(ptr,bytes) globus_libc_realloc(ptr,bytes)
134 #define globus_calloc(nobjs,bytes) globus_libc_calloc(nobjs,bytes)
135 #define globus_free(ptr) globus_libc_free(ptr)
137 #define globus_libc_malloc malloc
138 #define globus_libc_realloc realloc
139 #define globus_libc_calloc calloc
140 #define globus_libc_free free
141 #define globus_libc_alloca alloca
142 #define globus_libc_lseek lseek
145 int globus_libc_gethostname(
char *name,
int len);
146 int globus_libc_getpid(
void);
147 int globus_libc_fork(
void);
148 int globus_libc_usleep(
long usec);
149 double globus_libc_wallclock(
void);
152 extern int globus_libc_sprint_off_t(
char * s, globus_off_t off);
154 extern int globus_libc_scan_off_t(
char *s, globus_off_t *off,
int *consumed);
157 GLOBUS_DEPRECATED(
struct hostent *globus_libc_gethostbyname_r(
char *name,
158 struct hostent *result,
163 GLOBUS_DEPRECATED(
struct hostent *globus_libc_gethostbyaddr_r(
char *addr,
166 struct hostent *result,
171 #ifdef _POSIX_THREAD_SAFE_FUCTIONS
172 #define globus_libc_ctime_r(clock, buf, buflen) ctime_r(clock, buf)
173 #define globus_libc_localtime_r(timer, result) localtime_r(timer, result)
174 #define globus_libc_gmtime_r(timer, result) gmtime_r(timer, result)
176 char *globus_libc_ctime_r(time_t *clock,
char *buf,
int buflen);
177 struct tm * globus_libc_localtime_r(
const time_t *timep,
struct tm *result);
178 struct tm * globus_libc_gmtime_r(
const time_t *timep,
struct tm *result);
182 #define globus_libc_getpwnam_r getpwnam_r
186 globus_libc_strncasecmp(
191 int globus_libc_setenv(
const char *name,
194 void globus_libc_unsetenv(
const char *name);
197 GLOBUS_DEPRECATED(
char *globus_libc_getenv(
const char *name));
200 char *globus_libc_system_error_string(
int the_error);
203 globus_libc_strdup(
const char * source);
206 globus_libc_strndup(
const char *
string,
globus_size_t length);
213 #define globus_libc_strcmp strcmp
214 #define globus_libc_strlen strlen
222 globus_libc_vprintf_length(
const char * fmt, va_list ap);
225 globus_libc_printf_length(
const char * fmt, ...);
228 int globus_libc_gethomedir(
char *result,
int bufsize);
231 globus_common_create_string(
236 globus_common_create_nstring(
242 globus_common_v_create_string(
247 globus_common_v_create_nstring(
253 #define globus_libc_memmove(d, s, n) memmove((d), (s), (n))
256 # define globus_libc_setegid(a) setresgid(-1,a,-1)
257 # define globus_libc_seteuid(a) setresuid(-1,a,-1)
259 # define globus_libc_setegid(a) setegid(a)
260 # define globus_libc_seteuid(a) seteuid(a)
265 typedef struct sockaddr_storage globus_sockaddr_t;
266 typedef struct addrinfo globus_addrinfo_t;
269 #define GlobusLibcProtocolFamilyIsIP(family) \
270 ((family == AF_INET ? 1 : (family == AF_INET6 ? 1 : 0)))
272 #define GlobusLibcProtocolFamilyIsIP(family) \
273 (family == AF_INET ? 1 : 0)
277 #define PF_INET AF_INET
281 #define PF_UNSPEC AF_UNSPEC
284 #define GlobusLibcSockaddrSetFamily(_addr, fam) ((struct sockaddr *) &(_addr))->sa_family = fam
285 #define GlobusLibcSockaddrGetFamily(_addr) ((struct sockaddr *) &(_addr))->sa_family
288 #define GlobusLibcSockaddrGetPort(addr, port) \
291 const struct sockaddr * _addr = (struct sockaddr *) &(addr);\
293 switch(_addr->sa_family) \
296 (port) = ntohs(((struct sockaddr_in *) _addr)->sin_port); \
300 (port) = ntohs(((struct sockaddr_in6 *) _addr)->sin6_port); \
305 "Unknown family in GlobusLibcSockaddrGetPort"); \
311 #define GlobusLibcSockaddrGetPort(addr, port) \
314 const struct sockaddr * _addr = (struct sockaddr *) &(addr);\
316 switch(_addr->sa_family) \
319 (port) = ntohs(((struct sockaddr_in *) _addr)->sin_port); \
324 "Unknown family in GlobusLibcSockaddrGetPort"); \
332 #define GlobusLibcSockaddrSetPort(addr, port) \
335 struct sockaddr * _addr = (struct sockaddr *) &(addr);\
337 switch(_addr->sa_family) \
340 ((struct sockaddr_in *) _addr)->sin_port = htons((port)); \
344 ((struct sockaddr_in6 *) _addr)->sin6_port = htons((port)); \
349 "Unknown family in GlobusLibcSockaddrSetPort"); \
354 #define GlobusLibcSockaddrSetPort(addr, port) \
357 struct sockaddr * _addr = (struct sockaddr *) &(addr);\
359 switch(_addr->sa_family) \
362 ((struct sockaddr_in *) _addr)->sin_port = htons((port)); \
367 "Unknown family in GlobusLibcSockaddrSetPort"); \
374 #define GlobusLibcSockaddrSetLen(addr, len) \
377 struct sockaddr * _addr = (struct sockaddr *) &(addr);\
379 switch(_addr->sa_family) \
382 ((struct sockaddr_in *) _addr)->sin_len = (len); \
386 ((struct sockaddr_in6 *) _addr)->sin6_len = (len); \
391 "Unknown family in GlobusLibcSockaddrSetLen"); \
396 #define GlobusLibcSockaddrCopy(dest_addr, source_addr, source_len) \
397 (memcpy(&(dest_addr), &(source_addr), (source_len)))
399 #define GlobusLibcSockaddrLen(addr) \
400 (((struct sockaddr *) (addr))->sa_family == AF_INET \
401 ? sizeof(struct sockaddr_in) : \
402 (((struct sockaddr *) (addr))->sa_family == AF_INET6 \
403 ? sizeof(struct sockaddr_in6) : -1))
405 #define GLOBUS_AI_PASSIVE AI_PASSIVE
406 #define GLOBUS_AI_NUMERICHOST AI_NUMERICHOST
407 #define GLOBUS_AI_CANONNAME AI_CANONNAME
409 #define GLOBUS_NI_MAXHOST NI_MAXHOST
410 #define GLOBUS_NI_NOFQDN NI_NOFQDN
411 #define GLOBUS_NI_NAMEREQD NI_NAMEREQD
412 #define GLOBUS_NI_DGRAM NI_DGRAM
413 #define GLOBUS_NI_NUMERICSERV NI_NUMERICSERV
414 #define GLOBUS_NI_NUMERICHOST NI_NUMERICHOST
416 #define GLOBUS_EAI_ERROR_OFFSET 2048
418 #define GLOBUS_EAI_FAMILY (EAI_FAMILY + GLOBUS_EAI_ERROR_OFFSET)
419 #define GLOBUS_EAI_SOCKTYPE (EAI_SOCKTYPE + GLOBUS_EAI_ERROR_OFFSET)
420 #define GLOBUS_EAI_BADFLAGS (EAI_BADFLAGS + GLOBUS_EAI_ERROR_OFFSET)
421 #define GLOBUS_EAI_NONAME (EAI_NONAME + GLOBUS_EAI_ERROR_OFFSET)
422 #define GLOBUS_EAI_SERVICE (EAI_SERVICE + GLOBUS_EAI_ERROR_OFFSET)
423 #define GLOBUS_EAI_ADDRFAMILY (EAI_ADDRFAMILY + GLOBUS_EAI_ERROR_OFFSET)
424 #define GLOBUS_EAI_NODATA (EAI_NODATA + GLOBUS_EAI_ERROR_OFFSET)
425 #define GLOBUS_EAI_MEMORY (EAI_MEMORY + GLOBUS_EAI_ERROR_OFFSET)
426 #define GLOBUS_EAI_FAIL (EAI_FAIL + GLOBUS_EAI_ERROR_OFFSET)
427 #define GLOBUS_EAI_AGAIN (EAI_AGAIN + GLOBUS_EAI_ERROR_OFFSET)
428 #define GLOBUS_EAI_SYSTEM (EAI_SYSTEM + GLOBUS_EAI_ERROR_OFFSET)
431 globus_libc_getaddrinfo(
433 const char * service,
434 const globus_addrinfo_t * hints,
435 globus_addrinfo_t ** res);
438 globus_libc_freeaddrinfo(
439 globus_addrinfo_t * res);
442 globus_libc_getnameinfo(
443 const globus_sockaddr_t * addr,
451 globus_libc_addr_is_loopback(
452 const globus_sockaddr_t * addr);
455 globus_libc_addr_is_wildcard(
456 const globus_sockaddr_t * addr);
459 #define GLOBUS_LIBC_ADDR_NUMERIC 1
461 #define GLOBUS_LIBC_ADDR_LOCAL 2
463 #define GLOBUS_LIBC_ADDR_IPV6 4
465 #define GLOBUS_LIBC_ADDR_IPV4 8
471 globus_libc_addr_to_contact_string(
472 const globus_sockaddr_t * addr,
474 char ** contact_string);
478 globus_libc_addr_convert_family(
479 const globus_sockaddr_t * src,
480 globus_sockaddr_t * dest,
485 const char * contact_string,
488 unsigned short * port);
496 globus_libc_ints_to_contact_string(
499 unsigned short port);
502 globus_libc_gethostaddr(
503 globus_sockaddr_t * addr);
506 globus_libc_gethostaddr_by_family(
507 globus_sockaddr_t * addr,
516 globus_libc_safe_malloc(
globus_result_t globus_libc_contact_string_to_ints(const char *contact_string, int *host, int *count, unsigned short *port)
Definition: globus_libc.c:2856
char * globus_libc_join(const char **array, int count)
Definition: globus_libc.c:3118
Globus Threading Abstraction.
uint32_t globus_result_t
Definition: globus_types.h:84
int globus_bool_t
Boolean type.
Definition: globus_types.h:78
size_t globus_size_t
Standard size of memory objectThe globus_size_t is the size of a memory object. It is identical to si...
Definition: globus_types.h:33
Mutex.
Definition: globus_thread.h:92