patches/glibc/2.9/440-alpha-glibc-2.4-xstat.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Tue Aug 02 18:28:10 2011 +0200 (2011-08-02)
changeset 2590 b64cfb67944e
parent 1201 c9967a6e3b25
permissions -rw-r--r--
scripts/functions: svn retrieval first tries the mirror for tarballs

The svn download helper looks for the local tarballs dir to see if it
can find a pre-downloaded tarball, and if it does not find it, does
the actual fetch to upstream via svn.

In the process, it does not even try to get a tarball from the local
mirror, which can be useful if the mirror has been pre-populated
manually (or with a previously downloaded tree).

Fake a tarball get with the standard tarball-download helper, but
without specifying any upstream URL, which makes the helper directly
try the LAN mirror.

Of course, if no mirror is specified, no URL wil be available, and
the standard svn retrieval will kick in.

Reported-by: ANDY KENNEDY <ANDY.KENNEDY@adtran.com>
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
     1 Original patch from: gentoo/src/patchsets/glibc/2.9/6001_all_alpha-glibc-2.4-xstat.patch
     2 
     3 -= BEGIN original header =-
     4 http://sources.redhat.com/bugzilla/show_bug.cgi?id=1026
     5 http://sourceware.org/ml/libc-alpha/2005-02/msg00122.html
     6 
     7 2005-02-26  GOTO Masanori  <gotom@debian.or.jp>
     8 
     9 	* sysdeps/unix/sysv/linux/kernel-features.h: Define
    10 	__ASSUME_STAT64_SYSCALL.
    11 	* sysdeps/unix/sysv/linux/alpha/fxstat.c: Check
    12 	__ASSUME_STAT64_SYSCALL.
    13 	* sysdeps/unix/sysv/linux/alpha/fxstatat.c: Likewise.
    14 	* sysdeps/unix/sysv/linux/alpha/lxstat.c: Likewise.
    15 	* sysdeps/unix/sysv/linux/alpha/xstat.c: Likewise.
    16 	* sysdeps/unix/sysv/linux/alpha/xstatconv.c: Don't define
    17 	__libc_missing_axp_stat64 when it's not needed.
    18 	* sysdeps/unix/sysv/linux/alpha/xstatconv.h: Likewise.
    19 
    20 -= END original header =-
    21 
    22 diff -durN glibc-2_9.orig/sysdeps/unix/sysv/linux/alpha/fxstat.c glibc-2_9/sysdeps/unix/sysv/linux/alpha/fxstat.c
    23 --- glibc-2_9.orig/sysdeps/unix/sysv/linux/alpha/fxstat.c	2004-03-11 03:58:44.000000000 +0100
    24 +++ glibc-2_9/sysdeps/unix/sysv/linux/alpha/fxstat.c	2009-02-02 22:01:30.000000000 +0100
    25 @@ -35,27 +35,39 @@
    26  __fxstat (int vers, int fd, struct stat *buf)
    27  {
    28    INTERNAL_SYSCALL_DECL (err);
    29 -  int result, errno_out;
    30 +  int result;
    31    struct kernel_stat kbuf;
    32  
    33 +#if __ASSUME_STAT64_SYSCALL > 0
    34 +  if (vers == _STAT_VER_KERNEL64)
    35 +    {
    36 +      result = INTERNAL_SYSCALL (fstat64, err, 2, fd, buf);
    37 +      if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
    38 +	return result;
    39 +      __set_errno (INTERNAL_SYSCALL_ERRNO (result, err));
    40 +      return -1;
    41 +    }
    42 +#elif defined __NR_fstat64
    43    if (vers == _STAT_VER_KERNEL64 && !__libc_missing_axp_stat64)
    44      {
    45 +      int errno_out;
    46        result = INTERNAL_SYSCALL (fstat64, err, 2, fd, buf);
    47        if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
    48  	return result;
    49        errno_out = INTERNAL_SYSCALL_ERRNO (result, err);
    50        if (errno_out != ENOSYS)
    51 -	goto fail;
    52 +	{
    53 +	  __set_errno (errno_out);
    54 +	  return -1;
    55 +	}
    56        __libc_missing_axp_stat64 = 1;
    57      }
    58 +#endif
    59  
    60    result = INTERNAL_SYSCALL (fstat, err, 2, fd, &kbuf);
    61    if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
    62      return __xstat_conv (vers, &kbuf, buf);
    63 -  errno_out = INTERNAL_SYSCALL_ERRNO (result, err);
    64 -  
    65 - fail:
    66 -  __set_errno (errno_out);
    67 +  __set_errno (INTERNAL_SYSCALL_ERRNO (result, err));
    68    return -1;
    69  }
    70  hidden_def (__fxstat)
    71 diff -durN glibc-2_9.orig/sysdeps/unix/sysv/linux/alpha/fxstatat.c glibc-2_9/sysdeps/unix/sysv/linux/alpha/fxstatat.c
    72 --- glibc-2_9.orig/sysdeps/unix/sysv/linux/alpha/fxstatat.c	2006-02-20 23:51:48.000000000 +0100
    73 +++ glibc-2_9/sysdeps/unix/sysv/linux/alpha/fxstatat.c	2009-02-02 22:01:30.000000000 +0100
    74 @@ -65,6 +65,20 @@
    75    int result, errno_out;
    76    struct kernel_stat kst;
    77  
    78 +#if __ASSUME_STAT64_SYSCALL > 0
    79 +  if (vers == _STAT_VER_KERNEL64)
    80 +    {
    81 +      if (flag & AT_SYMLINK_NOFOLLOW)
    82 +	result = INTERNAL_SYSCALL (lstat64, err, 2, file, st);
    83 +      else
    84 +	result = INTERNAL_SYSCALL (stat64, err, 2, file, st);
    85 +
    86 +      if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
    87 +	return result;
    88 +      errno_out = INTERNAL_SYSCALL_ERRNO (result, err);
    89 +      goto fail;
    90 +    }
    91 +#elif defined __NR_stat64
    92    if (vers == _STAT_VER_KERNEL64 && !__libc_missing_axp_stat64)
    93      {
    94        if (flag & AT_SYMLINK_NOFOLLOW)
    95 @@ -79,6 +93,7 @@
    96  	goto fail;
    97        __libc_missing_axp_stat64 = 1;
    98      }
    99 +#endif
   100  
   101    if (flag & AT_SYMLINK_NOFOLLOW)
   102      result = INTERNAL_SYSCALL (lstat, err, 2, file, &kst);
   103 diff -durN glibc-2_9.orig/sysdeps/unix/sysv/linux/alpha/lxstat.c glibc-2_9/sysdeps/unix/sysv/linux/alpha/lxstat.c
   104 --- glibc-2_9.orig/sysdeps/unix/sysv/linux/alpha/lxstat.c	2004-03-11 03:58:44.000000000 +0100
   105 +++ glibc-2_9/sysdeps/unix/sysv/linux/alpha/lxstat.c	2009-02-02 22:01:30.000000000 +0100
   106 @@ -35,27 +35,39 @@
   107  __lxstat (int vers, const char *name, struct stat *buf)
   108  {
   109    INTERNAL_SYSCALL_DECL (err);
   110 -  int result, errno_out;
   111 +  int result;
   112    struct kernel_stat kbuf;
   113  
   114 +#if __ASSUME_STAT64_SYSCALL > 0
   115 +  if (vers == _STAT_VER_KERNEL64)
   116 +    {
   117 +      result = INTERNAL_SYSCALL (lstat64, err, 2, name, buf);
   118 +      if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
   119 +	return result;
   120 +      __set_errno (INTERNAL_SYSCALL_ERRNO (result, err));
   121 +      return -1;
   122 +    }
   123 +#elif defined __NR_lstat64
   124    if (vers == _STAT_VER_KERNEL64 && !__libc_missing_axp_stat64)
   125      {
   126 +      int errno_out;
   127        result = INTERNAL_SYSCALL (lstat64, err, 2, name, buf);
   128        if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
   129  	return result;
   130        errno_out = INTERNAL_SYSCALL_ERRNO (result, err);
   131        if (errno_out != ENOSYS)
   132 -	goto fail;
   133 +	{
   134 +	  __set_errno (errno_out);
   135 +	  return -1;
   136 +	}
   137        __libc_missing_axp_stat64 = 1;
   138      }
   139 +#endif
   140  
   141    result = INTERNAL_SYSCALL (lstat, err, 2, name, &kbuf);
   142    if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
   143      return __xstat_conv (vers, &kbuf, buf);
   144 -  errno_out = INTERNAL_SYSCALL_ERRNO (result, err);
   145 -  
   146 - fail:
   147 -  __set_errno (errno_out);
   148 +  __set_errno (INTERNAL_SYSCALL_ERRNO (result, err));
   149    return -1;
   150  }
   151  hidden_def (__lxstat)
   152 diff -durN glibc-2_9.orig/sysdeps/unix/sysv/linux/alpha/xstat.c glibc-2_9/sysdeps/unix/sysv/linux/alpha/xstat.c
   153 --- glibc-2_9.orig/sysdeps/unix/sysv/linux/alpha/xstat.c	2004-03-11 03:58:44.000000000 +0100
   154 +++ glibc-2_9/sysdeps/unix/sysv/linux/alpha/xstat.c	2009-02-02 22:01:30.000000000 +0100
   155 @@ -35,27 +35,39 @@
   156  __xstat (int vers, const char *name, struct stat *buf)
   157  {
   158    INTERNAL_SYSCALL_DECL (err);
   159 -  int result, errno_out;
   160 +  int result;
   161    struct kernel_stat kbuf;
   162  
   163 +#if __ASSUME_STAT64_SYSCALL > 0
   164 +  if (vers == _STAT_VER_KERNEL64)
   165 +    {
   166 +      result = INTERNAL_SYSCALL (stat64, err, 2, name, buf);
   167 +      if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
   168 +	return result;
   169 +      __set_errno (INTERNAL_SYSCALL_ERRNO (result, err));
   170 +      return -1;
   171 +    }
   172 +#elif defined __NR_stat64
   173    if (vers == _STAT_VER_KERNEL64 && !__libc_missing_axp_stat64)
   174      {
   175 +      int errno_out;
   176        result = INTERNAL_SYSCALL (stat64, err, 2, name, buf);
   177        if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
   178  	return result;
   179        errno_out = INTERNAL_SYSCALL_ERRNO (result, err);
   180        if (errno_out != ENOSYS)
   181 -	goto fail;
   182 +	{
   183 +	  __set_errno (errno_out);
   184 +	  return -1;
   185 +	}
   186        __libc_missing_axp_stat64 = 1;
   187      }
   188 +#endif
   189  
   190    result = INTERNAL_SYSCALL (stat, err, 2, name, &kbuf);
   191    if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
   192      return __xstat_conv (vers, &kbuf, buf);
   193 -  errno_out = INTERNAL_SYSCALL_ERRNO (result, err);
   194 -  
   195 - fail:
   196 -  __set_errno (errno_out);
   197 +  __set_errno (INTERNAL_SYSCALL_ERRNO (result, err));
   198    return -1;
   199  }
   200  hidden_def (__xstat)
   201 diff -durN glibc-2_9.orig/sysdeps/unix/sysv/linux/alpha/xstatconv.c glibc-2_9/sysdeps/unix/sysv/linux/alpha/xstatconv.c
   202 --- glibc-2_9.orig/sysdeps/unix/sysv/linux/alpha/xstatconv.c	2004-03-11 03:58:44.000000000 +0100
   203 +++ glibc-2_9/sysdeps/unix/sysv/linux/alpha/xstatconv.c	2009-02-02 22:01:30.000000000 +0100
   204 @@ -22,9 +22,14 @@
   205  #include <sys/stat.h>
   206  #include <kernel_stat.h>
   207  #include <xstatconv.h>
   208 +#include <sys/syscall.h>
   209  
   210  
   211 +#ifdef __NR_stat64
   212 +# if __ASSUME_STAT64_SYSCALL == 0
   213  int __libc_missing_axp_stat64;
   214 +# endif
   215 +#endif
   216  
   217  int
   218  __xstat_conv (int vers, struct kernel_stat *kbuf, void *ubuf)
   219 diff -durN glibc-2_9.orig/sysdeps/unix/sysv/linux/alpha/xstatconv.h glibc-2_9/sysdeps/unix/sysv/linux/alpha/xstatconv.h
   220 --- glibc-2_9.orig/sysdeps/unix/sysv/linux/alpha/xstatconv.h	2006-01-08 09:21:16.000000000 +0100
   221 +++ glibc-2_9/sysdeps/unix/sysv/linux/alpha/xstatconv.h	2009-02-02 22:01:30.000000000 +0100
   222 @@ -18,7 +18,12 @@
   223     02111-1307 USA.  */
   224  
   225  #include <kernel-features.h>
   226 +#include <sys/syscall.h>
   227  
   228 +#ifdef __NR_stat64
   229 +# if __ASSUME_STAT64_SYSCALL == 0
   230  extern int __libc_missing_axp_stat64 attribute_hidden;
   231 +# endif
   232 +#endif
   233  extern int __xstat_conv (int vers, struct kernel_stat *kbuf, void *ubuf)
   234    attribute_hidden;
   235 diff -durN glibc-2_9.orig/sysdeps/unix/sysv/linux/kernel-features.h glibc-2_9/sysdeps/unix/sysv/linux/kernel-features.h
   236 --- glibc-2_9.orig/sysdeps/unix/sysv/linux/kernel-features.h	2008-08-01 23:51:04.000000000 +0200
   237 +++ glibc-2_9/sysdeps/unix/sysv/linux/kernel-features.h	2009-02-02 22:01:30.000000000 +0100
   238 @@ -395,6 +395,11 @@
   239  # define __ASSUME_GETDENTS32_D_TYPE	1
   240  #endif
   241  
   242 +/* Starting with version 2.6.4, alpha stat64 syscalls are available.  */
   243 +#if __LINUX_KERNEL_VERSION >= 0x020604 && defined __alpha__
   244 +# define __ASSUME_STAT64_SYSCALL	1
   245 +#endif
   246 +
   247  /* Starting with version 2.5.3, the initial location returned by `brk'
   248     after exec is always rounded up to the next page.  */
   249  #if __LINUX_KERNEL_VERSION >= 132355