📄 xos_r.h
字号:
# define _XGetlogin(p) getlogin_r((p).buf, sizeof((p).buf))# define _XTtyname(f,p) ttyname_r((f), (p).buf, sizeof((p).buf))#endif /* X_INCLUDE_UNISTD_H */#if defined(X_INCLUDE_UNISTD_H) && !defined(_XOS_INCLUDED_UNISTD_H)# define _XOS_INCLUDED_UNISTD_H#endif/***** <string.h> wrappers *****//* * Effective prototypes for <string.h> wrappers: * * #define X_INCLUDE_STRING_H * #define XOS_USE_..._LOCKING * #include <X11/Xos_r.h> * * typedef ... _Xstrtokparams; * * char *_XStrtok(char *, const char*, _Xstrtokparams); */#if defined(X_INCLUDE_STRING_H) && !defined(_XOS_INCLUDED_STRING_H)/* <string.h> has already been included by <X11/Xos.h> */# if defined(XUSE_MTSAFE_API) || defined(XUSE_MTSAFE_STRINGAPI)# define XOS_USE_MTSAFE_STRINGAPI 1# endif#endif#if !defined(X_INCLUDE_STRING_H) || defined(_XOS_INCLUDED_STRING_H)/* Do nothing. */#elif !defined(XTHREADS) && !defined(X_FORCE_USE_MTSAFE_API)/* Use regular, unsafe API. */typedef int _Xstrtokparams; /* dummy */# define _XStrtok(s1,s2,p) strtok((s1),(s2))#elif !defined(XOS_USE_MTSAFE_STRINGAPI) || defined(XNO_MTSAFE_STRINGAPI)/* Systems with thread support but no _r API. */typedef char *_Xstrtokparams;# define _XStrtok(s1,s2,p) \ ( (_Xos_processLock), \ ((p) = strtok((s1),(s2))), \ (_Xos_processUnlock), \ (p) )#else/* POSIX or pre-POSIX API. */typedef char * _Xstrtokparams;# define _XStrtok(s1,s2,p) strtok_r((s1),(s2),&(p))#endif /* X_INCLUDE_STRING_H *//***** <time.h> wrappers *****//* * Effective prototypes for <time.h> wrappers: * * #define X_INCLUDE_TIME_H * #define XOS_USE_..._LOCKING * #include <X11/Xos_r.h> * * typedef ... _Xatimeparams; * typedef ... _Xctimeparams; * typedef ... _Xgtimeparams; * typedef ... _Xltimeparams; * * char *_XAsctime(const struct tm *, _Xatimeparams); * char *_XCtime(const time_t *, _Xctimeparams); * struct tm *_XGmtime(const time_t *, _Xgtimeparams); * struct tm *_XLocaltime(const time_t *, _Xltimeparams); */#if defined(X_INCLUDE_TIME_H) && !defined(_XOS_INCLUDED_TIME_H)# include <time.h># if defined(XUSE_MTSAFE_API) || defined(XUSE_MTSAFE_TIMEAPI)# define XOS_USE_MTSAFE_TIMEAPI 1# endif#endif#if !defined(X_INCLUDE_TIME_H) || defined(_XOS_INCLUDED_TIME_H)/* Do nothing. */#elif !defined(XTHREADS) && !defined(X_FORCE_USE_MTSAFE_API)/* Use regular, unsafe API. */typedef int _Xatimeparams; /* dummy */# define _XAsctime(t,p) asctime((t))typedef int _Xctimeparams; /* dummy */# define _XCtime(t,p) ctime((t))typedef int _Xgtimeparams; /* dummy */# define _XGmtime(t,p) gmtime((t))typedef int _Xltimeparams; /* dummy */# define _XLocaltime(t,p) localtime((t))#elif !defined(XOS_USE_MTSAFE_TIMEAPI) || defined(XNO_MTSAFE_TIMEAPI)/* Systems with thread support but no _r API. */typedef struct {# ifdef TIMELEN char buf[TIMELEN];# else char buf[26];# endif char *result;} _Xctimeparams, _Xatimeparams;typedef struct { struct tm buf; struct tm *result;} _Xgtimeparams, _Xltimeparams;# define _XAsctime(t,p) \ ( (_Xos_processLock), \ (((p).result = asctime((t))) ? \ (strncpy((p).buf, (p).result, sizeof((p).buf)), (p).result = &(p).buf) : \ 0), \ (_Xos_processUnlock), \ (p).result )# define _XCtime(t,p) \ ( (_Xos_processLock), \ (((p).result = ctime((t))) ? \ (strncpy((p).buf, (p).result, sizeof((p).buf)), (p).result = &(p).buf) : \ 0), \ (_Xos_processUnlock), \ (p).result )# define _XGmtime(t,p) \ ( (_Xos_processLock), \ (((p).result = gmtime(t)) ? \ (memcpy(&(p).buf, (p).result, sizeof((p).buf)), (p).result = &(p).buf) : \ 0), \ (_Xos_processUnlock), \ (p).result )# define _XLocaltime(t,p) \ ( (_Xos_processLock), \ (((p).result = localtime(t)) ? \ (memcpy(&(p).buf, (p).result, sizeof((p).buf)), (p).result = &(p).buf) : \ 0), \ (_Xos_processUnlock), \ (p).result )#elif !defined(_POSIX_THREAD_SAFE_FUNCTIONS) && (defined(__osf__) || defined(hpV4))/* Returns (int)0 on success. OSF/1 v3.2, HP/UX 10 * * extern int asctime_r(const struct tm *timeptr, char *buffer, int buflen); * extern int ctime_r(const time_t *timer, char *buffer, int buflen); * extern int gmtime_r(const time_t *timer, struct tm *result); * extern int localtime_r(const time_t *timer, struct tm *result); */# ifdef TIMELENtypedef char _Xatimeparams[TIMELEN];typedef char _Xctimeparams[TIMELEN];# elsetypedef char _Xatimeparams[26];typedef char _Xctimeparams[26];# endiftypedef struct tm _Xgtimeparams;typedef struct tm _Xltimeparams;# define _XAsctime(t,p) (asctime_r((t),(p),sizeof((p))) ? NULL : (p))# define _XCtime(t,p) (ctime_r((t),(p),sizeof((p))) ? NULL : (p))# define _XGmtime(t,p) (gmtime_r((t),&(p)) ? NULL : &(p))# define _XLocaltime(t,p) (localtime_r((t),&(p)) ? NULL : &(p))#elif !defined(_POSIX_THREAD_SAFE_FUNCTIONS) && defined(sun)/* Returns NULL on failure. Solaris 2.5 * * extern char *asctime_r(const struct tm *tm,char *buf, int buflen); * extern char *ctime_r(const time_t *clock, char *buf, int buflen); * extern struct tm *gmtime_r(const time_t *clock, struct tm *res); * extern struct tm *localtime_r(const time_t *clock, struct tm *res); */# ifdef TIMELENtypedef char _Xatimeparams[TIMELEN];typedef char _Xctimeparams[TIMELEN];# elsetypedef char _Xatimeparams[26];typedef char _Xctimeparams[26];# endiftypedef struct tm _Xgtimeparams;typedef struct tm _Xltimeparams;# define _XAsctime(t,p) asctime_r((t),(p),sizeof((p)))# define _XCtime(t,p) ctime_r((t),(p),sizeof((p)))# define _XGmtime(t,p) gmtime_r((t),&(p))# define _XLocaltime(t,p) localtime_r((t),&(p))#else /* defined(_POSIX_THREAD_SAFE_FUNCTIONS) *//* POSIX final API. OSF/1 v4.0, AIX, etc. * * extern char *asctime_r(const struct tm *timeptr, char *buffer); * extern char *ctime_r(const time_t *timer, char *buffer); * extern struct tm *gmtime_r(const time_t *timer, struct tm *result); * extern struct tm *localtime_r(const time_t *timer, struct tm *result); */# if defined(__osf__)/* OSF/1 V4.0 <time.h> doesn't declare the _P routines, breaking under C++. */extern char *_Pasctime_r(const struct tm *, char *);extern char *_Pctime_r(const time_t *, char *);extern struct tm *_Plocaltime_r(const time_t *, struct tm *);# endif# ifdef TIMELENtypedef char _Xatimeparams[TIMELEN];typedef char _Xctimeparams[TIMELEN];# elsetypedef char _Xatimeparams[26];typedef char _Xctimeparams[26];# endiftypedef struct tm _Xgtimeparams;typedef struct tm _Xltimeparams;# define _XAsctime(t,p) asctime_r((t),(p))# define _XCtime(t,p) ctime_r((t),(p))# define _XGmtime(t,p) gmtime_r((t),&(p))# define _XLocaltime(t,p) localtime_r((t),&(p))#endif /* X_INCLUDE_TIME_H */#if defined(X_INCLUDE_TIME_H) && !defined(_XOS_INCLUDED_TIME_H)# define _XOS_INCLUDED_TIME_H#endif/***** <grp.h> wrappers *****//* * Effective prototypes for <grp.h> wrappers: * * NOTE: On systems lacking appropriate _r functions Getgrgid() and * Getgrnam() do NOT copy the list of group members! * * Remember that fgetgrent(), setgrent(), getgrent(), and endgrent() * are not included in POSIX. * * #define X_INCLUDE_GRP_H * #define XOS_USE_..._LOCKING * #include <X11/Xos_r.h> * * typedef ... _Xgetgrparams; * * struct group *_XGetgrgid(gid_t, _Xgetgrparams); * struct group *_XGetgrnam(const char *, _Xgetgrparams); */#if defined(X_INCLUDE_GRP_H) && !defined(_XOS_INCLUDED_GRP_H)# include <grp.h># if defined(XUSE_MTSAFE_API) || defined(XUSE_MTSAFE_GRPAPI)# define XOS_USE_MTSAFE_GRPAPI 1# endif#endif#if !defined(X_INCLUDE_GRP_H) || defined(_XOS_INCLUDED_GRP_H)/* Do nothing. */#elif !defined(XTHREADS) && !defined(X_FORCE_USE_MTSAFE_API)/* Use regular, unsafe API. */typedef int _Xgetgrparams; /* dummy */#define _XGetgrgid(g,p) getgrgid((g))#define _XGetgrnam(n,p) getgrnam((n))#elif !defined(XOS_USE_MTSAFE_GRPAPI) || defined(XNO_MTSAFE_GRPAPI)/* Systems with thread support but no _r API. UnixWare 2.0. */typedef struct { struct group grp;#ifdef LINE_MAX char buf[LINE_MAX]; /* Should be sysconf(_SC_GETGR_R_SIZE_MAX)? */#else char buf[1024]; /* Should be sysconf(_SC_GETGR_R_SIZE_MAX)? */#endif struct group *pgrp; size_t len;} _Xgetgrparams;#ifdef SVR4/* Copy the gr_passwd field too. */# define _Xgrp_copyGroup(p) \ ( memcpy(&(p).grp, (p).pgrp, sizeof(struct group)), \ ((p).grp.gr_name = (p).buf), \ ((p).len = strlen((p).pgrp->gr_name)), \ strcpy((p).grp.gr_name, (p).pgrp->gr_name), \ ((p).grp.gr_passwd = (p).grp.gr_name + (p).len + 1), \ ((p).pgrp = &(p).grp), \ 0 )#else# define _Xgrp_copyGroup(p) \ ( memcpy(&(p).grp, (p).pgrp, sizeof(struct group)), \ ((p).grp.gr_name = (p).buf), \ strcpy((p).grp.gr_name, (p).pgrp->gr_name), \ ((p).pgrp = &(p).grp), \ 0 )#endif#define _XGetgrgid(g,p) \ ( (_Xos_processLock), \ (((p).pgrp = getgrgid((g))) ? _Xgrp_copyGroup(p) : 0), \ (_Xos_processUnlock), \ (p).pgrp )#define _XGetgrnam(n,p) \ ( (_Xos_processLock), \ (((p).pgrp = getgrnam((n))) ? _Xgrp_copyGroup(p) : 0), \ (_Xos_processUnlock), \ (p).pgrp )#elif !defined(_POSIX_THREAD_SAFE_FUNCTIONS) && (defined(sun) || defined(__osf__))/* Non-POSIX API. Solaris, DEC v3.2. * * extern struct group *getgrgid_r(gid_t, struct group *, char *, int); * extern struct group *getgrnam_r(const char *, struct group *, char *, int); */typedef struct { struct group grp;#ifdef LINE_MAX char buf[LINE_MAX]; /* Should be sysconf(_SC_GETGR_R_SIZE_MAX)? */#else char buf[1024]; /* Should be sysconf(_SC_GETGR_R_SIZE_MAX)? */#endif} _Xgetgrparams;#define _XGetgrgid(g,p) getgrgid_r((g), &(p).grp, (p).buf, sizeof((p).buf))#define _XGetgrnam(n,p) getgrnam_r((n), &(p).grp, (p).buf, sizeof((p).buf))#elif !defined(_POSIX_THREAD_SAFE_FUNCTIONS)/* Non-POSIX API. HP/UX 10, AIX 4. * * extern int getgrgid_r(gid_t, struct group *, char *, int); * extern int getgrnam_r(const char *, struct group *, char *, int); */typedef struct { struct group grp;#ifdef LINE_MAX char buf[LINE_MAX]; /* Should be sysconf(_SC_GETGR_R_SIZE_MAX)? */#else char buf[1024]; /* Should be sysconf(_SC_GETGR_R_SIZE_MAX)? */#endif} _Xgetgrparams;#define _XGetgrgid(g,p) \ ((getgrgid_r((g), &(p).grp, (p).buf, sizeof((p).buf)) ? NULL : &(p).grp))#define _XGetgrnam(n,p) \ ((getgrnam_r((n), &(p).grp, (p).buf, sizeof((p).buf)) ? NULL : &(p).grp))#else/* POSIX final API. DEC v4.0, IRIX 6.2. * * int getgrgid_r(gid_t, struct group *, char *, size_t, struct group **); * int getgrnam_r(const char *, struct group *, char *, size_t, struct group **); */# if defined(__osf__)/* OSF/1 V4.0 <grp.h> doesn't declare the _P routines, breaking under C++. */extern int _Pgetgrgid_r(gid_t, struct group *, char *, size_t, struct group **);extern int _Pgetgrnam_r(const char *, struct group *, char *, size_t, struct group **);# endiftypedef struct { struct group grp;#ifdef LINE_MAX char buf[LINE_MAX]; /* Should be sysconf(_SC_GETGR_R_SIZE_MAX)? */#else char buf[1024]; /* Should be sysconf(_SC_GETGR_R_SIZE_MAX)? */#endif struct group *result;} _Xgetgrparams;#define _XGetgrgid(g,p) \ ((getgrgid_r((g), &(p).grp, (p).buf, sizeof((p).buf), &(p).result) ? \ NULL : (p).result))#define _XGetgrnam(n,p) \ ((getgrnam_r((n), &(p).grp, (p).buf, sizeof((p).buf), &(p).result) ? \ NULL : (p).result))#endif#if defined(X_INCLUDE_GRP_H) && !defined(_XOS_INCLUDED_GRP_H)# define _XOS_INCLUDED_GRP_H#endif#ifdef __cplusplus} /* Close scope of 'extern "C"' declaration which encloses file. */#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -