summaryrefslogtreecommitdiff
path: root/src/polyp
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2006-05-25 17:16:55 +0000
committerLennart Poettering <lennart@poettering.net>2006-05-25 17:16:55 +0000
commit4413b89d7a45587b545a31463ad2196767f45563 (patch)
tree9ee88c2132a6940c1bc24c1e1cb0754f69337f6b /src/polyp
parentf8aa55c5ac1f21fec9e1a5f0351328fb33366f2a (diff)
downloadpulseaudio-4413b89d7a45587b545a31463ad2196767f45563.tar.gz
* split pa_cstrerror() into its own file polypcore/core-error.[ch]
* fix building of padsp * remove a warning when compiling padsp.c git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@972 fefdeb5f-60dc-0310-8127-8f9354f1896f
Diffstat (limited to 'src/polyp')
-rw-r--r--src/polyp/client-conf.c2
-rw-r--r--src/polyp/context.c2
-rw-r--r--src/polyp/error.c214
-rw-r--r--src/polyp/error.h6
-rw-r--r--src/polyp/mainloop-signal.c2
-rw-r--r--src/polyp/mainloop.c2
-rw-r--r--src/polyp/util.c3
7 files changed, 28 insertions, 203 deletions
diff --git a/src/polyp/client-conf.c b/src/polyp/client-conf.c
index 0b3154c84..e1934ce14 100644
--- a/src/polyp/client-conf.c
+++ b/src/polyp/client-conf.c
@@ -29,7 +29,7 @@
#include <errno.h>
#include <string.h>
-#include <polyp/error.h>
+#include <polypcore/core-error.h>
#include <polyp/xmalloc.h>
#include <polypcore/log.h>
diff --git a/src/polyp/context.c b/src/polyp/context.c
index eb5638197..68fb4bf3e 100644
--- a/src/polyp/context.c
+++ b/src/polyp/context.c
@@ -47,7 +47,7 @@
#include "../polypcore/winsock.h"
-#include <polyp/error.h>
+#include <polypcore/core-error.h>
#include <polyp/version.h>
#include <polyp/xmalloc.h>
diff --git a/src/polyp/error.c b/src/polyp/error.c
index 0e3b506f1..27da7eae9 100644
--- a/src/polyp/error.c
+++ b/src/polyp/error.c
@@ -28,15 +28,6 @@
#include <stdlib.h>
#include <string.h>
-#ifdef HAVE_PTHREAD
-#include <pthread.h>
-#endif
-
-#ifdef HAVE_WINDOWS_H
-#include <windows.h>
-#endif
-
-#include <polyp/utf8.h>
#include <polyp/xmalloc.h>
#include <polypcore/core-util.h>
@@ -44,191 +35,32 @@
#include "error.h"
-static const char* const errortab[PA_ERR_MAX] = {
- [PA_OK] = "OK",
- [PA_ERR_ACCESS] = "Access denied",
- [PA_ERR_COMMAND] = "Unknown command",
- [PA_ERR_INVALID] = "Invalid argument",
- [PA_ERR_EXIST] = "Entity exists",
- [PA_ERR_NOENTITY] = "No such entity",
- [PA_ERR_CONNECTIONREFUSED] = "Connection refused",
- [PA_ERR_PROTOCOL] = "Protocol error",
- [PA_ERR_TIMEOUT] = "Timeout",
- [PA_ERR_AUTHKEY] = "No authorization key",
- [PA_ERR_INTERNAL] = "Internal error",
- [PA_ERR_CONNECTIONTERMINATED] = "Connection terminated",
- [PA_ERR_KILLED] = "Entity killed",
- [PA_ERR_INVALIDSERVER] = "Invalid server",
- [PA_ERR_MODINITFAILED] = "Module initalization failed",
- [PA_ERR_BADSTATE] = "Bad state",
- [PA_ERR_NODATA] = "No data",
- [PA_ERR_VERSION] = "Incompatible protocol version",
- [PA_ERR_TOOLARGE] = "Too large"
-};
-
const char*pa_strerror(int error) {
+
+ static const char* const errortab[PA_ERR_MAX] = {
+ [PA_OK] = "OK",
+ [PA_ERR_ACCESS] = "Access denied",
+ [PA_ERR_COMMAND] = "Unknown command",
+ [PA_ERR_INVALID] = "Invalid argument",
+ [PA_ERR_EXIST] = "Entity exists",
+ [PA_ERR_NOENTITY] = "No such entity",
+ [PA_ERR_CONNECTIONREFUSED] = "Connection refused",
+ [PA_ERR_PROTOCOL] = "Protocol error",
+ [PA_ERR_TIMEOUT] = "Timeout",
+ [PA_ERR_AUTHKEY] = "No authorization key",
+ [PA_ERR_INTERNAL] = "Internal error",
+ [PA_ERR_CONNECTIONTERMINATED] = "Connection terminated",
+ [PA_ERR_KILLED] = "Entity killed",
+ [PA_ERR_INVALIDSERVER] = "Invalid server",
+ [PA_ERR_MODINITFAILED] = "Module initalization failed",
+ [PA_ERR_BADSTATE] = "Bad state",
+ [PA_ERR_NODATA] = "No data",
+ [PA_ERR_VERSION] = "Incompatible protocol version",
+ [PA_ERR_TOOLARGE] = "Too large"
+ };
+
if (error < 0 || error >= PA_ERR_MAX)
return NULL;
return errortab[error];
}
-
-#ifdef HAVE_PTHREAD
-
-static pthread_once_t cstrerror_once = PTHREAD_ONCE_INIT;
-static pthread_key_t tlsstr_key;
-
-static void inittls(void) {
- int ret;
-
- ret = pthread_key_create(&tlsstr_key, pa_xfree);
- if (ret) {
- fprintf(stderr, __FILE__ ": CRITICAL: Unable to allocate TLS key (%d)\n", errno);
- exit(-1);
- }
-}
-
-#elif HAVE_WINDOWS_H
-
-static DWORD tlsstr_key = TLS_OUT_OF_INDEXES;
-static DWORD monitor_key = TLS_OUT_OF_INDEXES;
-
-static void inittls(void) {
- HANDLE mutex;
- char name[64];
-
- sprintf(name, "polypaudio%d", (int)GetCurrentProcessId());
-
- mutex = CreateMutex(NULL, FALSE, name);
- if (!mutex) {
- fprintf(stderr, __FILE__ ": CRITICAL: Unable to create named mutex (%d)\n", (int)GetLastError());
- exit(-1);
- }
-
- WaitForSingleObject(mutex, INFINITE);
-
- if (tlsstr_key == TLS_OUT_OF_INDEXES) {
- tlsstr_key = TlsAlloc();
- monitor_key = TlsAlloc();
- if ((tlsstr_key == TLS_OUT_OF_INDEXES) || (monitor_key == TLS_OUT_OF_INDEXES)) {
- fprintf(stderr, __FILE__ ": CRITICAL: Unable to allocate TLS key (%d)\n", (int)GetLastError());
- exit(-1);
- }
- }
-
- ReleaseMutex(mutex);
-
- CloseHandle(mutex);
-}
-
-/*
- * This is incredibly brain dead, but this is necessary when dealing with
- * the hell that is Win32.
- */
-struct monitor_data {
- HANDLE thread;
- void *data;
-};
-
-static DWORD WINAPI monitor_thread(LPVOID param) {
- struct monitor_data *data;
-
- data = (struct monitor_data*)param;
- assert(data);
-
- WaitForSingleObject(data->thread, INFINITE);
-
- CloseHandle(data->thread);
- pa_xfree(data->data);
- pa_xfree(data);
-
- return 0;
-}
-
-static void start_monitor(void) {
- HANDLE thread;
- struct monitor_data *data;
-
- data = pa_xnew(struct monitor_data, 1);
- assert(data);
-
- DuplicateHandle(GetCurrentProcess(), GetCurrentThread(),
- GetCurrentProcess(), &data->thread, 0, FALSE, DUPLICATE_SAME_ACCESS);
-
- thread = CreateThread(NULL, 0, monitor_thread, data, 0, NULL);
- assert(thread);
-
- TlsSetValue(monitor_key, data);
-
- CloseHandle(thread);
-}
-
-#else
-
-/* Unsafe, but we have no choice */
-static char *tlsstr;
-
-#endif
-
-const char* pa_cstrerror(int errnum) {
- const char *origbuf;
-
-#ifdef HAVE_STRERROR_R
- char errbuf[128];
-#endif
-
-#ifdef HAVE_PTHREAD
- char *tlsstr;
-
- pthread_once(&cstrerror_once, inittls);
-
- tlsstr = pthread_getspecific(tlsstr_key);
-#elif defined(HAVE_WINDOWS_H)
- char *tlsstr;
- struct monitor_data *data;
-
- inittls();
-
- tlsstr = TlsGetValue(tlsstr_key);
- if (!tlsstr)
- start_monitor();
- data = TlsGetValue(monitor_key);
-#endif
-
- if (tlsstr)
- pa_xfree(tlsstr);
-
-#ifdef HAVE_STRERROR_R
-
-#ifdef __GLIBC__
- origbuf = strerror_r(errnum, errbuf, sizeof(errbuf));
- if (origbuf == NULL)
- origbuf = "";
-#else
- if (strerror_r(errnum, errbuf, sizeof(errbuf)) == 0) {
- origbuf = errbuf;
- errbuf[sizeof(errbuf) - 1] = '\0';
- } else
- origbuf = "";
-#endif
-
-#else
- /* This might not be thread safe, but we hope for the best */
- origbuf = strerror(errnum);
-#endif
-
- tlsstr = pa_locale_to_utf8(origbuf);
- if (!tlsstr) {
- fprintf(stderr, "Unable to convert, filtering\n");
- tlsstr = pa_utf8_filter(origbuf);
- }
-
-#ifdef HAVE_PTHREAD
- pthread_setspecific(tlsstr_key, tlsstr);
-#elif defined(HAVE_WINDOWS_H)
- TlsSetValue(tlsstr_key, tlsstr);
- data->data = tlsstr;
-#endif
-
- return tlsstr;
-}
diff --git a/src/polyp/error.h b/src/polyp/error.h
index 1d7b2ca64..9856c1af3 100644
--- a/src/polyp/error.h
+++ b/src/polyp/error.h
@@ -33,12 +33,6 @@ PA_C_DECL_BEGIN
/** Return a human readable error message for the specified numeric error code */
const char* pa_strerror(int error);
-/** A wrapper around the standard strerror() function that converts the
- * string to UTF-8. The function is thread safe but the returned string is
- * only guaranteed to exist until the thread exits or pa_cstrerror() is
- * called again from the same thread. */
-const char* pa_cstrerror(int errnum);
-
PA_C_DECL_END
#endif
diff --git a/src/polyp/mainloop-signal.c b/src/polyp/mainloop-signal.c
index c6ad431a1..927028143 100644
--- a/src/polyp/mainloop-signal.c
+++ b/src/polyp/mainloop-signal.c
@@ -36,7 +36,7 @@
#include <windows.h>
#endif
-#include <polyp/error.h>
+#include <polypcore/core-error.h>
#include <polyp/xmalloc.h>
#include <polypcore/core-util.h>
diff --git a/src/polyp/mainloop.c b/src/polyp/mainloop.c
index 6088fa4b3..61d8b4881 100644
--- a/src/polyp/mainloop.c
+++ b/src/polyp/mainloop.c
@@ -44,7 +44,7 @@
#include "../polypcore/pipe.h"
#endif
-#include <polyp/error.h>
+#include <polypcore/core-error.h>
#include <polyp/timeval.h>
#include <polyp/xmalloc.h>
diff --git a/src/polyp/util.c b/src/polyp/util.c
index 910544834..842b9e7f8 100644
--- a/src/polyp/util.c
+++ b/src/polyp/util.c
@@ -51,8 +51,7 @@
#include "../polypcore/winsock.h"
-#include <polyp/error.h>
-
+#include <polypcore/core-error.h>
#include <polypcore/log.h>
#include <polypcore/core-util.h>