00001
00002
00003
00004
00005
00013 #if HAVE_CONFIG_H
00014 #include <config.h>
00015 #endif
00016
00017 #ifndef _REENTRANT
00018 #define _REENTRANT
00019 #endif
00020
00021 #include <stdlib.h>
00022 #include <string.h>
00023 #include <errno.h>
00024 #include <stddef.h>
00025 #include <yaz/errno.h>
00026
00027 #ifdef WIN32
00028 #include <windows.h>
00029 #endif
00030
00031 int yaz_errno(void)
00032 {
00033 return errno;
00034 }
00035
00036 void yaz_set_errno(int v)
00037 {
00038 errno = v;
00039 }
00040
00041 void yaz_strerror(char *buf, size_t bufsz)
00042 {
00043 #ifdef WIN32
00044 DWORD err;
00045 #endif
00046 char *cp;
00047 #ifdef WIN32
00048 err = GetLastError();
00049 if (err)
00050 {
00051 FormatMessage(
00052 FORMAT_MESSAGE_FROM_SYSTEM,
00053 NULL,
00054 err,
00055 MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
00056 (LPTSTR) buf,
00057 bufsz-1,
00058 NULL);
00059 }
00060 else
00061 *buf = '\0';
00062 #else
00063
00064 #if HAVE_STRERROR_R
00065 *buf = '\0';
00066 strerror_r(errno, buf, bufsz);
00067
00068 if (*buf == '\0')
00069 strcpy(buf, strerror(yaz_errno()));
00070 #else
00071 strcpy(buf, strerror(yaz_errno()));
00072 #endif
00073
00074 #endif
00075 if ((cp = strrchr(buf, '\n')))
00076 *cp = '\0';
00077 if ((cp = strrchr(buf, '\r')))
00078 *cp = '\0';
00079 }
00080
00081
00082
00083
00084
00085
00086
00087
00088