diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | linuxthreads/specific.c | 33 | ||||
-rw-r--r-- | sysdeps/posix/cuserid.c | 4 |
3 files changed, 25 insertions, 17 deletions
diff --git a/ChangeLog b/ChangeLog index 9541804292..95e10239af 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2001-12-13 Thorsten Kukuk <kukuk@suse.de> + + * sysdeps/posix/cuserid.c (cuserid): If we don't find the UID, + but have a user supplied buffer, return the empty buffer, not NULL. + 2001-12-13 Ulrich Drepper <drepper@redhat.com> * crypt/md5.c (md5_process_bytes): Correct handling of alignment. diff --git a/linuxthreads/specific.c b/linuxthreads/specific.c index 1a0cab10b6..2dbf2055e5 100644 --- a/linuxthreads/specific.c +++ b/linuxthreads/specific.c @@ -102,25 +102,28 @@ int pthread_key_delete(pthread_key_t key) /* Set the value of the key to NULL in all running threads, so that if the key is reallocated later by pthread_key_create, its - associated values will be NULL in all threads. */ + associated values will be NULL in all threads. - { - struct pthread_key_delete_helper_args args; - struct pthread_request request; + Do nothing if no threads have been created yet. */ - args.idx1st = key / PTHREAD_KEY_2NDLEVEL_SIZE; - args.idx2nd = key % PTHREAD_KEY_2NDLEVEL_SIZE; - args.self = 0; + if (__pthread_manager_request != -1) + { + struct pthread_key_delete_helper_args args; + struct pthread_request request; - request.req_thread = self; - request.req_kind = REQ_FOR_EACH_THREAD; - request.req_args.for_each.arg = &args; - request.req_args.for_each.fn = pthread_key_delete_helper; + args.idx1st = key / PTHREAD_KEY_2NDLEVEL_SIZE; + args.idx2nd = key % PTHREAD_KEY_2NDLEVEL_SIZE; + args.self = 0; - TEMP_FAILURE_RETRY(__libc_write(__pthread_manager_request, - (char *) &request, sizeof(request))); - suspend(self); - } + request.req_thread = self; + request.req_kind = REQ_FOR_EACH_THREAD; + request.req_args.for_each.arg = &args; + request.req_args.for_each.fn = pthread_key_delete_helper; + + TEMP_FAILURE_RETRY(__libc_write(__pthread_manager_request, + (char *) &request, sizeof(request))); + suspend(self); + } pthread_mutex_unlock(&pthread_keys_mutex); return 0; diff --git a/sysdeps/posix/cuserid.c b/sysdeps/posix/cuserid.c index 3417d0a695..11c827a686 100644 --- a/sysdeps/posix/cuserid.c +++ b/sysdeps/posix/cuserid.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1996, 1998, 1999 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1996, 1998, 1999, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -39,7 +39,7 @@ cuserid (s) { if (s != NULL) s[0] = '\0'; - return NULL; + return s; } if (s == NULL) |