+1999-07-09 Cristian Gafton <gafton@redhat.com>
+
+ * nscd/nscd_gethst_r.c (nscd_gethst_r): Make sure
+ resultbuf->h_addr_list addresses are correctly aligned.
+
1999-07-09 Ulrich Drepper <drepper@cygnus.com>
+ * sysdeps/i386/bits/string.h (__memcpy_c): Help some stupid old
+ compilers.
+ (__memset_cc): Likewise.
+
* sysdeps/generic/libc-start.c: For SUID binaries check whether
the standard file descriptors are open.
Reported by Chris Evans <chris@ferret.lmh.ox.ac.uk>.
GLIBC_2.0
GLIBC_2.1 GLIBC_2.0
GLIBC_2.1.1 GLIBC_2.1
+ GLIBC_2.1.2 GLIBC_2.1.1
}
libresolv {
GLIBC_2.0
# p*
putgrent;
}
+ GLIBC_2.1.2 {
+ # g*
+ getgrent_r; getgrgid_r; getgrnam_r;
+ }
}
# i*
if_freenameindex; if_indextoname; if_nameindex; if_nametoindex;
}
+ GLIBC_2.1.2 {
+ # g*
+ getaliasbyname_r; getaliasent_r; gethostbyaddr_r; gethostbyname2_r;
+ gethostbyname_r; gethostent_r; getnetbyaddr_r; getnetbyname_r;
+ getnetent_r; getnetgrent_r; getprotobyname_r; getprotobynumber_r;
+ getprotoent_r; getrpcbyname_r; getrpcbynumber_r; getrpcent_r;
+ getservbyname_r;
+ }
}
+1999-07-09 Cristian Gafton <gafton@redhat.com>
+
+ * Makefile (libpthread-routines): Add oldsemaphore routine.
+ * Versions: Add sem_destroy; sem_getvalue; sem_init; sem_post;
+ sem_trywait; sem_wait; to GLIBC_2.1.
+ * oldsemaphore.c: New file.
+ * semaphore.c: Add default_symbol_versions for the changed functions.
+ (__new_sem_init): Rename from sem_init.
+ (__new_sem_post): Rename from sem_post.
+ (__new_sem_wait): Rename from sem_wait.
+ (__new_sem_trywait): Rename from sem_trywait.
+ (__new_sem_getvalue): Rename from sem_getvalue.
+ (__new_sem_destroy): Rename from sem_destroy.
+
1999-06-23 Robey Pointer <robey@netscape.com>
* internals.h: Added p_nextlock entry to separate queueing for a
libpthread-routines := attr cancel condvar join manager mutex ptfork \
ptlongjmp pthread signals specific errno lockfile \
- semaphore spinlock wrapsyscall rwlock pt-machine
+ semaphore spinlock wrapsyscall rwlock pt-machine \
+ oldsemaphore
vpath %.c Examples
tests = ex1 ex2 ex3 ex4 ex5 ex6
pthread_mutexattr_gettype; pthread_mutexattr_settype;
+ sem_destroy; sem_getvalue; sem_init; sem_post; sem_trywait; sem_wait;
+
# helper functions
__libc_current_sigrtmin; __libc_current_sigrtmax;
__libc_allocate_rtsig;
#include "restart.h"
#include "queue.h"
-int sem_init(sem_t *sem, int pshared, unsigned int value)
+int __new_sem_init(sem_t *sem, int pshared, unsigned int value)
{
if (value > SEM_VALUE_MAX) {
errno = EINVAL;
return 0;
}
-int sem_wait(sem_t * sem)
+int __new_sem_wait(sem_t * sem)
{
volatile pthread_descr self = thread_self();
return 0;
}
-int sem_trywait(sem_t * sem)
+int __new_sem_trywait(sem_t * sem)
{
int retval;
return retval;
}
-int sem_post(sem_t * sem)
+int __new_sem_post(sem_t * sem)
{
pthread_descr self = thread_self();
pthread_descr th;
return 0;
}
-int sem_getvalue(sem_t * sem, int * sval)
+int __new_sem_getvalue(sem_t * sem, int * sval)
{
*sval = sem->__sem_value;
return 0;
}
-int sem_destroy(sem_t * sem)
+int __new_sem_destroy(sem_t * sem)
{
if (sem->__sem_waiting != NULL) {
__set_errno (EBUSY);
__set_errno (ENOSYS);
return -1;
}
+
+#if defined PIC && DO_VERSIONING
+default_symbol_version (__new_sem_init, sem_init, GLIBC_2.1);
+default_symbol_version (__new_sem_wait, sem_wait, GLIBC_2.1);
+default_symbol_version (__new_sem_trywait, sem_trywait, GLIBC_2.1);
+default_symbol_version (__new_sem_post, sem_post, GLIBC_2.1);
+default_symbol_version (__new_sem_getvalue, sem_getvalue, GLIBC_2.1);
+default_symbol_version (__new_sem_destroy, sem_destroy, GLIBC_2.1);
+#else
+# ifdef weak_alias
+weak_alias (__new_sem_init, sem_init)
+weak_alias (__new_sem_wait, sem_wait)
+weak_alias (__new_sem_trywait, sem_trywait)
+weak_alias (__new_sem_post, sem_post)
+weak_alias (__new_sem_getvalue, sem_getvalue)
+weak_alias (__new_sem_destroy, sem_destroy)
+# endif
+#endif
+
+ hst_resp.h_aliases_cnt * sizeof (size_t));
n = 2;
+
+ /* These things must be aligned or ntohl will cause havoc. */
+ align = ((__alignof__ (char *) - (cp - ((char *) 0)))
+ & (__alignof__ (char *) - 1));
+ cp += align;
+
if (type == GETHOSTBYADDR || type == GETHOSTBYNAME)
{
vec[2].iov_base = cp;
return status == NSS_STATUS_SUCCESS ? 0 : errno;
}
+#if defined SHARED && DO_VERSIONING
+#define OLD(name) OLD1 (name)
+#define OLD1(name) __old_##name
+
+int
+OLD (REENTRANT_NAME) (ADD_PARAMS, LOOKUP_TYPE *resbuf, char *buffer,
+ size_t buflen, LOOKUP_TYPE **result H_ERRNO_PARM)
+{
+ int ret = INTERNAL (REENTRANT_NAME) (ADD_VARIABLES, resbuf, buffer,
+ buflen, result H_ERRNO_VAR);
+
+ if (ret != 0)
+ ret = -1;
+
+ return ret;
+}
+
+#define do_symbol_version(real, name, version) \
+ symbol_version(real, name, version)
+do_symbol_version(OLD (REENTRANT_NAME), REENTRANT_NAME, GLIBC_2.0);
+
+#define do_default_symbol_version(real, name, version) \
+ default_symbol_version(real, name, version)
+do_default_symbol_version(INTERNAL (REENTRANT_NAME), REENTRANT_NAME,
+ GLIBC_2.1.2);
+#else
#define do_weak_alias(n1, n2) weak_alias (n1, (n2))
do_weak_alias (INTERNAL (REENTRANT_NAME), REENTRANT_NAME)
+#endif
*result = status == NSS_STATUS_SUCCESS ? resbuf : NULL;
return status == NSS_STATUS_SUCCESS ? 0 : errno;
}
+#if defined SHARED && DO_VERSIONING
+#define OLD(name) OLD1 (name)
+#define OLD1(name) __old_##name
+
+int
+OLD (REENTRANT_GETNAME) (LOOKUP_TYPE *resbuf, char *buffer, size_t buflen,
+ LOOKUP_TYPE **result H_ERRNO_PARM)
+{
+ int ret = INTERNAL (REENTRANT_GETNAME) (resbuf, buffer, buflen,
+ result H_ERRNO_VAR);
+
+ if (ret != 0)
+ ret = -1;
+
+ return ret;
+}
+
+#define do_symbol_version(real, name, version) \
+ symbol_version(real, name, version)
+do_symbol_version(OLD (REENTRANT_GETNAME), REENTRANT_GETNAME,
+ GLIBC_2.0);
+
+#define do_default_symbol_version(real, name, version) \
+ default_symbol_version(real, name, version)
+do_default_symbol_version(INTERNAL (REENTRANT_GETNAME),
+ REENTRANT_GETNAME, GLIBC_2.1.2);
+#else
#define do_weak_alias(n1, n2) weak_alias (n1, n2)
do_weak_alias (INTERNAL (REENTRANT_GETNAME), REENTRANT_GETNAME)
+#endif
# p*
putpwent; setpwent;
}
+ GLIBC_2.1.2 {
+ # g*
+ getpwent_r; getpwuid_r;
+ }
}
# u*
ulckpwdf;
}
+ GLIBC_2.1.2 {
+ # g*
+ getspent_r; getspnam_r;
+ }
}
{
case 0:
__COMMON_CODE ("");
- return __dest;
+ break;
case 1:
__COMMON_CODE ("\n\tmovsb");
- return __dest;
+ break;
case 2:
__COMMON_CODE ("\n\tmovsw");
- return __dest;
+ break;
case 3:
__COMMON_CODE ("\n\tmovsw\n\tmovsb");
- return __dest;
- }
+ break;
+ }
+ return __dest;
#undef __COMMON_CODE
}
{
case 0:
__COMMON_CODE ("");
- return __s;
+ break;
case 1:
__COMMON_CODE ("\n\tstosb");
- return __s;
+ break;
case 2:
__COMMON_CODE ("\n\tstosw");
- return __s;
+ break;
case 3:
__COMMON_CODE ("\n\tstosw\n\tstosb");
- return __s;
+ break;
}
+ return __s;
#undef __COMMON_CODE
}