mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-10-30 10:45:40 +03:00 
			
		
		
		
	* sysdeps/unix/sysv/linux/powerpc/ftruncate64.c: Likewise. * sysdeps/unix/sysv/linux/powerpc/ioctl.c: Likewise. * sysdeps/unix/sysv/linux/powerpc/pread.c: Likewise. * sysdeps/unix/sysv/linux/powerpc/pread64.c: Likewise. * sysdeps/unix/sysv/linux/powerpc/pwrite.c: Likewise. * sysdeps/unix/sysv/linux/powerpc/pwrite64.c: Likewise. * sysdeps/unix/sysv/linux/powerpc/tcgetattr.c: Likewise. * sysdeps/unix/sysv/linux/powerpc/tcsetattr.c: Likewise. * sysdeps/unix/sysv/linux/powerpc/truncate64.c: Likewise. * sysdeps/unix/sysv/linux/powerpc/powerpc32/syscalls.list (s_ioctl, s_chown, s_ftruncate64, s_mmap2, s_pread64, s_pwrite64, s_truncate64, sys_fstat, sys_lstat, sys_mknod, sys_readv, sys_stat, sys_writev): Remove these, no longer used. 2002-11-04 Franz Sirl <Franz.Sirl-kernel@lauterbach.com> * sysdeps/unix/sysv/linux/powerpc/powerpc32/syscalls.list (s_ipc, s_llseek, s_readahead, s_execve, s_fcntl, s_fcntl64, s_fstat64, s_getcwd, s_getdents, s_getdents64, s_getpmsg, s_getpriority, s_getrlimit, s_lstat64, s_poll, s_ptrace, s_putpmsg, s_reboot, s_setrlimit, s_sigaction, s_sigpending, s_sigprocmask, s_sigsuspend, s_stat64, s_sysctl, s_ugetrlimit, s_ustat, s_vfork): Remove now unused syscall stubs. * sysdeps/unix/sysv/linux/pwrite.c: Fix typo. * sysdeps/unix/sysv/linux/pwrite64.c: Likewise. * sysdeps/unix/sysv/linux/powerpc/pread.c: Handle both __NR_pread64 and __NR_pread. * sysdeps/unix/sysv/linux/powerpc/pread64.c: Likewise. * sysdeps/unix/sysv/linux/powerpc/pwrite.c: Handle both __NR_pwrite64 and __NR_pwrite. * sysdeps/unix/sysv/linux/powerpc/pwrite64.c: Likewise. 2002-11-03 Roland McGrath <roland@redhat.com> * sysdeps/generic/ldsodefs.h (struct rtld_global): New member `_dl_tls_static_used'. * sysdeps/generic/libc-tls.c (_dl_tls_static_used): New variable. (__libc_setup_tls): Initialize it. Let the initial value of _dl_tls_static_size indicate some surplus space in the computed value. * elf/dl-open.c (_dl_tls_static_size): New variable. * sysdeps/generic/dl-tls.c (_dl_determine_tlsoffset): Initialize _dl_tls_static_used. Add some surplus space into _dl_tls_static_size. * elf/dl-reloc.c [USE_TLS] (allocate_static_tls): New function. (CHECK_STATIC_TLS): Use it. * elf/dl-close.c (_dl_close): Adjust _dl_tls_static_used when the closed objects occupied a trailing contiguous chunk of static TLS area. 2002-10-18 Bruno Haible <bruno@clisp.org> * charmaps/ISO_5428: Use Greek characters introduced in Unicode 3.0.
		
			
				
	
	
		
			130 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			130 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* chown() compatibility.
 | |
|    Copyright (C) 1998, 2000, 2002 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
 | |
|    modify it under the terms of the GNU Lesser General Public
 | |
|    License as published by the Free Software Foundation; either
 | |
|    version 2.1 of the License, or (at your option) any later version.
 | |
| 
 | |
|    The GNU C Library is distributed in the hope that it will be useful,
 | |
|    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | |
|    Lesser General Public License for more details.
 | |
| 
 | |
|    You should have received a copy of the GNU Lesser General Public
 | |
|    License along with the GNU C Library; if not, write to the Free
 | |
|    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
 | |
|    02111-1307 USA.  */
 | |
| 
 | |
| #include <errno.h>
 | |
| #include <string.h>
 | |
| #include <unistd.h>
 | |
| #include <limits.h>
 | |
| #include <sysdep.h>
 | |
| #include <stdlib.h>
 | |
| 
 | |
| /*
 | |
|   In Linux 2.1.x the chown functions have been changed.  A new function lchown
 | |
|   was introduced.  The new chown now follows symlinks - the old chown and the
 | |
|   new lchown do not follow symlinks.
 | |
|   This file emulates chown() under the old kernels.
 | |
| */
 | |
| 
 | |
| extern int __syscall_chown (const char *__file __unbounded,
 | |
| 			    uid_t __owner, gid_t __group);
 | |
| 
 | |
| int
 | |
| __chown (const char *file, uid_t owner, gid_t group)
 | |
| {
 | |
|    int err;
 | |
|    int old_errno;
 | |
|    char link[PATH_MAX+2];
 | |
|    char path[2*PATH_MAX+4];
 | |
|    int loopct;
 | |
|    int filelen;
 | |
|    static int libc_old_chown = 0 /* -1=old linux, 1=new linux, 0=unknown */;
 | |
| 
 | |
|    if (libc_old_chown == 1)
 | |
|      return INLINE_SYSCALL (chown, 3, __ptrvalue (file), owner, group);
 | |
| 
 | |
|    old_errno = errno;
 | |
| 
 | |
| #ifdef __NR_lchown
 | |
|    if (libc_old_chown == 0)
 | |
|      {
 | |
|        err = INLINE_SYSCALL (chown, 3, __ptrvalue (file), owner, group);
 | |
|        if (err != -1 || errno != ENOSYS)
 | |
| 	 {
 | |
| 	   libc_old_chown = 1;
 | |
| 	   return err;
 | |
| 	 }
 | |
|        libc_old_chown = -1;
 | |
|      }
 | |
| #endif
 | |
| 
 | |
|    err = __readlink (file, link, PATH_MAX+1);
 | |
|    if (err == -1)
 | |
|      {
 | |
|        errno = old_errno;
 | |
|        return __lchown(file, owner, group);
 | |
|      }
 | |
| 
 | |
|    filelen = strlen (file) + 1;
 | |
|    if (filelen > sizeof(path))
 | |
|      {
 | |
|        errno = ENAMETOOLONG;
 | |
|        return -1;
 | |
|      }
 | |
|    memcpy (path, file, filelen);
 | |
| 
 | |
|    /* 'The system has an arbitrary limit...'  In practise, we'll hit
 | |
|       ENAMETOOLONG before this, usually.  */
 | |
|    for (loopct = 0; loopct < 128; loopct++)
 | |
|    {
 | |
|      int linklen;
 | |
| 
 | |
|      if (err >= PATH_MAX+1)
 | |
|        {
 | |
| 	 errno = ENAMETOOLONG;
 | |
| 	 return -1;
 | |
|        }
 | |
| 
 | |
|       link[err] = 0;  /* Null-terminate string, just-in-case.  */
 | |
| 
 | |
|       linklen = strlen (link) + 1;
 | |
| 
 | |
|       if (link[0] == '/')
 | |
| 	memcpy (path, link, linklen);
 | |
|       else
 | |
| 	{
 | |
| 	  filelen = strlen (path);
 | |
| 
 | |
| 	  while (filelen > 1 && path[filelen-1] == '/')
 | |
| 	    filelen--;
 | |
| 	  while (filelen > 0 && path[filelen-1] != '/')
 | |
| 	    filelen--;
 | |
| 	  if (filelen + linklen > sizeof(path))
 | |
| 	    {
 | |
| 	      errno = ENAMETOOLONG;
 | |
| 	      return -1;
 | |
| 	    }
 | |
| 	  memcpy (path+filelen, link, linklen);
 | |
| 	}
 | |
| 
 | |
|       err = __readlink(path, link, PATH_MAX+1);
 | |
| 
 | |
|       if (err == -1)
 | |
|       {
 | |
| 	errno = old_errno;
 | |
| 	return __lchown(path, owner, group);
 | |
|       }
 | |
|    }
 | |
|    errno = ELOOP;
 | |
|    return -1;
 | |
| }
 | |
| libc_hidden_def (__chown)
 | |
| 
 | |
| #include <shlib-compat.h>
 | |
| versioned_symbol (libc, __chown, chown, GLIBC_2_1);
 |