diff -cprN glibc-2.2.4.orig/sysdeps/unix/sysv/linux/Makefile glibc-2.2.4/sysdeps/unix/sysv/linux/Makefile *** glibc-2.2.4.orig/sysdeps/unix/sysv/linux/Makefile Thu Aug 16 07:55:49 2001 --- glibc-2.2.4/sysdeps/unix/sysv/linux/Makefile Thu Mar 7 11:20:05 2002 *************** ifeq ($(subdir),malloc) *** 10,15 **** --- 10,19 ---- CFLAGS-malloc.c = -DMORECORE_CLEARS=2 endif + ifeq ($(subdir),posix) + sysdep_routines += uname uname_ + endif + ifeq ($(subdir),misc) sysdep_routines += sysctl clone llseek getresuid getresgid umount umount2 diff -cprN glibc-2.2.4.orig/sysdeps/unix/sysv/linux/alpha/gethostname.c glibc-2.2.4/sysdeps/unix/sysv/linux/alpha/gethostname.c *** glibc-2.2.4.orig/sysdeps/unix/sysv/linux/alpha/gethostname.c Tue Sep 18 12:38:25 2001 --- glibc-2.2.4/sysdeps/unix/sysv/linux/alpha/gethostname.c Thu Mar 7 11:26:57 2002 *************** *** 20,50 **** #include #include #include #include #include #include - extern int __syscall_gethostname (char *name, size_t len); - - int __gethostname (char *name, size_t len) { ! int result; ! result = INLINE_SYSCALL (gethostname, 2, CHECK_N (name, len), len); ! if (result == 0 ! /* See whether the string is terminated. If not we will return ! an error. */ ! && memchr (name, '\0', len) == NULL) { ! __set_errno (EOVERFLOW); ! result = -1; } ! ! return result; } weak_alias (__gethostname, gethostname) --- 20,49 ---- #include #include #include + #include #include #include #include int __gethostname (char *name, size_t len) { ! struct utsname buf; ! size_t node_len; ! if (uname (&buf)) ! return -1; ! node_len = strlen (buf.nodename) + 1; ! memcpy (name, buf.nodename, len < node_len ? len : node_len); ! ! if (node_len > len) { ! __set_errno (ENAMETOOLONG); ! return -1; } ! return 0; } weak_alias (__gethostname, gethostname) diff -cprN glibc-2.2.4.orig/sysdeps/unix/sysv/linux/uname.c glibc-2.2.4/sysdeps/unix/sysv/linux/uname.c *** glibc-2.2.4.orig/sysdeps/unix/sysv/linux/uname.c Thu Jan 1 01:00:00 1970 --- glibc-2.2.4/sysdeps/unix/sysv/linux/uname.c Thu Mar 7 11:20:05 2002 *************** *** 0 **** --- 1,46 ---- + /* glibc-2.2/sysdeps/unix/sysv/linux/uname.c */ + + #include + #include + #include + #include + #include + + int __uname (struct utsname *buf) + { + int fd, status; + + /* In glibc for linux, uname is directly implemented by a syscall. + We initially do the syscall to get the relevent information + and then hand patch for the hostname of the virtual server. */ + status = ___uname (buf); + if (status) + return status; + + TEMP_FAILURE_RETRY (fd = open ("/etc/FQDN", O_RDONLY)); + if (fd != -1) + { + char fqdn[_UTSNAME_NODENAME_LENGTH + 128]; + int bytes; + + TEMP_FAILURE_RETRY (bytes = read (fd, fqdn, sizeof (fqdn))); + TEMP_FAILURE_RETRY (close (fd)); + if (bytes >= 0) + { + char *ptr; + fqdn[bytes - 1] = '\0'; + for (ptr = fqdn; + *ptr != ' ' && *ptr != '\t' && *ptr != '\0'; + ptr++) + ; + *ptr = '\0'; + bytes = ptr - fqdn; + memcpy (buf->nodename, fqdn, _UTSNAME_NODENAME_LENGTH); + return 0; + } + } + + return 0; + } + weak_alias (__uname, uname) + diff -cprN glibc-2.2.4.orig/sysdeps/unix/sysv/linux/uname_.S glibc-2.2.4/sysdeps/unix/sysv/linux/uname_.S *** glibc-2.2.4.orig/sysdeps/unix/sysv/linux/uname_.S Thu Jan 1 01:00:00 1970 --- glibc-2.2.4/sysdeps/unix/sysv/linux/uname_.S Thu Mar 7 11:20:05 2002 *************** *** 0 **** --- 1,6 ---- + /* glibc-2.2/sysdeps/unix/sysv/linux/uname_.S. */ + #include + PSEUDO (___uname, uname, 1) + ret + PSEUDO_END (___uname) +