23 #define GLOBUS_LIBC_H 1
28 #if defined(WIN32) && !defined(__CYGWIN__)
34 #if !defined(__USE_MINGW_ANSI_STDIO)
35 #define snprintf _snprintf
40 # define GLOBUS_DEPRECATED(func) func __attribute__((deprecated))
41 #elif defined(_MSC_VER)
42 # define GLOBUS_DEPRECATED(func) __declspec(deprecated) func
44 # define GLOBUS_DEPRECATED(func) func
53 #define globus_macro_libc_lock() \
54 globus_mutex_lock(&globus_libc_mutex)
55 #define globus_macro_libc_unlock() \
56 globus_mutex_unlock(&globus_libc_mutex)
59 #define globus_libc_lock() globus_macro_libc_lock()
60 #define globus_libc_unlock() globus_macro_libc_unlock()
62 extern int globus_libc_lock(
void);
63 extern int globus_libc_unlock(
void);
67 # define globus_libc_va_copy(dest,src) \
69 #elif defined(__va_copy)
70 # define globus_libc_va_copy(dest,src) \
73 # define globus_libc_va_copy(dest,src) \
74 memcpy(&dest, &src, sizeof(va_list))
78 #define globus_stdio_lock globus_libc_lock
79 #define globus_stdio_unlock globus_libc_unlock
80 #define globus_libc_printf printf
81 #define globus_libc_fprintf fprintf
82 #define globus_libc_sprintf sprintf
83 #define globus_libc_vprintf vprintf
84 #define globus_libc_vfprintf vfprintf
85 #define globus_libc_vsprintf vsprintf
87 #if __STDC_VERSION__ >= 199901L
88 #define globus_libc_snprintf snprintf
89 #define globus_libc_vsnprintf vsnprintf
91 extern int globus_libc_snprintf(
char *s,
size_t n,
const char *format, ...);
92 extern int globus_libc_vsnprintf(
char *s,
size_t n,
const char *format,
100 #define globus_libc_open open
101 #define globus_libc_close close
102 #define globus_libc_read read
103 #define globus_libc_write write
104 #define globus_libc_umask umask
105 #define globus_libc_writev writev
106 #define globus_libc_fstat fstat
108 #define globus_libc_opendir opendir
109 #define globus_libc_telldir telldir
110 #define globus_libc_seekdir seekdir
111 #define globus_libc_rewinddir rewinddir
112 #define globus_libc_closedir closedir
113 #define globus_libc_getpwuid_r getpwuid_r
119 globus_libc_umask_win32(
122 # define globus_libc_open _open
123 # define globus_libc_close _close
124 # define globus_libc_read _read
125 # define globus_libc_write _write
126 # define globus_libc_umask globus_libc_umask_win32
127 # define globus_libc_writev(fd,iov,iovcnt) \
128 write(fd,iov[0].iov_base,iov[0].iov_len)
130 #if defined(TARGET_ARCH_CYGWIN) || defined(TARGET_ARCH_MINGW32)
131 #define globus_libc_opendir opendir
132 #define globus_libc_telldir telldir
133 #define globus_libc_seekdir seekdir
134 #define globus_libc_rewinddir rewinddir
135 #define globus_libc_closedir closedir
140 globus_libc_readdir_r(
142 struct dirent ** result);
147 #define globus_malloc(bytes) globus_libc_malloc(bytes)
148 #define globus_realloc(ptr,bytes) globus_libc_realloc(ptr,bytes)
149 #define globus_calloc(nobjs,bytes) globus_libc_calloc(nobjs,bytes)
150 #define globus_free(ptr) globus_libc_free(ptr)
152 #define globus_libc_malloc malloc
153 #define globus_libc_realloc realloc
154 #define globus_libc_calloc calloc
155 #define globus_libc_free free
156 #define globus_libc_alloca alloca
157 #define globus_libc_lseek lseek
160 int globus_libc_gethostname(
char *name,
int len);
161 int globus_libc_getpid(
void);
162 int globus_libc_fork(
void);
163 int globus_libc_usleep(
long usec);
164 double globus_libc_wallclock(
void);
167 extern int globus_libc_sprint_off_t(
char * s, globus_off_t off);
169 extern int globus_libc_scan_off_t(
char *s, globus_off_t *off,
int *consumed);
172 GLOBUS_DEPRECATED(
struct hostent *globus_libc_gethostbyname_r(
char *name,
173 struct hostent *result,
178 GLOBUS_DEPRECATED(
struct hostent *globus_libc_gethostbyaddr_r(
char *addr,
181 struct hostent *result,
186 #ifdef _POSIX_THREAD_SAFE_FUCTIONS
187 #define globus_libc_ctime_r(clock, buf, buflen) ctime_r(clock, buf)
188 #define globus_libc_localtime_r(timer, result) localtime_r(timer, result)
189 #define globus_libc_gmtime_r(timer, result) gmtime_r(timer, result)
191 char *globus_libc_ctime_r(time_t *clock,
char *buf,
int buflen);
192 struct tm * globus_libc_localtime_r(
const time_t *timep,
struct tm *result);
193 struct tm * globus_libc_gmtime_r(
const time_t *timep,
struct tm *result);
197 #define globus_libc_getpwnam_r getpwnam_r
201 globus_libc_strncasecmp(
206 int globus_libc_setenv(
register const char *name,
207 register const char *value,
209 void globus_libc_unsetenv(
register const char *name);
212 GLOBUS_DEPRECATED(
char *globus_libc_getenv(
register const char *name));
215 char *globus_libc_system_error_string(
int the_error);
218 globus_libc_strdup(
const char * source);
221 globus_libc_strndup(
const char *
string,
globus_size_t length);
228 #define globus_libc_strcmp strcmp
229 #define globus_libc_strlen strlen
237 globus_libc_vprintf_length(
const char * fmt, va_list ap);
240 globus_libc_printf_length(
const char * fmt, ...);
243 int globus_libc_gethomedir(
char *result,
int bufsize);
246 globus_common_create_string(
251 globus_common_create_nstring(
257 globus_common_v_create_string(
262 globus_common_v_create_nstring(
268 #define globus_libc_memmove(d, s, n) memmove((d), (s), (n))
271 # define globus_libc_setegid(a) setresgid(-1,a,-1)
272 # define globus_libc_seteuid(a) setresuid(-1,a,-1)
274 # define globus_libc_setegid(a) setegid(a)
275 # define globus_libc_seteuid(a) seteuid(a)
280 typedef struct sockaddr_storage globus_sockaddr_t;
281 typedef struct addrinfo globus_addrinfo_t;
284 #define GlobusLibcProtocolFamilyIsIP(family) \
285 ((family == AF_INET ? 1 : (family == AF_INET6 ? 1 : 0)))
287 #define GlobusLibcProtocolFamilyIsIP(family) \
288 (family == AF_INET ? 1 : 0)
292 #define PF_INET AF_INET
296 #define PF_UNSPEC AF_UNSPEC
299 #define GlobusLibcSockaddrSetFamily(_addr, fam) ((struct sockaddr *) &(_addr))->sa_family = fam
300 #define GlobusLibcSockaddrGetFamily(_addr) ((struct sockaddr *) &(_addr))->sa_family
303 #define GlobusLibcSockaddrGetPort(addr, port) \
306 const struct sockaddr * _addr = (struct sockaddr *) &(addr);\
308 switch(_addr->sa_family) \
311 (port) = ntohs(((struct sockaddr_in *) _addr)->sin_port); \
315 (port) = ntohs(((struct sockaddr_in6 *) _addr)->sin6_port); \
320 "Unknown family in GlobusLibcSockaddrGetPort"); \
326 #define GlobusLibcSockaddrGetPort(addr, port) \
329 const struct sockaddr * _addr = (struct sockaddr *) &(addr);\
331 switch(_addr->sa_family) \
334 (port) = ntohs(((struct sockaddr_in *) _addr)->sin_port); \
339 "Unknown family in GlobusLibcSockaddrGetPort"); \
347 #define GlobusLibcSockaddrSetPort(addr, port) \
350 struct sockaddr * _addr = (struct sockaddr *) &(addr);\
352 switch(_addr->sa_family) \
355 ((struct sockaddr_in *) _addr)->sin_port = htons((port)); \
359 ((struct sockaddr_in6 *) _addr)->sin6_port = htons((port)); \
364 "Unknown family in GlobusLibcSockaddrSetPort"); \
369 #define GlobusLibcSockaddrSetPort(addr, port) \
372 struct sockaddr * _addr = (struct sockaddr *) &(addr);\
374 switch(_addr->sa_family) \
377 ((struct sockaddr_in *) _addr)->sin_port = htons((port)); \
382 "Unknown family in GlobusLibcSockaddrSetPort"); \
389 #define GlobusLibcSockaddrSetLen(addr, len) \
392 struct sockaddr * _addr = (struct sockaddr *) &(addr);\
394 switch(_addr->sa_family) \
397 ((struct sockaddr_in *) _addr)->sin_len = (len); \
401 ((struct sockaddr_in6 *) _addr)->sin6_len = (len); \
406 "Unknown family in GlobusLibcSockaddrSetLen"); \
411 #define GlobusLibcSockaddrCopy(dest_addr, source_addr, source_len) \
412 (memcpy(&(dest_addr), &(source_addr), (source_len)))
414 #define GlobusLibcSockaddrLen(addr) \
415 (((struct sockaddr *) (addr))->sa_family == AF_INET \
416 ? sizeof(struct sockaddr_in) : \
417 (((struct sockaddr *) (addr))->sa_family == AF_INET6 \
418 ? sizeof(struct sockaddr_in6) : -1))
420 #define GLOBUS_AI_PASSIVE AI_PASSIVE
421 #define GLOBUS_AI_NUMERICHOST AI_NUMERICHOST
422 #define GLOBUS_AI_CANONNAME AI_CANONNAME
424 #define GLOBUS_NI_MAXHOST NI_MAXHOST
425 #define GLOBUS_NI_NOFQDN NI_NOFQDN
426 #define GLOBUS_NI_NAMEREQD NI_NAMEREQD
427 #define GLOBUS_NI_DGRAM NI_DGRAM
428 #define GLOBUS_NI_NUMERICSERV NI_NUMERICSERV
429 #define GLOBUS_NI_NUMERICHOST NI_NUMERICHOST
431 #define GLOBUS_EAI_ERROR_OFFSET 2048
433 #define GLOBUS_EAI_FAMILY (EAI_FAMILY + GLOBUS_EAI_ERROR_OFFSET)
434 #define GLOBUS_EAI_SOCKTYPE (EAI_SOCKTYPE + GLOBUS_EAI_ERROR_OFFSET)
435 #define GLOBUS_EAI_BADFLAGS (EAI_BADFLAGS + GLOBUS_EAI_ERROR_OFFSET)
436 #define GLOBUS_EAI_NONAME (EAI_NONAME + GLOBUS_EAI_ERROR_OFFSET)
437 #define GLOBUS_EAI_SERVICE (EAI_SERVICE + GLOBUS_EAI_ERROR_OFFSET)
438 #define GLOBUS_EAI_ADDRFAMILY (EAI_ADDRFAMILY + GLOBUS_EAI_ERROR_OFFSET)
439 #define GLOBUS_EAI_NODATA (EAI_NODATA + GLOBUS_EAI_ERROR_OFFSET)
440 #define GLOBUS_EAI_MEMORY (EAI_MEMORY + GLOBUS_EAI_ERROR_OFFSET)
441 #define GLOBUS_EAI_FAIL (EAI_FAIL + GLOBUS_EAI_ERROR_OFFSET)
442 #define GLOBUS_EAI_AGAIN (EAI_AGAIN + GLOBUS_EAI_ERROR_OFFSET)
443 #define GLOBUS_EAI_SYSTEM (EAI_SYSTEM + GLOBUS_EAI_ERROR_OFFSET)
446 globus_libc_getaddrinfo(
448 const char * service,
449 const globus_addrinfo_t * hints,
450 globus_addrinfo_t ** res);
453 globus_libc_freeaddrinfo(
454 globus_addrinfo_t * res);
457 globus_libc_getnameinfo(
458 const globus_sockaddr_t * addr,
466 globus_libc_addr_is_loopback(
467 const globus_sockaddr_t * addr);
470 globus_libc_addr_is_wildcard(
471 const globus_sockaddr_t * addr);
474 #define GLOBUS_LIBC_ADDR_NUMERIC 1
476 #define GLOBUS_LIBC_ADDR_LOCAL 2
478 #define GLOBUS_LIBC_ADDR_IPV6 4
480 #define GLOBUS_LIBC_ADDR_IPV4 8
486 globus_libc_addr_to_contact_string(
487 const globus_sockaddr_t * addr,
489 char ** contact_string);
493 globus_libc_addr_convert_family(
494 const globus_sockaddr_t * src,
495 globus_sockaddr_t * dest,
500 const char * contact_string,
503 unsigned short * port);
511 globus_libc_ints_to_contact_string(
514 unsigned short port);
517 globus_libc_gethostaddr(
518 globus_sockaddr_t * addr);
521 globus_libc_gethostaddr_by_family(
522 globus_sockaddr_t * addr,
globus_result_t globus_libc_contact_string_to_ints(const char *contact_string, int *host, int *count, unsigned short *port)
Definition: globus_libc.c:2964
Globus Threading Abstraction.
int globus_bool_t
Boolean type.
Definition: globus_types.h:93
Mutex.
Definition: globus_thread.h:107
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:48
uint32_t globus_result_t
Definition: globus_types.h:99
char * globus_libc_join(const char **array, int count)
Definition: globus_libc.c:3226