X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=util%2Fnmem.c;h=b546b8fa95051f569f4f8bb77104b8d432acd7a6;hb=4b3d1e197d75fcb2607be8d86d244f20c4180000;hp=15fe281478f3e7bd430ae9ebf60f7ab4386d3a68;hpb=5acca4fa9c5841f48e8ef1b6ac7599dccde69b65;p=yaz-moved-to-github.git diff --git a/util/nmem.c b/util/nmem.c index 15fe281..b546b8f 100644 --- a/util/nmem.c +++ b/util/nmem.c @@ -1,9 +1,9 @@ /* - * Copyright (c) 1995-2002, Index Data. + * Copyright (c) 1995-2003, Index Data. * See the file LICENSE for details. * Sebastian Hammer, Adam Dickmeiss * - * $Id: nmem.c,v 1.36 2002-09-10 18:41:18 adam Exp $ + * $Id: nmem.c,v 1.41 2003-02-22 00:08:44 adam Exp $ */ /* @@ -435,3 +435,49 @@ int yaz_errno(void) { return errno; } + +void yaz_set_errno(int v) +{ + errno = v; +} + +void yaz_strerror(char *buf, int max) +{ + char *cp; +#ifdef WIN32 + DWORD err = GetLastError(); + if (err) + { + FormatMessage( + FORMAT_MESSAGE_FROM_SYSTEM, + NULL, + err, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language + (LPTSTR) buf, + max-1, + NULL); + } + else + *buf = '\0'; +#else +/* UNIX */ +#if HAVE_STRERROR_R +#if YAZ_POSIX_THREADS + *buf = '\0'; + strerror_r(errno, buf, max); + /* if buffer is unset - use strerror anyway (GLIBC bug) */ + if (*buf == '\0') + strcpy(buf, strerror(yaz_errno())); +#else + strcpy(buf, strerror(yaz_errno())); +#endif +#else + strcpy(buf, strerror(yaz_errno())); +#endif +/* UNIX */ +#endif + if ((cp=strrchr(buf, '\n'))) + *cp = '\0'; + if ((cp=strrchr(buf, '\r'))) + *cp = '\0'; +}