diff options
Diffstat (limited to 'sysdeps')
71 files changed, 1109 insertions, 231 deletions
diff --git a/sysdeps/generic/bits/confname.h b/sysdeps/generic/bits/confname.h index 1b75d6e5b5..8aac5cb67d 100644 --- a/sysdeps/generic/bits/confname.h +++ b/sysdeps/generic/bits/confname.h @@ -41,6 +41,7 @@ enum _PC_NO_TRUNC, #define _PC_NO_TRUNC _PC_NO_TRUNC _PC_VDISABLE, +#define _PC_VDISABLE _PC_VDISABLE _PC_SYNC_IO, #define _PC_SYNC_IO _PC_SYNC_IO _PC_ASYNC_IO, @@ -325,8 +326,15 @@ enum #define _SC_XBS5_ILP32_OFFBIG _SC_XBS5_ILP32_OFFBIG _SC_XBS5_LP64_OFF64, #define _SC_XBS5_LP64_OFF64 _SC_XBS5_LP64_OFF64 - _SC_XBS5_LPBIG_OFFBIG + _SC_XBS5_LPBIG_OFFBIG, #define _SC_XBS5_LPBIG_OFFBIG _SC_XBS5_LPBIG_OFFBIG + + _SC_XOPEN_LEGACY, +#define _SC_XOPEN_LEGACY _SC_XOPEN_LEGACY + _SC_XOPEN_REALTIME, +#define _SC_XOPEN_REALTIME _SC_XOPEN_REALTIME + _SC_XOPEN_REALTIME_THREADS +#define _SC_XOPEN_REALTIME_THREADS _SC_XOPEN_REALTIME_THREADS }; #if (defined __USE_POSIX2 || defined __USE_UNIX98 \ diff --git a/sysdeps/generic/bits/resource.h b/sysdeps/generic/bits/resource.h index e72836d3c7..e29be98210 100644 --- a/sysdeps/generic/bits/resource.h +++ b/sysdeps/generic/bits/resource.h @@ -66,11 +66,20 @@ enum __rlimit_resource RLIMIT_NLIMITS, /* Number of limit flavors. */ RLIM_NLIMITS = RLIMIT_NLIMITS, /* Traditional name for same. */ - - RLIM_INFINITY = 0x7fffffff /* Value to indicate that there is no limit. */ -#define RLIM_INFINITY RLIM_INFINITY }; +/* Value to indicate that there is no limit. */ +#ifndef __USE_FILE_OFFSET64 +# define RLIM_INFINITY 0x7fffffff +#else +# define RLIM_INFINITY 0x7fffffffffffffffLL +#endif + +#ifdef __USE_LARGEFILE64 +# define RLIM64_INFINITY 0x7fffffffffffffffLL +#endif + + /* Type for resource quantity measurement. */ #ifndef __USE_FILE_OFFSET64 typedef __rlim_t rlim_t; diff --git a/sysdeps/generic/bits/stat.h b/sysdeps/generic/bits/stat.h index a0edf2be52..bdc3a48de9 100644 --- a/sysdeps/generic/bits/stat.h +++ b/sysdeps/generic/bits/stat.h @@ -31,13 +31,21 @@ struct stat /* These are the members that POSIX.1 requires. */ __mode_t st_mode; /* File mode. */ +#ifndef __USE_FILE_OFFSET64 __ino_t st_ino; /* File serial number. */ +#else + __ino64_t st_ino; /* File serial number. */ +#endif __dev_t st_dev; /* Device containing the file. */ __nlink_t st_nlink; /* Link count. */ __uid_t st_uid; /* User ID of the file's owner. */ __gid_t st_gid; /* Group ID of the file's group. */ +#ifndef __USE_FILE_OFFSET64 __off_t st_size; /* Size of file, in bytes. */ +#else + __off64_t st_size; /* Size of file, in bytes. */ +#endif __time_t st_atime; /* Time of last access. */ __time_t st_mtime; /* Time of last modification. */ @@ -70,11 +78,11 @@ struct stat #ifdef __USE_LARGEFILE64 struct stat64 { - __dev_t st_dev; /* Device. */ - - __ino64_t st_ino; /* File serial number. */ __mode_t st_mode; /* File mode. */ + __ino64_t st_ino; /* File serial number. */ + __dev_t st_dev; /* Device. */ __nlink_t st_nlink; /* Link count. */ + __uid_t st_uid; /* User ID of the file's owner. */ __gid_t st_gid; /* Group ID of the file's group.*/ __off64_t st_size; /* Size of file, in bytes. */ diff --git a/sysdeps/generic/bits/statfs.h b/sysdeps/generic/bits/statfs.h index a92cf52315..03b92d8faa 100644 --- a/sysdeps/generic/bits/statfs.h +++ b/sysdeps/generic/bits/statfs.h @@ -35,12 +35,36 @@ struct statfs { unsigned int f_type; unsigned int f_bsize; +#ifndef __USE_FILE_OFFSET64 __fsblkcnt_t f_blocks; __fsblkcnt_t f_bfree; __fsblkcnt_t f_bavail; __fsblkcnt_t f_files; __fsblkcnt_t f_ffree; +#else + __fsblkcnt64_t f_blocks; + __fsblkcnt64_t f_bfree; + __fsblkcnt64_t f_bavail; + __fsblkcnt64_t f_files; + __fsblkcnt64_t f_ffree; +#endif + __fsid_t f_fsid; + unsigned int f_namelen; + unsigned int f_spare[6]; + }; + +#ifdef __USE_LARGEFILE64 +struct statfs64 + { + unsigned int f_type; + unsigned int f_bsize; + __fsblkcnt64_t f_blocks; + __fsblkcnt64_t f_bfree; + __fsblkcnt64_t f_bavail; + __fsblkcnt64_t f_files; + __fsblkcnt64_t f_ffree; __fsid_t f_fsid; unsigned int f_namelen; unsigned int f_spare[6]; }; +#endif diff --git a/sysdeps/generic/bits/stdio_lim.h b/sysdeps/generic/bits/stdio_lim.h index d9b8fbc749..86e83cf1e2 100644 --- a/sysdeps/generic/bits/stdio_lim.h +++ b/sysdeps/generic/bits/stdio_lim.h @@ -17,17 +17,24 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#ifndef _STDIO_H +#if !defined _STDIO_H && !defined __need_FOPEN_MAX # error "Never include <bits/stdio_lim.h> directly; use <stdio.h> instead." #endif -#define L_tmpnam 1 -#define TMP_MAX 0 +#ifndef __need_FOPEN_MAX +# define L_tmpnam 1 +# define TMP_MAX 0 -#ifdef __USE_POSIX -# define L_ctermid 1 -# define L_cuserid 1 +# ifdef __USE_POSIX +# define L_ctermid 1 +# define L_cuserid 1 +# endif + +# define FILENAME_MAX 14 #endif -#define FOPEN_MAX 16 -#define FILENAME_MAX 14 +#if defined __need_FOPEN_MAX && !defined __defined_FOPEN_MAX +# define __defined_FOPEN_MAX +# define FOPEN_MAX 16 +#endif +#undef __need_FOPEN_MAX diff --git a/sysdeps/generic/fstatfs64.c b/sysdeps/generic/fstatfs64.c index 99a2452558..e34af2aa45 100644 --- a/sysdeps/generic/fstatfs64.c +++ b/sysdeps/generic/fstatfs64.c @@ -25,8 +25,21 @@ int fstatfs64 (int fd, struct statfs64 *buf) { - __set_errno (ENOSYS); - return -1; + struct statfs buf32; + + if (fstatfs (fd, &buf32) < 0) + return -1; + + buf->f_type = buf32.f_type; + buf->f_bsize = buf32.f_bsize; + buf->f_blocks = buf32.f_blocks; + buf->f_bfree = buf32.f_bfree; + buf->f_bavail = buf32.f_bavail; + buf->f_files = buf32.f_files; + buf->f_ffree = buf32.f_ffree; + buf->f_fsid = buf32.f_fsid; + buf->f_namelen = buf32.f_namelen; + memcpy (buf->f_spare, buf32.f_spare, sizeof (buf32.f_spare)); + + return 0; } -stub_warning (fstatfs64) -#include <stub-tag.h> diff --git a/sysdeps/generic/ftruncate64.c b/sysdeps/generic/ftruncate64.c new file mode 100644 index 0000000000..40c312c21b --- /dev/null +++ b/sysdeps/generic/ftruncate64.c @@ -0,0 +1,35 @@ +/* Copyright (C) 1997 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 Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <sys/types.h> +#include <errno.h> +#include <unistd.h> + +/* Truncate the file FD refers to to LENGTH bytes. */ +int +ftruncate64 (fd, length) + int fd; + off64_t length; +{ + if ((off_t) length != length) + { + __set_errno (EINVAL); + return -1; + } + return ftruncate (fd, (off_t) length); +} diff --git a/sysdeps/generic/getrlimit.c b/sysdeps/generic/getrlimit.c index c283f77038..285133c1a1 100644 --- a/sysdeps/generic/getrlimit.c +++ b/sysdeps/generic/getrlimit.c @@ -16,8 +16,9 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include <sys/resource.h> #include <errno.h> +#include <sys/resource.h> +#include <sys/types.h> /* Put the soft and hard limits for RESOURCE in *RLIMITS. Returns 0 if successful, -1 if not (and sets errno). */ diff --git a/sysdeps/generic/getrlimit64.c b/sysdeps/generic/getrlimit64.c index 6c581edf72..742505f4b5 100644 --- a/sysdeps/generic/getrlimit64.c +++ b/sysdeps/generic/getrlimit64.c @@ -16,17 +16,28 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include <sys/resource.h> #include <errno.h> +#include <sys/resource.h> +#include <sys/types.h> /* Put the soft and hard limits for RESOURCE in *RLIMITS. Returns 0 if successful, -1 if not (and sets errno). */ int getrlimit64 (enum __rlimit_resource resource, struct rlimit64 *rlimits) { - __set_errno (ENOSYS); - return -1; -} + struct rlimit rlimits32; -stub_warning (getrlimit64) -#include <stub-tag.h> + if (getrlimit (resource, &rlimits32) < 0) + return -1; + + if (rlimits32.rlim_cur == RLIM_INFINITY) + rlimits->rlim_cur = RLIM64_INFINITY; + else + rlimits->rlim_cur = rlimits32.rlim_cur; + if (rlimits32.rlim_max == RLIM_INFINITY) + rlimits->rlim_max = RLIM64_INFINITY; + else + rlimits->rlim_max = rlimits32.rlim_max; + + return 0; +} diff --git a/sysdeps/generic/setrlimit.c b/sysdeps/generic/setrlimit.c index b969ea19f7..85eb74051b 100644 --- a/sysdeps/generic/setrlimit.c +++ b/sysdeps/generic/setrlimit.c @@ -16,8 +16,9 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include <sys/resource.h> #include <errno.h> +#include <sys/resource.h> +#include <sys/types.h> /* Set the soft and hard limits for RESOURCE to *RLIMITS. Only the super-user can increase hard limits. diff --git a/sysdeps/generic/setrlimit64.c b/sysdeps/generic/setrlimit64.c index 3d1a12279f..97329c58d8 100644 --- a/sysdeps/generic/setrlimit64.c +++ b/sysdeps/generic/setrlimit64.c @@ -16,8 +16,9 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include <sys/resource.h> #include <errno.h> +#include <sys/resource.h> +#include <sys/types.h> /* Set the soft and hard limits for RESOURCE to *RLIMITS. Only the super-user can increase hard limits. @@ -27,8 +28,18 @@ setrlimit64 (resource, rlimits) enum __rlimit_resource resource; struct rlimit64 *rlimits; { - __set_errno (ENOSYS); - return -1; + struct rlimit rlimits32; + + if (rlimits->rlim_cur >= RLIM_INFINITY) + rlimits32.rlim_cur = RLIM_INFINITY; + else + rlimits32.rlim_cur = rlimits->rlim_cur; + if (rlimits->rlim_max >= RLIM_INFINITY) + rlimits32.rlim_max = RLIM_INFINITY; + else + rlimits32.rlim_max = rlimits->rlim_max; + + return setrlimit (resource, &rlimits32); } stub_warning (setrlimit64) diff --git a/sysdeps/generic/statfs64.c b/sysdeps/generic/statfs64.c index 93b640eb74..050c05d659 100644 --- a/sysdeps/generic/statfs64.c +++ b/sysdeps/generic/statfs64.c @@ -25,8 +25,21 @@ int statfs64 (const char *file, struct statfs64 *buf) { - __set_errno (ENOSYS); - return -1; + struct statfs buf32; + + if (statfs (file, &buf32) < 0) + return -1; + + buf->f_type = buf32.f_type; + buf->f_bsize = buf32.f_bsize; + buf->f_blocks = buf32.f_blocks; + buf->f_bfree = buf32.f_bfree; + buf->f_bavail = buf32.f_bavail; + buf->f_files = buf32.f_files; + buf->f_ffree = buf32.f_ffree; + buf->f_fsid = buf32.f_fsid; + buf->f_namelen = buf32.f_namelen; + memcpy (buf->f_spare, buf32.f_spare, sizeof (buf32.f_spare)); + + return 0; } -stub_warning (statfs64) -#include <stub-tag.h> diff --git a/sysdeps/generic/sysconf.c b/sysdeps/generic/sysconf.c index b3fa62aa9a..bb6955d212 100644 --- a/sysdeps/generic/sysconf.c +++ b/sysdeps/generic/sysconf.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1993, 1995, 1996 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1993, 1995, 1996, 1997 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 @@ -242,6 +242,15 @@ __sysconf (name) case _SC_NL_SETMAX: case _SC_NL_TEXTMAX: + case _SC_XBS5_ILP32_OFF32: + case _SC_XBS5_ILP32_OFFBIG: + case _SC_XBS5_LP64_OFF64: + case _SC_XBS5_LPBIG_OFFBIG: + + case _SC_XOPEN_LEGACY: + case _SC_XOPEN_REALTIME: + case _SC_XOPEN_REALTIME_THREADS: + break; } diff --git a/sysdeps/generic/testrtsig.h b/sysdeps/generic/testrtsig.h index 25eb488f84..6937372b8b 100644 --- a/sysdeps/generic/testrtsig.h +++ b/sysdeps/generic/testrtsig.h @@ -21,7 +21,7 @@ #include <string.h> #include <sys/utsname.h> -int +static int kernel_has_rtsig (void) { return 0; diff --git a/sysdeps/generic/truncate64.c b/sysdeps/generic/truncate64.c new file mode 100644 index 0000000000..6a9d91f6d0 --- /dev/null +++ b/sysdeps/generic/truncate64.c @@ -0,0 +1,35 @@ +/* Copyright (C) 1997 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 Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <sys/types.h> +#include <errno.h> +#include <unistd.h> + +/* Truncate PATH to LENGTH bytes. */ +int +truncate64 (path, length) + const char *path; + off64_t length; +{ + if ((off_t) length != length) + { + __set_errno (EINVAL); + return -1; + } + return truncate (path, (off_t) length); +} diff --git a/sysdeps/generic/ulimit.c b/sysdeps/generic/ulimit.c index 3d90170b50..d62ba32a54 100644 --- a/sysdeps/generic/ulimit.c +++ b/sysdeps/generic/ulimit.c @@ -16,8 +16,8 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include <sys/resource.h> #include <errno.h> +#include <sys/resource.h> /* Function depends on CMD: 1 = Return the limit on the size of a file, in units of 512 bytes. @@ -28,9 +28,7 @@ can open. Returns -1 on errors. */ long int -__ulimit (cmd, newlimit) - int cmd; - long int newlimit; +__ulimit (int cmd, ...) { __set_errno (ENOSYS); return -1; diff --git a/sysdeps/generic/waitid.c b/sysdeps/generic/waitid.c index 8843977a01..4454f7d34b 100644 --- a/sysdeps/generic/waitid.c +++ b/sysdeps/generic/waitid.c @@ -19,6 +19,7 @@ Boston, MA 02111-1307, USA. */ #include <errno.h> +#include <sys/types.h> #include <sys/wait.h> int diff --git a/sysdeps/m68k/fpu/bits/mathinline.h b/sysdeps/m68k/fpu/bits/mathinline.h index 034b6f8294..569e5a06c4 100644 --- a/sysdeps/m68k/fpu/bits/mathinline.h +++ b/sysdeps/m68k/fpu/bits/mathinline.h @@ -173,7 +173,6 @@ __inline_mathop(significand, getman) # ifdef __USE_ISOC9X __inline_mathop(log2, log2) -__inline_mathop(exp2, twotox) __inline_mathop(trunc, intrz) # endif @@ -445,7 +444,6 @@ __inline_forward_c(double,ceil, (double __x), (__x)) __inline_forward_c(int,isinf, (double __value), (__value)) __inline_forward_c(int,finite, (double __value), (__value)) __inline_forward_c(double,scalbn, (double __x, int __n), (__x, __n)) -__inline_forward_c(double,scalbln, (double __x, long int __n), (__x, __n)) # endif # if defined __USE_MISC || defined __USE_XOPEN # ifndef __USE_ISOC9X /* Conflict with macro of same name. */ @@ -453,6 +451,7 @@ __inline_forward_c(int,isnan, (double __value), (__value)) # endif # endif # ifdef __USE_ISOC9X +__inline_forward_c(double,scalbln, (double __x, long int __n), (__x, __n)) __inline_forward_c(double,nearbyint, (double __value), (__value)) __inline_forward_c(long int,lrint, (double __value), (__value)) __inline_forward_c(double,fma, (double __x, double __y, double __z), @@ -473,10 +472,10 @@ __inline_forward_c(float,ceilf, (float __x), (__x)) __inline_forward_c(int,isinff, (float __value), (__value)) __inline_forward_c(int,finitef, (float __value), (__value)) __inline_forward_c(float,scalbnf, (float __x, int __n), (__x, __n)) -__inline_forward_c(float,scalblnf, (float __x, long int __n), (__x, __n)) __inline_forward_c(int,isnanf, (float __value), (__value)) # endif # ifdef __USE_ISOC9X +__inline_forward_c(float,scalblnf, (float __x, long int __n), (__x, __n)) __inline_forward_c(float,nearbyintf, (float __value), (__value)) __inline_forward_c(long int,lrintf, (float __value), (__value)) __inline_forward_c(float,fmaf, (float __x, float __y, float __z), @@ -495,11 +494,11 @@ __inline_forward_c(long double,ceill, (long double __x), (__x)) __inline_forward_c(int,isinfl, (long double __value), (__value)) __inline_forward_c(int,finitel, (long double __value), (__value)) __inline_forward_c(long double,scalbnl, (long double __x, int __n), (__x, __n)) -__inline_forward_c(long double,scalblnl, (long double __x, long int __n), - (__x, __n)) __inline_forward_c(int,isnanl, (long double __value), (__value)) # endif # ifdef __USE_ISOC9X +__inline_forward_c(long double,scalblnl, (long double __x, long int __n), + (__x, __n)) __inline_forward_c(long double,nearbyintl, (long double __value), (__value)) __inline_forward_c(long int,lrintl, (long double __value), (__value)) __inline_forward_c(long double,fmal, diff --git a/sysdeps/posix/mk-stdiolim.c b/sysdeps/posix/mk-stdiolim.c index c268b642de..8858ebeae5 100644 --- a/sysdeps/posix/mk-stdiolim.c +++ b/sysdeps/posix/mk-stdiolim.c @@ -42,27 +42,48 @@ main() write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n\ Boston, MA 02111-1307, USA. */\n\ \n\ -#ifndef _STDIO_H\n\ +#if !defined _STDIO_H && !defined __need_FOPEN_MAX\n\ # error \"Never include <bits/stdio_lim.h> directly; use <stdio.h> instead.\"\n\ #endif\n\ \n"); /* These values correspond to the code in sysdeps/posix/tempname.c. Change the values here if you change that code. */ - printf ("#define L_tmpnam %u\n", sizeof ("/usr/tmp/") + 9); - printf ("#define TMP_MAX %u\n", 62 * 62 * 62); + puts ("#ifndef __need_FOPEN_MAX"); + printf ("# define L_tmpnam %u\n", sizeof ("/usr/tmp/") + 9); + printf ("# define TMP_MAX %u\n", 62 * 62 * 62); - puts ("#ifdef __USE_POSIX"); - printf ("# define L_ctermid %u\n", sizeof ("/dev/tty")); - printf ("# define L_cuserid 9\n"); - puts ("#endif"); + puts ("# ifdef __USE_POSIX"); + printf ("# define L_ctermid %u\n", sizeof ("/dev/tty")); + printf ("# define L_cuserid 9\n"); + puts ("# endif"); + + printf (" #define FILENAME_MAX %u\n", +#ifdef PATH_MAX + PATH_MAX +#else + /* This is supposed to be the size needed to hold the longest file + name string the implementation guarantees can be opened. + PATH_MAX not being defined means the actual limit on the length + of a file name is runtime-variant (or it is unlimited). ISO + says in such a case FILENAME_MAX should be a good size to + allocate for a file name string. POSIX.1 guarantees that a + file name up to _POSIX_PATH_MAX chars long can be opened, so + this value must be at least that. */ + 1024 /* _POSIX_PATH_MAX is 255. */ +#endif + ); + + puts ("#endif\n"); /* POSIX does not require that OPEN_MAX and PATH_MAX be defined, so <bits/local_lim.h> will not define them if they are run-time variant (which is the case in the Hurd). ISO still requires that FOPEN_MAX and FILENAME_MAX be defined, however. */ - printf ("#define FOPEN_MAX %u\n", + puts ("#if defined __need_FOPEN_MAX && !defined __defined_FOPEN_MAX"); + puts ("# define __defined_FOPEN_MAX"); + printf ("# define FOPEN_MAX %u\n", #ifdef OPEN_MAX OPEN_MAX @@ -76,22 +97,8 @@ main() #endif ); + puts ("#endif"); + puts ("#undef __need_FOPEN_MAX"); - printf ("#define FILENAME_MAX %u\n", -#ifdef PATH_MAX - PATH_MAX -#else - /* This is supposed to be the size needed to hold the longest file - name string the implementation guarantees can be opened. - PATH_MAX not being defined means the actual limit on the length - of a file name is runtime-variant (or it is unlimited). ISO - says in such a case FILENAME_MAX should be a good size to - allocate for a file name string. POSIX.1 guarantees that a - file name up to _POSIX_PATH_MAX chars long can be opened, so - this value must be at least that. */ - 1024 /* _POSIX_PATH_MAX is 255. */ -#endif - ); - - exit(0); + exit (0); } diff --git a/sysdeps/posix/sysconf.c b/sysdeps/posix/sysconf.c index 8dde095b79..b0c559f70b 100644 --- a/sysdeps/posix/sysconf.c +++ b/sysdeps/posix/sysconf.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1993, 1995, 1996 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1993, 1995, 1996, 1997 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 @@ -443,9 +443,7 @@ __sysconf (name) #endif case _SC_2_VERSION: - /* This is actually supposed to return the version - of the 1003.2 utilities on the system {POSIX2_VERSION}. */ - return _POSIX2_C_VERSION; + return _POSIX2_VERSION; case _SC_2_C_BIND: #ifdef _POSIX2_C_BIND @@ -783,6 +781,47 @@ __sysconf (name) #else return -1; #endif + + case _SC_XBS5_ILP32_OFF32: +#ifdef _XBS5_ILP32_OFF32 + return _XBS5_ILP32_OFF32; +#else + return -1; +#endif + case _SC_XBS5_ILP32_OFFBIG: +#ifdef _XBS5_ILP32_OFFBIG + return _XBS5_ILP32_OFFBIG; +#else + return -1; +#endif + case _SC_XBS5_LP64_OFF64: +#ifdef _XBS5_LP64_OFF64 + return _XBS5_LP64_OFF64; +#else + return -1; +#endif + case _SC_XBS5_LPBIG_OFFBIG: +#ifdef _XBS5_LPBIG_OFFBIG + return _XBS5_LPBIG_OFFBIG; +#else + return -1; +#endif + + case _SC_XOPEN_LEGACY: + return _XOPEN_LEGACY; + + case _SC_XOPEN_REALTIME: +#ifdef _XOPEN_REALTIME + return _XOPEN_REALTIME; +#else + return -1; +#endif + case _SC_XOPEN_REALTIME_THREADS: +#ifdef _XOPEN_REALTIME_THREADS + return _XOPEN_REALTIME_THREADS; +#else + return -1; +#endif } } diff --git a/sysdeps/standalone/arm/bits/errno.h b/sysdeps/standalone/arm/bits/errno.h index 391f92548f..373d701bc3 100644 --- a/sysdeps/standalone/arm/bits/errno.h +++ b/sysdeps/standalone/arm/bits/errno.h @@ -56,6 +56,7 @@ # define EIO 28 # define ENOSPC 29 # define EEXIST 30 +# define EBUSY 31 #endif #define __set_errno(val) errno = (val) diff --git a/sysdeps/unix/bsd/sun/sunos4/bits/resource.h b/sysdeps/unix/bsd/sun/sunos4/bits/resource.h index 6978c87dd2..c0b40ba0d1 100644 --- a/sysdeps/unix/bsd/sun/sunos4/bits/resource.h +++ b/sysdeps/unix/bsd/sun/sunos4/bits/resource.h @@ -65,11 +65,11 @@ enum __rlimit_resource #ifndef __USE_FILE_OFFSET64 # define RLIM_INFINITY 0x7fffffff #else -# define RLIM_INFINITY 0x7fffffffffffffffL +# define RLIM_INFINITY 0x7fffffffffffffffLL #endif #ifdef __USE_LARGEFILE64 -# define RLIM64_INFINITY 0x7fffffffffffffffL +# define RLIM64_INFINITY 0x7fffffffffffffffLL #endif diff --git a/sysdeps/unix/bsd/ulimit.c b/sysdeps/unix/bsd/ulimit.c index b25a58314d..4a242efe1c 100644 --- a/sysdeps/unix/bsd/ulimit.c +++ b/sysdeps/unix/bsd/ulimit.c @@ -16,10 +16,11 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#include <errno.h> +#include <stdarg.h> #include <sysdep.h> -#include <sys/resource.h> #include <unistd.h> -#include <errno.h> +#include <sys/resource.h> #ifndef HAVE_GNU_LD #define _etext etext @@ -36,51 +37,50 @@ extern int _etext; can open. Returns -1 on errors. */ long int -ulimit (cmd, newlimit) - int cmd; - long int newlimit; +ulimit (int cmd, ...) { - int status; + struct rlimit limit; + va_list va; + long int result = -1; + + va_start (va, cmd); switch (cmd) { - case 1: - { - /* Get limit on file size. */ - struct rlimit fsize; - - status = getrlimit (RLIMIT_FSIZE, &fsize); - if (status < 0) - return -1; - + case UL_GETFSIZE: + /* Get limit on file size. */ + if (getrlimit (RLIMIT_FSIZE, &limit) == 0) /* Convert from bytes to 512 byte units. */ - return fsize.rlim_cur / 512; - } - case 2: + result = limit.rlim_cur / 512; + break; + + case UL_SETFSIZE: /* Set limit on file size. */ { - struct rlimit fsize; - fsize.rlim_cur = newlimit * 512; - fsize.rlim_max = newlimit * 512; + long int newlimit = va_arg (va, long int); + + limit.rlim_cur = newlimit * 512; + limit.rlim_max = newlimit * 512; - return setrlimit (RLIMIT_FSIZE, &fsize); + result = setrlimit (RLIMIT_FSIZE, &limit); } - case 3: - /* Get maximum address for `brk'. */ - { - struct rlimit dsize; + break; - status = getrlimit (RLIMIT_DATA, &dsize); - if (status < 0) - return -1; + case __UL_GETMAXBRK: + /* Get maximum address for `brk'. */ + if (getrlimit (RLIMIT_DATA, &limit) == 0) + result = ((long int) &_etext) + limit.rlim_cur; + break; - return ((long int) &_etext) + dsize.rlim_cur; - } - case 4: - return sysconf (_SC_OPEN_MAX); + case __UL_GETOPENMAX: + result = sysconf (_SC_OPEN_MAX); + break; default: __set_errno (EINVAL); - return -1; } + + va_end (va); + + return result; } diff --git a/sysdeps/unix/sysv/linux/Dist b/sysdeps/unix/sysv/linux/Dist index fa95317ec9..e22cec7dec 100644 --- a/sysdeps/unix/sysv/linux/Dist +++ b/sysdeps/unix/sysv/linux/Dist @@ -32,6 +32,7 @@ netinet/udp.h netipx/ipx.h nfs/nfs.h rt_sigaction.c +rt_sigpending.c rt_sigprocmask.c rt_sigqueueinfo.c rt_sigreturn.c @@ -61,3 +62,4 @@ sys/ultrasound.h sys/user.h sys/vt.h xstatconv.c +getdents64.c diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile index 27684ef3fe..152c7984bd 100644 --- a/sysdeps/unix/sysv/linux/Makefile +++ b/sysdeps/unix/sysv/linux/Makefile @@ -120,4 +120,8 @@ sysdep_routines += rt_sigsuspend rt_sigprocmask rt_sigtimedwait \ rt_sigqueueinfo rt_sigaction rt_sigpending endif +ifeq ($(subdir),dirent) +sysdep_routines += getdents64 +endif + common-generated += bits/stdio_lim.h bits/stdio_lim.d diff --git a/sysdeps/unix/sysv/linux/alpha/bits/types.h b/sysdeps/unix/sysv/linux/alpha/bits/types.h index 9acdf0c490..9033fdb362 100644 --- a/sysdeps/unix/sysv/linux/alpha/bits/types.h +++ b/sysdeps/unix/sysv/linux/alpha/bits/types.h @@ -77,6 +77,9 @@ typedef long int __swblk_t; /* Type of a swap block maybe? */ typedef long int __clock_t; typedef int __key_t; /* Type of a SYSV IPC key. */ +/* Used in `struct shmid_ds'. */ +typedef int __ipc_pid_t; + /* One element in the file descriptor mask array. */ typedef unsigned long int __fd_mask; diff --git a/sysdeps/unix/sysv/linux/alpha/fstatfs64.c b/sysdeps/unix/sysv/linux/alpha/fstatfs64.c new file mode 100644 index 0000000000..2be4e59ba4 --- /dev/null +++ b/sysdeps/unix/sysv/linux/alpha/fstatfs64.c @@ -0,0 +1 @@ +/* fstatfs64 is the same as fstatfs. */ diff --git a/sysdeps/unix/sysv/linux/alpha/ftruncate64.c b/sysdeps/unix/sysv/linux/alpha/ftruncate64.c new file mode 100644 index 0000000000..673a8b525a --- /dev/null +++ b/sysdeps/unix/sysv/linux/alpha/ftruncate64.c @@ -0,0 +1 @@ +/* ftruncate64 is the same as ftruncate. */ diff --git a/sysdeps/unix/sysv/linux/alpha/getrlimit64.c b/sysdeps/unix/sysv/linux/alpha/getrlimit64.c new file mode 100644 index 0000000000..9feab0e6b8 --- /dev/null +++ b/sysdeps/unix/sysv/linux/alpha/getrlimit64.c @@ -0,0 +1 @@ +/* getrlimit64 is the same as getrlimit. */ diff --git a/sysdeps/unix/sysv/linux/alpha/init-first.h b/sysdeps/unix/sysv/linux/alpha/init-first.h index ffbcaf1521..a3f5d8f0c4 100644 --- a/sysdeps/unix/sysv/linux/alpha/init-first.h +++ b/sysdeps/unix/sysv/linux/alpha/init-first.h @@ -2,28 +2,26 @@ This is done in one of two ways: either in the stack context of program start, or having dlopen pass them in. */ -#define SYSDEP_CALL_INIT(NAME, INIT) \ - asm(".weak _dl_starting_up\n\t" \ - ".globl " #NAME "\n\t" \ - ".ent " #NAME "\n" \ - #NAME ":\n\t" \ - "ldgp $29, 0($27)\n\t" \ - ".prologue 1\n\t" \ - ".set at\n\t" \ - /* Are we a dynamic libc being loaded into a static program? */ \ - "lda $0, _dl_starting_up\n\t" \ - "beq $0, 1f\n\t" \ - "ldl $0, 0($0)\n" \ - "cmpeq $31, $0, $0\n" \ - "1:\t" \ - "stl $0, __libc_multiple_libcs\n\t" \ - /* If so, argc et al are in a0-a2 already. Otherwise, load them. */ \ - "bne $0, 2f\n\t" \ - "ldl $16, 0($30)\n\t" \ - "lda $17, 8($30)\n\t" \ - "s8addq $16, $17, $18\n\t" \ - "addq $18, 8, $18\n" \ - "2:\t" \ - "br $31, " #INIT "..ng\n\t" \ - ".set noat\n\t" \ - ".end " #NAME); +#define SYSDEP_CALL_INIT(NAME, INIT) asm("\ + .weak _dl_starting_up + .globl " #NAME " + .ent " #NAME " +" #NAME ": + ldgp $29, 0($27) + .prologue 1 + .set at + /* Are we a dynamic libc being loaded into a static program? */ + lda $0, _dl_starting_up + beq $0, 1f + ldl $0, 0($0) + cmpeq $31, $0, $0 +1: stl $0, __libc_multiple_libcs + /* If so, argc et al are in a0-a2 already. Otherwise, load them. */ + bne $0, 2f + ldl $16, 0($30) + lda $17, 8($30) + s8addq $16, $17, $18 + addq $18, 8, $18 +2: br $31, " ASM_ALPHA_NG_SYMBOL_PREFIX #INIT "..ng + .set noat + .end " #NAME); diff --git a/sysdeps/unix/sysv/linux/alpha/readdir.c b/sysdeps/unix/sysv/linux/alpha/readdir.c new file mode 100644 index 0000000000..96a6a76945 --- /dev/null +++ b/sysdeps/unix/sysv/linux/alpha/readdir.c @@ -0,0 +1,4 @@ +#define readdir64 __no_readdir64_decl +#include <sysdeps/unix/readdir.c> +#undef readdir64 +weak_alias (__readdir, readdir64) diff --git a/sysdeps/unix/sysv/linux/alpha/readdir64.c b/sysdeps/unix/sysv/linux/alpha/readdir64.c new file mode 100644 index 0000000000..9796431dc4 --- /dev/null +++ b/sysdeps/unix/sysv/linux/alpha/readdir64.c @@ -0,0 +1 @@ +/* readdir64 is in readdir.c */ diff --git a/sysdeps/unix/sysv/linux/alpha/readdir64_r.c b/sysdeps/unix/sysv/linux/alpha/readdir64_r.c new file mode 100644 index 0000000000..b8fe9a31b4 --- /dev/null +++ b/sysdeps/unix/sysv/linux/alpha/readdir64_r.c @@ -0,0 +1 @@ +/* readdir64_r is in readdir_r.c */ diff --git a/sysdeps/unix/sysv/linux/alpha/readdir_r.c b/sysdeps/unix/sysv/linux/alpha/readdir_r.c new file mode 100644 index 0000000000..adb92db6af --- /dev/null +++ b/sysdeps/unix/sysv/linux/alpha/readdir_r.c @@ -0,0 +1,4 @@ +#define readdir64_r __no_readdir64_r_decl +#include <sysdeps/unix/readdir_r.c> +#undef readdir64_r +weak_alias (__readdir_r, readdir64_r) diff --git a/sysdeps/unix/sysv/linux/alpha/setrlimit64.c b/sysdeps/unix/sysv/linux/alpha/setrlimit64.c new file mode 100644 index 0000000000..8edcff0086 --- /dev/null +++ b/sysdeps/unix/sysv/linux/alpha/setrlimit64.c @@ -0,0 +1 @@ +/* setrlimit64 is the same as setrlimit. */ diff --git a/sysdeps/unix/sysv/linux/alpha/statfs64.c b/sysdeps/unix/sysv/linux/alpha/statfs64.c new file mode 100644 index 0000000000..06bc68826f --- /dev/null +++ b/sysdeps/unix/sysv/linux/alpha/statfs64.c @@ -0,0 +1 @@ +/* statfs64 is the same as statfs. */ diff --git a/sysdeps/unix/sysv/linux/alpha/syscalls.list b/sysdeps/unix/sysv/linux/alpha/syscalls.list index d3bc033b3d..af964718bc 100644 --- a/sysdeps/unix/sysv/linux/alpha/syscalls.list +++ b/sysdeps/unix/sysv/linux/alpha/syscalls.list @@ -23,10 +23,14 @@ mmap - mmap 6 __mmap mmap llseek EXTRA lseek 3 __llseek llseek lseek64 pread EXTRA pread 4 __pread pread __pread64 pread64 pwrite EXTRA pwrite 4 __pwrite pwrite __pwrite64 pwrite64 +fstatfs - fstatfs 2 __fstatfs fstatfs fstatfs64 +statfs - statfs 2 __statfs statfs statfs64 +getrlimit - getrlimit 2 getrlimit getrlimit64 +setrlimit - setrlimit 2 setrlimit setrlimit64 +ftruncate - ftruncate 2 ftruncate ftruncate64 +truncate - truncate 2 truncate truncate64 # these are actually common with the x86: -fstatfs - fstatfs 2 __fstatfs fstatfs -statfs - statfs 2 __statfs statfs sys_ustat ustat ustat 2 __syscall_ustat sys_mknod xmknod mknod 3 __syscall_mknod diff --git a/sysdeps/unix/sysv/linux/alpha/truncate64.c b/sysdeps/unix/sysv/linux/alpha/truncate64.c new file mode 100644 index 0000000000..8999768874 --- /dev/null +++ b/sysdeps/unix/sysv/linux/alpha/truncate64.c @@ -0,0 +1 @@ +/* truncate64 is the same as truncate. */ diff --git a/sysdeps/unix/sysv/linux/bits/msq.h b/sysdeps/unix/sysv/linux/bits/msq.h index 9d0b9a9afa..d7a8e5ee0f 100644 --- a/sysdeps/unix/sysv/linux/bits/msq.h +++ b/sysdeps/unix/sysv/linux/bits/msq.h @@ -17,7 +17,7 @@ Boston, MA 02111-1307, USA. */ #ifndef _SYS_MSG_H -#error "Never use <bits/msq.h> directly; include <sys/msg.h> instead." +# error "Never use <bits/msq.h> directly; include <sys/msg.h> instead." #endif #include <sys/types.h> @@ -28,7 +28,7 @@ /* Structure of record for one message inside the kernel. - The type `struct __msg' is opaque. */ + The type `struct msg' is opaque. */ struct msqid_ds { struct ipc_perm msg_perm; /* structure describing operation permission */ @@ -42,17 +42,17 @@ struct msqid_ds unsigned short int __msg_cbytes;/* current number of bytes on queue */ unsigned short int msg_qnum; /* number of messages currently on queue */ unsigned short int msg_qbytes;/* max number of bytes allowed on queue */ - int msg_lspid; /* pid of last msgsnd() */ - int msg_lrpid; /* pid of last msgrcv() */ + __ipc_pid_t msg_lspid; /* pid of last msgsnd() */ + __ipc_pid_t msg_lrpid; /* pid of last msgrcv() */ }; #ifdef __USE_MISC -#define msg_cbytes __msg_cbytes +# define msg_cbytes __msg_cbytes /* ipcs ctl commands */ -#define MSG_STAT 11 -#define MSG_INFO 12 +# define MSG_STAT 11 +# define MSG_INFO 12 /* buffer for msgctl calls IPC_INFO, MSG_INFO */ struct msginfo @@ -64,7 +64,7 @@ struct msginfo int msgmni; int msgssz; int msgtql; - ushort msgseg; + unsigned short int msgseg; }; #endif /* __USE_MISC */ diff --git a/sysdeps/unix/sysv/linux/bits/resource.h b/sysdeps/unix/sysv/linux/bits/resource.h index f825cba929..c649217e7e 100644 --- a/sysdeps/unix/sysv/linux/bits/resource.h +++ b/sysdeps/unix/sysv/linux/bits/resource.h @@ -102,12 +102,20 @@ enum __rlimit_resource RLIM_NLIMITS = RLIMIT_NLIMITS, #define RLIMIT_NLIMITS RLIMIT_NLIMITS #define RLIM_NLIMITS RLIM_NLIMITS - - /* Value to indicate that there is no limit. */ - RLIM_INFINITY = (long int)(~0UL >> 1) -#define RLIM_INFINITY RLIM_INFINITY }; +/* Value to indicate that there is no limit. */ +#ifndef __USE_FILE_OFFSET64 +# define RLIM_INFINITY ((long int)(~0UL >> 1)) +#else +# define RLIM_INFINITY 0x7fffffffffffffffLL +#endif + +#ifdef __USE_LARGEFILE64 +# define RLIM64_INFINITY 0x7fffffffffffffffLL +#endif + + /* Type for resource quantity measurement. */ #ifndef __USE_FILE_OFFSET64 typedef __rlim_t rlim_t; diff --git a/sysdeps/unix/sysv/linux/bits/shm.h b/sysdeps/unix/sysv/linux/bits/shm.h index 6f5f840909..c7070595b8 100644 --- a/sysdeps/unix/sysv/linux/bits/shm.h +++ b/sysdeps/unix/sysv/linux/bits/shm.h @@ -44,8 +44,8 @@ struct shmid_ds __time_t shm_atime; /* time of last shmat() */ __time_t shm_dtime; /* time of last shmdt() */ __time_t shm_ctime; /* time of last change by shmctl() */ - int shm_cpid; /* pid of creator */ - int shm_lpid; /* pid of last shmop */ + __ipc_pid_t shm_cpid; /* pid of creator */ + __ipc_pid_t shm_lpid; /* pid of last shmop */ unsigned short int shm_nattch; /* number of current attaches */ unsigned short int __shm_npages; /* size of segment (pages) */ unsigned long int *__shm_pages; /* array of ptrs to frames -> SHMMAX */ @@ -73,12 +73,12 @@ struct shminfo struct shm_info { - int used_ids; - ulong shm_tot; /* total allocated shm */ - ulong shm_rss; /* total resident shm */ - ulong shm_swp; /* total swapped shm */ - ulong swap_attempts; - ulong swap_successes; + int used_ids; + unsigned long int shm_tot; /* total allocated shm */ + unsigned long int shm_rss; /* total resident shm */ + unsigned long int shm_swp; /* total swapped shm */ + unsigned long int swap_attempts; + unsigned long int swap_successes; }; #endif /* __USE_MISC */ diff --git a/sysdeps/unix/sysv/linux/bits/termios.h b/sysdeps/unix/sysv/linux/bits/termios.h index 926c3f32f4..0a5891210e 100644 --- a/sysdeps/unix/sysv/linux/bits/termios.h +++ b/sysdeps/unix/sysv/linux/bits/termios.h @@ -82,32 +82,40 @@ struct termios #define ONLRET 0000040 #define OFILL 0000100 #define OFDEL 0000200 -#define NLDLY 0000400 -#define NL0 0000000 -#define NL1 0000400 -#define CRDLY 0003000 -#define CR0 0000000 -#define CR1 0001000 -#define CR2 0002000 -#define CR3 0003000 -#define TABDLY 0014000 -#define TAB0 0000000 -#define TAB1 0004000 -#define TAB2 0010000 -#define TAB3 0014000 -#define XTABS 0014000 -#define BSDLY 0020000 -#define BS0 0000000 -#define BS1 0020000 +#if !defined __USE_POSIX || defined __USE_UNIX98 +# define NLDLY 0000400 +# define NL0 0000000 +# define NL1 0000400 +# define CRDLY 0003000 +# define CR0 0000000 +# define CR1 0001000 +# define CR2 0002000 +# define CR3 0003000 +# define TABDLY 0014000 +# define TAB0 0000000 +# define TAB1 0004000 +# define TAB2 0010000 +# define TAB3 0014000 +# define BSDLY 0020000 +# define BS0 0000000 +# define BS1 0020000 +# define FFDLY 0100000 +# define FF0 0000000 +# define FF1 0100000 +#endif + #define VTDLY 0040000 #define VT0 0000000 #define VT1 0040000 -#define FFDLY 0100000 -#define FF0 0000000 -#define FF1 0100000 + +#if (!defined __USE_POSIX && !defined __USE_XOPEN) || defined __USE_GNU +# define XTABS 0014000 +#endif /* c_cflag bit meaning */ -#define CBAUD 0010017 +#if (!defined __USE_POSIX && !defined __USE_XOPEN) || defined __USE_GNU +# define CBAUD 0010017 +#endif #define B0 0000000 /* hang up */ #define B50 0000001 #define B75 0000002 @@ -124,8 +132,10 @@ struct termios #define B9600 0000015 #define B19200 0000016 #define B38400 0000017 -#define EXTA B19200 -#define EXTB B38400 +#if (!defined __USE_POSIX && !defined __USE_XOPEN) || defined __USE_GNU +# define EXTA B19200 +# define EXTB B38400 +#endif #define CSIZE 0000060 #define CS5 0000000 #define CS6 0000020 @@ -137,29 +147,37 @@ struct termios #define PARODD 0001000 #define HUPCL 0002000 #define CLOCAL 0004000 -#define CBAUDEX 0010000 +#if (!defined __USE_POSIX && !defined __USE_XOPEN) || defined __USE_GNU +# define CBAUDEX 0010000 +#endif #define B57600 0010001 #define B115200 0010002 #define B230400 0010003 #define B460800 0010004 -#define CIBAUD 002003600000 /* input baud rate (not used) */ -#define CRTSCTS 020000000000 /* flow control */ +#if (!defined __USE_POSIX && !defined __USE_XOPEN) || defined __USE_GNU +# define CIBAUD 002003600000 /* input baud rate (not used) */ +# define CRTSCTS 020000000000 /* flow control */ +#endif /* c_lflag bits */ #define ISIG 0000001 #define ICANON 0000002 -#define XCASE 0000004 +#if !defined __USE_POSIX || defined __USE_UNIX98 +# define XCASE 0000004 +#endif #define ECHO 0000010 #define ECHOE 0000020 #define ECHOK 0000040 #define ECHONL 0000100 #define NOFLSH 0000200 #define TOSTOP 0000400 -#define ECHOCTL 0001000 -#define ECHOPRT 0002000 -#define ECHOKE 0004000 -#define FLUSHO 0010000 -#define PENDIN 0040000 +#if (!defined __USE_POSIX && !defined __USE_XOPEN) || defined __USE_GNU +# define ECHOCTL 0001000 +# define ECHOPRT 0002000 +# define ECHOKE 0004000 +# define FLUSHO 0010000 +# define PENDIN 0040000 +#endif #define IEXTEN 0100000 /* tcflow() and TCXONC use these */ diff --git a/sysdeps/unix/sysv/linux/bits/types.h b/sysdeps/unix/sysv/linux/bits/types.h index dec60e244b..723e0ff223 100644 --- a/sysdeps/unix/sysv/linux/bits/types.h +++ b/sysdeps/unix/sysv/linux/bits/types.h @@ -103,6 +103,9 @@ typedef struct typedef int __key_t; +/* Used in `struct shmid_ds'. */ +typedef short int __ipc_pid_t; + /* Types from the Large File Support interface. */ diff --git a/sysdeps/unix/sysv/linux/fxstat64.c b/sysdeps/unix/sysv/linux/fxstat64.c new file mode 100644 index 0000000000..f6884998c7 --- /dev/null +++ b/sysdeps/unix/sysv/linux/fxstat64.c @@ -0,0 +1,41 @@ +/* fxstat64 using old-style Unix fstat system call. + Copyright (C) 1997 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 Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <errno.h> +#include <stddef.h> +#include <sys/stat.h> +#include <kernel_stat.h> + +#include <xstatconv.c> + +extern int __syscall_fstat (int, struct kernel_stat *); + +/* Get information about the file FD in BUF. */ +int +__fxstat64 (int vers, int fd, struct stat64 *buf) +{ + struct kernel_stat kbuf; + int result; + + result = __syscall_fstat (fd, &kbuf); + if (result == 0) + result = xstat64_conv (vers, &kbuf, buf); + + return result; +} diff --git a/sysdeps/unix/sysv/linux/getdents.c b/sysdeps/unix/sysv/linux/getdents.c index b4b12d48eb..b1b532a396 100644 --- a/sysdeps/unix/sysv/linux/getdents.c +++ b/sysdeps/unix/sysv/linux/getdents.c @@ -46,6 +46,10 @@ struct kernel_dirent char d_name[256]; }; +#ifdef GETDENTS64 +#define __getdirentries __getdirentries64 +#define dirent dirent64 +#endif /* The problem here is that we cannot simply read the next NBYTES bytes. We need to take the additional field into account. We use @@ -111,4 +115,6 @@ __getdirentries (fd, buf, nbytes, basep) return (char *) dp - buf; } +#ifndef GETDENTS64 weak_alias (__getdirentries, getdirentries) +#endif diff --git a/sysdeps/unix/sysv/linux/getdents64.c b/sysdeps/unix/sysv/linux/getdents64.c new file mode 100644 index 0000000000..f50b0be615 --- /dev/null +++ b/sysdeps/unix/sysv/linux/getdents64.c @@ -0,0 +1,2 @@ +#define GETDENTS64 +#include <getdents.c> diff --git a/sysdeps/unix/sysv/linux/lxstat64.c b/sysdeps/unix/sysv/linux/lxstat64.c new file mode 100644 index 0000000000..8813fadd4c --- /dev/null +++ b/sysdeps/unix/sysv/linux/lxstat64.c @@ -0,0 +1,41 @@ +/* lxstat64 using old-style Unix lstat system call. + Copyright (C) 1997 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 Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <errno.h> +#include <stddef.h> +#include <sys/stat.h> +#include <kernel_stat.h> + +#include <xstatconv.c> + +extern int __syscall_lstat (const char *, struct kernel_stat *); + +/* Get information about the file NAME in BUF. */ +int +__lxstat64 (int vers, const char *name, struct stat64 *buf) +{ + struct kernel_stat kbuf; + int result; + + result = __syscall_lstat (name, &kbuf); + if (result == 0) + result = xstat64_conv (vers, &kbuf, buf); + + return result; +} diff --git a/sysdeps/unix/sysv/linux/mips/bits/types.h b/sysdeps/unix/sysv/linux/mips/bits/types.h new file mode 100644 index 0000000000..56075d13c2 --- /dev/null +++ b/sysdeps/unix/sysv/linux/mips/bits/types.h @@ -0,0 +1,130 @@ +/* Copyright (C) 1991, 92, 94, 95, 96, 97 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 Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +/* + * Never include this file directly; use <sys/types.h> instead. + */ + +#ifndef _BITS_TYPES_H +#define _BITS_TYPES_H 1 + +#include <features.h> + +/* Convenience types. */ +typedef unsigned char __u_char; +typedef unsigned short __u_short; +typedef unsigned int __u_int; +typedef unsigned long __u_long; +#ifdef __GNUC__ +typedef unsigned long long int __u_quad_t; +typedef long long int __quad_t; +#else +typedef struct + { + long int __val[2]; + } __quad_t; +typedef struct + { + __u_long __val[2]; + } __u_quad_t; +#endif +typedef signed char __int8_t; +typedef unsigned char __uint8_t; +typedef signed short int __int16_t; +typedef unsigned short int __uint16_t; +typedef signed int __int32_t; +typedef unsigned int __uint32_t; +#ifdef __GNUC__ +typedef signed long long int __int64_t; +typedef unsigned long long int __uint64_t; +#endif +typedef __quad_t *__qaddr_t; + +typedef __u_quad_t __dev_t; /* Type of device numbers. */ +typedef __u_int __uid_t; /* Type of user identifications. */ +typedef __u_int __gid_t; /* Type of group identifications. */ +typedef __u_long __ino_t; /* Type of file serial numbers. */ +typedef __u_int __mode_t; /* Type of file attribute bitmasks. */ +typedef __u_int __nlink_t; /* Type of file link counts. */ +typedef long int __off_t; /* Type of file sizes and offsets. */ +typedef __quad_t __loff_t; /* Type of file sizes and offsets. */ +typedef int __pid_t; /* Type of process identifications. */ +typedef int __ssize_t; /* Type of a byte count, or error. */ +typedef long int __rlim_t; /* Type of resource counts. */ +typedef __quad_t __rlim64_t; /* Type of resource counts (LFS). */ +typedef __u_int __id_t; /* General type for ID. */ + +typedef struct + { + int __val[2]; + } __fsid_t; /* Type of file system IDs. */ + +/* Everythin' else. */ +typedef int __daddr_t; /* The type of a disk address. */ +typedef char *__caddr_t; +typedef long int __time_t; +typedef long int __swblk_t; /* Type of a swap block maybe? */ + +typedef long int __clock_t; + +/* One element in the file descriptor mask array. */ +typedef unsigned long int __fd_mask; + +/* Number of descriptors that can fit in an `fd_set'. */ +#define __FD_SETSIZE 1024 + +/* It's easier to assume 8-bit bytes than to get CHAR_BIT. */ +#define __NFDBITS (8 * sizeof (__fd_mask)) +#define __FDELT(d) ((d) / __NFDBITS) +#define __FDMASK(d) ((__fd_mask) 1 << ((d) % __NFDBITS)) + +/* fd_set for select and pselect. */ +typedef struct + { + /* XPG4.2 requires this member name. */ + __fd_mask fds_bits[__FD_SETSIZE / __NFDBITS]; + } __fd_set; + + +typedef int __key_t; + +/* Used in `struct shmid_ds'. */ +typedef long int __ipc_pid_t; + + +/* Types from the Large File Support interface. */ + +/* Type to count number os disk blocks. */ +typedef __u_long __blkcnt_t; +typedef __u_quad_t __blkcnt64_t; + +/* Type to count file system blocks. */ +typedef long int __fsblkcnt_t; +typedef __quad_t __fsblkcnt64_t; + +/* Type to count file system inodes. */ +typedef __u_long __fsfilcnt_t; +typedef __u_quad_t __fsfilcnt64_t; + +/* Type of file serial numbers. */ +typedef __u_long __ino64_t; + +/* Type of file sizes and offsets. */ +typedef __loff_t __off64_t; + +#endif /* bits/types.h */ diff --git a/sysdeps/unix/sysv/linux/readdir64.c b/sysdeps/unix/sysv/linux/readdir64.c new file mode 100644 index 0000000000..37623655f4 --- /dev/null +++ b/sysdeps/unix/sysv/linux/readdir64.c @@ -0,0 +1,103 @@ +/* Copyright (C) 1997 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 Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <errno.h> +#include <limits.h> +#include <stddef.h> +#include <string.h> +#include <dirent.h> +#include <unistd.h> +#include <sys/types.h> +#include <assert.h> + +#include <dirstream.h> + +extern ssize_t __getdirentries64 (int, char *, size_t, off_t *); + + +/* Read a directory entry from DIRP. */ +struct dirent64 * +readdir64 (DIR *dirp) +{ + struct dirent64 *dp; + + __libc_lock_lock (dirp->lock); + + do + { + size_t reclen; + + if (dirp->offset >= dirp->size) + { + /* We've emptied out our buffer. Refill it. */ + + size_t maxread; + off_t base; + ssize_t bytes; + +#ifndef _DIRENT_HAVE_D_RECLEN + /* Fixed-size struct; must read one at a time (see below). */ + maxread = sizeof *dp; +#else + maxread = dirp->allocation; +#endif + + base = dirp->filepos; + bytes = __getdirentries64 (dirp->fd, dirp->data, maxread, &base); + if (bytes <= 0) + { + dp = NULL; + break; + } + dirp->size = (size_t) bytes; + + /* Reset the offset into the buffer. */ + dirp->offset = 0; + } + + dp = (struct dirent64 *) &dirp->data[dirp->offset]; + +#ifdef _DIRENT_HAVE_D_RECLEN + reclen = dp->d_reclen; +#else + /* The only version of `struct dirent64' that lacks `d_reclen' + is fixed-size. */ + assert (sizeof dp->d_name > 1); + reclen = sizeof *dp; + /* The name is not terminated if it is the largest possible size. + Clobber the following byte to ensure proper null termination. We + read jst one entry at a time above so we know that byte will not + be used later. */ + dp->d_name[sizeof dp->d_name] = '\0'; +#endif + + dirp->offset += reclen; + +#ifdef _DIRENT_HAVE_D_OFF + dirp->filepos = dp->d_off; +#else + dirp->filepos += reclen; +#endif + + /* Skip deleted files. */ + } while (dp->d_ino == 0); + + __libc_lock_unlock (dirp->lock); + + return dp; +} diff --git a/sysdeps/unix/sysv/linux/readdir64_r.c b/sysdeps/unix/sysv/linux/readdir64_r.c new file mode 100644 index 0000000000..57ae4c786e --- /dev/null +++ b/sysdeps/unix/sysv/linux/readdir64_r.c @@ -0,0 +1,107 @@ +/* Copyright (C) 1997 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 Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <errno.h> +#include <limits.h> +#include <stddef.h> +#include <string.h> +#include <dirent.h> +#include <unistd.h> +#include <sys/types.h> +#include <assert.h> + +#include <dirstream.h> + +extern ssize_t __getdirentries64 (int, char *, size_t, off_t *); + + +/* Read a directory entry from DIRP, store result in ENTRY and return + pointer to result in *RESULT. */ +int +readdir64_r (DIR *dirp, struct dirent64 *entry, struct dirent64 **result) +{ + struct dirent64 *dp; + size_t reclen; + + __libc_lock_lock (dirp->lock); + + do + { + if (dirp->offset >= dirp->size) + { + /* We've emptied out our buffer. Refill it. */ + + size_t maxread; + off_t base; + ssize_t bytes; + +#ifndef _DIRENT_HAVE_D_RECLEN + /* Fixed-size struct; must read one at a time (see below). */ + maxread = sizeof *dp; +#else + maxread = dirp->allocation; +#endif + + base = dirp->filepos; + bytes = __getdirentries64 (dirp->fd, dirp->data, maxread, &base); + if (bytes <= 0) + { + dp = NULL; + reclen = 0; + break; + } + dirp->size = (size_t) bytes; + + /* Reset the offset into the buffer. */ + dirp->offset = 0; + } + + dp = (struct dirent64 *) &dirp->data[dirp->offset]; + +#ifdef _DIRENT_HAVE_D_RECLEN + reclen = dp->d_reclen; +#else + /* The only version of `struct dirent64' that lacks `d_reclen' + is fixed-size. */ + assert (sizeof dp->d_name > 1); + reclen = sizeof *dp; + /* The name is not terminated if it is the largest possible size. + Clobber the following byte to ensure proper null termination. We + read just one entry at a time above so we know that byte will not + be used later. */ + dp->d_name[sizeof dp->d_name] = '\0'; +#endif + + dirp->offset += reclen; + +#ifdef _DIRENT_HAVE_D_OFF + dirp->filepos = dp->d_off; +#else + dirp->filepos += reclen; +#endif + + /* Skip deleted files. */ + } while (dp->d_ino == 0); + + if (dp != NULL) + *result = memcpy (entry, dp, reclen); + + __libc_lock_unlock (dirp->lock); + + return dp != NULL ? 0 : errno; +} diff --git a/sysdeps/unix/sysv/linux/powerpc/sigreturn.S b/sysdeps/unix/sysv/linux/rt_sigpending.c index 9b9413e2f3..b605315644 100644 --- a/sysdeps/unix/sysv/linux/powerpc/sigreturn.S +++ b/sysdeps/unix/sysv/linux/rt_sigpending.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1997 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 @@ -16,8 +16,12 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include <sysdep.h> +#include <errno.h> +#include <signal.h> -PSEUDO (__sigreturn, sigreturn, 1) - /* Shouldn't get here. */ -PSEUDO_END(__sigreturn) +int +__syscall_rt_sigpending (sigset_t *set, size_t setsize) +{ + __set_errno (ENOSYS); + return -1; +} diff --git a/sysdeps/unix/sysv/linux/siglist.c b/sysdeps/unix/sysv/linux/siglist.c index 9f42cc0a87..6bb8562899 100644 --- a/sysdeps/unix/sysv/linux/siglist.c +++ b/sysdeps/unix/sysv/linux/siglist.c @@ -21,6 +21,6 @@ default_symbol_version (__new_sys_siglist, _sys_siglist, GLIBC_2.1); default_symbol_version (_new_sys_siglist, sys_siglist, GLIBC_2.1); default_symbol_version (__new_sys_sigabbrev, sys_sigabbrev, GLIBC_2.1); #else -weak_alias(_sys_siglist, sys_siglist) -weak_alias(_sys_sigabbrev, sys_sigabbrev) +weak_alias(__new_sys_siglist, sys_siglist) +weak_alias(__new_sys_sigabbrev, sys_sigabbrev) #endif diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/bits/types.h b/sysdeps/unix/sysv/linux/sparc/sparc64/bits/types.h index 0c421fb7a7..5ee6c0ee7a 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/bits/types.h +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/bits/types.h @@ -95,6 +95,9 @@ typedef struct typedef int __key_t; +/* Used in `struct shmid_ds'. */ +typedef int __ipc_pid_t; + /* Types from the Large File Support interface. */ diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/fstatfs64.c b/sysdeps/unix/sysv/linux/sparc/sparc64/fstatfs64.c new file mode 100644 index 0000000000..2be4e59ba4 --- /dev/null +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/fstatfs64.c @@ -0,0 +1 @@ +/* fstatfs64 is the same as fstatfs. */ diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/ftruncate64.c b/sysdeps/unix/sysv/linux/sparc/sparc64/ftruncate64.c new file mode 100644 index 0000000000..673a8b525a --- /dev/null +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/ftruncate64.c @@ -0,0 +1 @@ +/* ftruncate64 is the same as ftruncate. */ diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/getrlimit64.c b/sysdeps/unix/sysv/linux/sparc/sparc64/getrlimit64.c new file mode 100644 index 0000000000..9feab0e6b8 --- /dev/null +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/getrlimit64.c @@ -0,0 +1 @@ +/* getrlimit64 is the same as getrlimit. */ diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/readdir.c b/sysdeps/unix/sysv/linux/sparc/sparc64/readdir.c new file mode 100644 index 0000000000..96a6a76945 --- /dev/null +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/readdir.c @@ -0,0 +1,4 @@ +#define readdir64 __no_readdir64_decl +#include <sysdeps/unix/readdir.c> +#undef readdir64 +weak_alias (__readdir, readdir64) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/readdir64.c b/sysdeps/unix/sysv/linux/sparc/sparc64/readdir64.c new file mode 100644 index 0000000000..9796431dc4 --- /dev/null +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/readdir64.c @@ -0,0 +1 @@ +/* readdir64 is in readdir.c */ diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/readdir64_r.c b/sysdeps/unix/sysv/linux/sparc/sparc64/readdir64_r.c new file mode 100644 index 0000000000..b8fe9a31b4 --- /dev/null +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/readdir64_r.c @@ -0,0 +1 @@ +/* readdir64_r is in readdir_r.c */ diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/readdir_r.c b/sysdeps/unix/sysv/linux/sparc/sparc64/readdir_r.c new file mode 100644 index 0000000000..adb92db6af --- /dev/null +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/readdir_r.c @@ -0,0 +1,4 @@ +#define readdir64_r __no_readdir64_r_decl +#include <sysdeps/unix/readdir_r.c> +#undef readdir64_r +weak_alias (__readdir_r, readdir64_r) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/setrlimit64.c b/sysdeps/unix/sysv/linux/sparc/sparc64/setrlimit64.c new file mode 100644 index 0000000000..8edcff0086 --- /dev/null +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/setrlimit64.c @@ -0,0 +1 @@ +/* setrlimit64 is the same as setrlimit. */ diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/statfs64.c b/sysdeps/unix/sysv/linux/sparc/sparc64/statfs64.c new file mode 100644 index 0000000000..06bc68826f --- /dev/null +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/statfs64.c @@ -0,0 +1 @@ +/* statfs64 is the same as statfs. */ diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list b/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list index 6491a9ccac..7e64daf578 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list @@ -4,6 +4,12 @@ llseek EXTRA lseek 3 __llseek llseek lseek64 pread EXTRA pread 4 __pread pread __pread64 pread64 pwrite EXTRA pwrite 4 __pwrite pwrite __pwrite64 pwrite64 +fstatfs - fstatfs 2 __fstatfs fstatfs fstatfs64 +statfs - statfs 2 __statfs statfs statfs64 +getrlimit - getrlimit 2 getrlimit getrlimit64 +setrlimit - setrlimit 2 setrlimit setrlimit64 +ftruncate - ftruncate 2 ftruncate ftruncate64 +truncate - truncate 2 truncate truncate64 # Override select.S in parent directory: select - select 5 __select select diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/truncate64.c b/sysdeps/unix/sysv/linux/sparc/sparc64/truncate64.c new file mode 100644 index 0000000000..8999768874 --- /dev/null +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/truncate64.c @@ -0,0 +1 @@ +/* truncate64 is the same as truncate. */ diff --git a/sysdeps/unix/sysv/linux/stdio_lim.h.in b/sysdeps/unix/sysv/linux/stdio_lim.h.in index 7fa98f7733..07280956f2 100644 --- a/sysdeps/unix/sysv/linux/stdio_lim.h.in +++ b/sysdeps/unix/sysv/linux/stdio_lim.h.in @@ -17,17 +17,24 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#ifndef _STDIO_H +#if !defined _STDIO_H && !defined __need_FOPEN_MAX # error "Never include <bits/stdio_lim.h> directly; use <stdio.h> instead." #endif -#define L_tmpnam 19 -#define TMP_MAX 238328 +#ifndef __need_FOPEN_MAX +# define L_tmpnam 19 +# define TMP_MAX 238328 -#ifdef __USE_POSIX -# define L_ctermid 9 -# define L_cuserid 9 +# ifdef __USE_POSIX +# define L_ctermid 9 +# define L_cuserid 9 +# endif + +# define FILENAME_MAX DEFAULT_FILENAME_MAX #endif -#define FOPEN_MAX DEFAULT_FOPEN_MAX -#define FILENAME_MAX DEFAULT_FILENAME_MAX +#if defined __need_FOPEN_MAX && !defined __defined_FOPEN_MAX +# define __defined_FOPEN_MAX +# define FOPEN_MAX DEFAULT_FOPEN_MAX +#endif +#undef __need_FOPEN_MAX diff --git a/sysdeps/unix/sysv/linux/testrtsig.h b/sysdeps/unix/sysv/linux/testrtsig.h index 7256d71227..7c41877e66 100644 --- a/sysdeps/unix/sysv/linux/testrtsig.h +++ b/sysdeps/unix/sysv/linux/testrtsig.h @@ -21,10 +21,10 @@ #include <string.h> #include <sys/utsname.h> -int +static int kernel_has_rtsig (void) { struct utsname name; - return uname (&name) < 0 || __strverscmp (name.release, "2.1.70") >= 0; + return uname (&name) == 0 && __strverscmp (name.release, "2.1.70") >= 0; } diff --git a/sysdeps/unix/sysv/linux/ulimit.c b/sysdeps/unix/sysv/linux/ulimit.c index ef224d22ac..58ff111612 100644 --- a/sysdeps/unix/sysv/linux/ulimit.c +++ b/sysdeps/unix/sysv/linux/ulimit.c @@ -16,10 +16,11 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#include <errno.h> +#include <stdarg.h> #include <sysdep.h> -#include <sys/resource.h> #include <unistd.h> -#include <errno.h> +#include <sys/resource.h> /* Function depends on CMD: 1 = Return the limit on the size of a file, in units of 512 bytes. @@ -31,42 +32,46 @@ can open. Returns -1 on errors. */ long int -__ulimit (cmd, newlimit) - int cmd; - long int newlimit; +__ulimit (int cmd, ...) { - int status; + struct rlimit limit; + va_list va; + long int result = -1; + + va_start (va, cmd); switch (cmd) { - case 1: - { - /* Get limit on file size. */ - struct rlimit fsize; - - status = getrlimit (RLIMIT_FSIZE, &fsize); - if (status < 0) - return -1; - + case UL_GETFSIZE: + /* Get limit on file size. */ + if (getrlimit (RLIMIT_FSIZE, &limit) == 0) /* Convert from bytes to 512 byte units. */ - return fsize.rlim_cur / 512; - } - case 2: + result = limit.rlim_cur / 512; + break; + + case UL_SETFSIZE: /* Set limit on file size. */ { - struct rlimit fsize; - fsize.rlim_cur = newlimit * 512; - fsize.rlim_max = newlimit * 512; + long int newlimit = va_arg (va, long int); + + limit.rlim_cur = newlimit * 512; + limit.rlim_max = newlimit * 512; - return setrlimit (RLIMIT_FSIZE, &fsize); + result = setrlimit (RLIMIT_FSIZE, &limit); } - case 4: - return sysconf (_SC_OPEN_MAX); + break; + + case __UL_GETOPENMAX: + result = sysconf (_SC_OPEN_MAX); + break; default: __set_errno (EINVAL); - return -1; } + + va_end (va); + + return result; } weak_alias (__ulimit, ulimit); diff --git a/sysdeps/unix/sysv/linux/xstat64.c b/sysdeps/unix/sysv/linux/xstat64.c new file mode 100644 index 0000000000..02f70c5c51 --- /dev/null +++ b/sysdeps/unix/sysv/linux/xstat64.c @@ -0,0 +1,41 @@ +/* xstat64 using old-style Unix stat system call. + Copyright (C) 1991, 1995, 1996, 1997 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 Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <errno.h> +#include <stddef.h> +#include <sys/stat.h> +#include <kernel_stat.h> + +#include <xstatconv.c> + +extern int __syscall_stat (const char *, struct kernel_stat *); + +/* Get information about the file NAME in BUF. */ +int +__xstat64 (int vers, const char *name, struct stat64 *buf) +{ + struct kernel_stat kbuf; + int result; + + result = __syscall_stat (name, &kbuf); + if (result == 0) + result = xstat64_conv (vers, &kbuf, buf); + + return result; +} diff --git a/sysdeps/unix/sysv/linux/xstatconv.c b/sysdeps/unix/sysv/linux/xstatconv.c index fcf2f3b9f6..0a8e0c47f9 100644 --- a/sysdeps/unix/sysv/linux/xstatconv.c +++ b/sysdeps/unix/sysv/linux/xstatconv.c @@ -81,3 +81,65 @@ xstat_conv (int vers, struct kernel_stat *kbuf, void *ubuf) return 0; } + +static inline int +xstat64_conv (int vers, struct kernel_stat *kbuf, void *ubuf) +{ +#ifdef XSTAT_IS_XSTAT64 + return xstat_conv (vers, kbuf, ubuf); +#else + switch (vers) + { + case _STAT_VER_LINUX: + { + struct stat64 *buf = ubuf; + + /* Convert to current kernel version of `struct stat64'. */ + buf->st_dev = kbuf->st_dev; +#ifdef _HAVE___PAD1 + buf->__pad1 = 0; +#endif + buf->st_ino = kbuf->st_ino; + buf->st_mode = kbuf->st_mode; + buf->st_nlink = kbuf->st_nlink; + buf->st_uid = kbuf->st_uid; + buf->st_gid = kbuf->st_gid; + buf->st_rdev = kbuf->st_rdev; +#ifdef _HAVE___PAD2 + buf->__pad2 = 0; +#endif + buf->st_size = kbuf->st_size; + buf->st_blksize = kbuf->st_blksize; + buf->st_blocks = kbuf->st_blocks; + buf->st_atime = kbuf->st_atime; +#ifdef _HAVE___UNUSED1 + buf->__unused1 = 0; +#endif + buf->st_mtime = kbuf->st_mtime; +#ifdef _HAVE___UNUSED2 + buf->__unused2 = 0; +#endif + buf->st_ctime = kbuf->st_ctime; +#ifdef _HAVE___UNUSED3 + buf->__unused3 = 0; +#endif +#ifdef _HAVE___UNUSED4 + buf->__unused4 = 0; +#endif +#ifdef _HAVE___UNUSED5 + buf->__unused5 = 0; +#endif + } + break; + + /* If struct stat64 is different from struct stat then + _STAT_VER_KERNEL does not make sense. */ + case _STAT_VER_KERNEL: + default: + __set_errno (EINVAL); + return -1; + } + + return 0; +#endif +} diff --git a/sysdeps/wordsize-32/inttypes.h b/sysdeps/wordsize-32/inttypes.h index f569be5b51..9200b8c2b8 100644 --- a/sysdeps/wordsize-32/inttypes.h +++ b/sysdeps/wordsize-32/inttypes.h @@ -313,20 +313,29 @@ typedef unsigned long long int uint_fast64_t; /* Macros for printing format specifiers. */ /* Decimal notation. */ +#define SCNd8 "hhd" #define SCNd16 "hd" #define SCNd32 "d" #define SCNd64 "lld" +#define SCNi8 "hhi" #define SCNi16 "hi" #define SCNi32 "i" #define SCNi64 "lli" +#define SCNu8 "hhu" +#define SCNu16 "hu" +#define SCNu32 "u" +#define SCNu64 "llu" + /* Octal notation. */ +#define SCNo8 "hho" #define SCNo16 "ho" #define SCNo32 "o" #define SCNo64 "llo" /* Hexadecimal notation. */ +#define SCNx8 "hhx" #define SCNx16 "hx" #define SCNx32 "x" #define SCNx64 "llx" diff --git a/sysdeps/wordsize-64/inttypes.h b/sysdeps/wordsize-64/inttypes.h index c62d516c4b..8ec8095620 100644 --- a/sysdeps/wordsize-64/inttypes.h +++ b/sysdeps/wordsize-64/inttypes.h @@ -313,20 +313,29 @@ typedef unsigned long int uint_fast64_t; /* Macros for printing format specifiers. */ /* Decimal notation. */ +#define SCNd8 "hhd" #define SCNd16 "hd" #define SCNd32 "d" #define SCNd64 "ld" +#define SCNi8 "hhi" #define SCNi16 "hi" #define SCNi32 "i" #define SCNi64 "li" +#define SCNu8 "hhu" +#define SCNu16 "hu" +#define SCNu32 "u" +#define SCNu64 "lu" + /* Octal notation. */ +#define SCNo8 "hho" #define SCNo16 "ho" #define SCNo32 "o" #define SCNo64 "lo" /* Hexadecimal notation. */ +#define SCNx8 "hhx" #define SCNx16 "hx" #define SCNx32 "x" #define SCNx64 "lx" |