diff options
author | Ulrich Drepper <drepper@redhat.com> | 2006-04-09 05:51:26 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2006-04-09 05:51:26 +0000 |
commit | 279d494b1d089d085b44f2de6c62a0752001b074 (patch) | |
tree | 660bb0f412f10f88a145af3821414de3849e372f /inet | |
parent | ab9a9ff8a1db6e91ce2461069c709e68bd82d8eb (diff) | |
download | glibc-279d494b1d089d085b44f2de6c62a0752001b074.zip glibc-279d494b1d089d085b44f2de6c62a0752001b074.tar.gz glibc-279d494b1d089d085b44f2de6c62a0752001b074.tar.bz2 |
* inet/inet_ntoa.c: Rewrite to use TLS instead of TSD.
Diffstat (limited to 'inet')
-rw-r--r-- | inet/inet_ntoa.c | 69 |
1 files changed, 5 insertions, 64 deletions
diff --git a/inet/inet_ntoa.c b/inet/inet_ntoa.c index 889435d..3879495 100644 --- a/inet/inet_ntoa.c +++ b/inet/inet_ntoa.c @@ -21,78 +21,19 @@ #include <stdio.h> #include <stdlib.h> #include <arpa/inet.h> -#include <bits/libc-lock.h> /* The interface of this function is completely stupid, it requires a - static buffer. We relax this a bit in that we allow at least one - buffer for each thread. */ - -/* This is the key for the thread specific memory. */ -static __libc_key_t key; - -/* If nonzero the key allocation failed and we should better use a - static buffer than fail. */ -static char local_buf[18]; -static char *static_buf; - -/* Destructor for the thread-specific data. */ -static void init (void); -static void free_key_mem (void *mem); + static buffer. We relax this a bit in that we allow one buffer for + each thread. */ +static __thread char buffer[18]; char * inet_ntoa (struct in_addr in) { - __libc_once_define (static, once); - char *buffer; - unsigned char *bytes; - - /* If we have not yet initialized the buffer do it now. */ - __libc_once (once, init); - - if (static_buf != NULL) - buffer = static_buf; - else - { - /* We don't use the static buffer and so we have a key. Use it - to get the thread-specific buffer. */ - buffer = __libc_getspecific (key); - if (buffer == NULL) - { - /* No buffer allocated so far. */ - buffer = malloc (18); - if (buffer == NULL) - /* No more memory available. We use the static buffer. */ - buffer = local_buf; - else - __libc_setspecific (key, buffer); - } - } - - bytes = (unsigned char *) ∈ - __snprintf (buffer, 18, "%d.%d.%d.%d", + unsigned char *bytes = (unsigned char *) ∈ + __snprintf (buffer, sizeof (buffer), "%d.%d.%d.%d", bytes[0], bytes[1], bytes[2], bytes[3]); return buffer; } - - -/* Initialize buffer. */ -static void -init (void) -{ - if (__libc_key_create (&key, free_key_mem)) - /* Creating the key failed. This means something really went - wrong. In any case use a static buffer which is better than - nothing. */ - static_buf = local_buf; -} - - -/* Free the thread specific data, this is done if a thread terminates. */ -static void -free_key_mem (void *mem) -{ - free (mem); - __libc_setspecific (key, NULL); -} |