diff options
33 files changed, 1062 insertions, 30 deletions
@@ -1,3 +1,44 @@ +Sat Aug 10 13:17:27 1996 David Mosberger-Tang <davidm@azstarnet.com> + + * shadow.h: New file. + + * sysdeps/unix/sysv/linux/netinet/in.h: Move + __BEGIN_DECLS/__END_DECLS up so ntohl() et al are bracketed as + well. + + * socket/sys/socket.h [__cplusplus]: Use old-style __SOCKADDR_ARG. + g++ 2.7.2 (and earlier) has no transparent unions support. + +Fri Aug 9 18:50:06 1996 David Mosberger-Tang <davidm@azstarnet.com> + + * sysdeps/unix/sysv/linux/alpha/ioperm.c (_bus_base_sparse): New + function to determine the base address of sparse bus memory. + (APECS_*): Rename to CIA_*. + (APECS_SPARSE_MEM, CIA_SPARSE_MEM): New macros. + (platform): Add sparse_bus_memory_base member and initialize. + (sparse_bus_memory_base): New variable. + +Tue Aug 6 10:23:18 1996 David Mosberger-Tang <davidm@azstarnet.com> + + * sysdeps/posix/ttyname_r.c (ttyname_r), + sysdeps/posix/ttyname.c (ttyname): Return -1/NULL if + !__isatty(fd) (POSIX.1 says so.) + + * sysdeps/unix/getlogin.c (getlogin): Fix to check fd 0 only. + This is not a gross hack, after all---for compatibility, + getlogin() really should check fd 0 only and not try to base its + operation on the controlling tty. + +Wed Jul 17 10:54:20 1996 David Mosberger-Tang <davidm@azstarnet.com> + + * sysdeps/unix/getlogin.c (getlogin): Add static variable NAME, + change utmp_data from static to auto. + +Sun Aug 11 02:56:08 1996 Ulrich Drepper <drepper@cygnus.com> + + * posix/unistd.h [__USE_MISC]: Add prototype for `nice'. + Reported by David Mosberger-Tang. + Sat Aug 10 02:05:28 1996 Richard Henderson <richard@twiddle.tamu.edu> * sysdeps/libm-ieee754/s_isnan.c [NO_LONG_DOUBLE]: Add strong diff --git a/gmon/sys/gmon.h b/gmon/sys/gmon.h index 8cbd6bd..d963797 100644 --- a/gmon/sys/gmon.h +++ b/gmon/sys/gmon.h @@ -33,10 +33,12 @@ * @(#)gmon.h 8.2 (Berkeley) 1/4/94 */ -#ifndef _SYS_GMON_H_ -#define _SYS_GMON_H_ +#ifndef _SYS_GMON_H_ -#include <sys/cdefs.h> +#define _SYS_GMON_H_ 1 +#include <features.h> + +#include <sys/types.h> /* * See gmon_out.h for gmon.out format. diff --git a/grp/fgetgrent_r.c b/grp/fgetgrent_r.c new file mode 100644 index 0000000..f8b8d97 --- /dev/null +++ b/grp/fgetgrent_r.c @@ -0,0 +1,63 @@ +/* Copyright (C) 1991, 1996 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., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +#include <ctype.h> +#include <grp.h> +#include <stdio.h> + +/* Define a line parsing function using the common code + used in the nss_files module. */ + +#define STRUCTURE group +#define ENTNAME grent +struct grent_data {}; + +#define TRAILING_LIST_MEMBER gr_mem +#define TRAILING_LIST_SEPARATOR_P(c) ((c) == ',') +#include "../nss/nss_files/files-parse.c" +LINE_PARSER +(, + STRING_FIELD (result->gr_name, ISCOLON, 0); + STRING_FIELD (result->gr_passwd, ISCOLON, 0); + INT_FIELD (result->gr_gid, ISCOLON, 0, 10,); + ) + + +/* Read one entry from the given stream. */ +struct group * +__fgetgrent_r (FILE *stream, struct group *result, char *buffer, int buflen) +{ + char *p; + + do + { + p = fgets (buffer, buflen, stream); + if (p == NULL) + return NULL; + + /* Skip leading blanks. */ + while (isspace (*p)) + ++p; + } while (*p == '\0' || *p == '#' || /* Ignore empty and comment lines. */ + /* Parse the line. If it is invalid, loop to + get the next line of the file to parse. */ + ! parse_line (p, result, (void *) buffer, buflen)); + + return result; +} +weak_alias (__fgetgrent_r, fgetgrent_r) @@ -37,6 +37,7 @@ #define _FTS_H_ #include <sys/cdefs.h> +#include <sys/types.h> typedef struct { struct _ftsent *fts_cur; /* current node */ diff --git a/nss/nss_files/files-spwd.c b/nss/nss_files/files-spwd.c new file mode 100644 index 0000000..df0106b --- /dev/null +++ b/nss/nss_files/files-spwd.c @@ -0,0 +1,37 @@ +/* User file parser in nss_files module. +Copyright (C) 1996 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., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +#include <shadow.h> + +#define STRUCTURE spwd +#define ENTNAME spent +#define DATABASE "shadow" +struct spent_data {}; + +/* Our parser function is already defined in sgetspent_r.c, so use that + to parse lines from the database file. */ +#define EXTERN_PARSER +#include "files-parse.c" +#include GENERIC + +DB_LOOKUP (spnam, 1 + strlen (name), (".%s", name), + { + if (! strcmp (name, result->sp_namp)) + break; + }, const char *name) diff --git a/nss/spwd-lookup.c b/nss/spwd-lookup.c new file mode 100644 index 0000000..8832805 --- /dev/null +++ b/nss/spwd-lookup.c @@ -0,0 +1,22 @@ +/* Copyright (C) 1996 Free Software Foundation, Inc. +This file is part of the GNU C Library. +Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. + +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. */ + +#define DATABASE_NAME shadow + +#include "XXX-lookup.c" diff --git a/pwd/fgetpwent_r.c b/pwd/fgetpwent_r.c new file mode 100644 index 0000000..9b58e61 --- /dev/null +++ b/pwd/fgetpwent_r.c @@ -0,0 +1,65 @@ +/* Copyright (C) 1991, 1996 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., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +#include <ctype.h> +#include <stdio.h> +#include <pwd.h> + +/* Define a line parsing function using the common code + used in the nss_files module. */ + +#define STRUCTURE passwd +#define ENTNAME pwent +struct pwent_data {}; + +#include "../nss/nss_files/files-parse.c" +LINE_PARSER +(, + STRING_FIELD (result->pw_name, ISCOLON, 0); + STRING_FIELD (result->pw_passwd, ISCOLON, 0); + INT_FIELD (result->pw_uid, ISCOLON, 0, 10,); + INT_FIELD (result->pw_gid, ISCOLON, 0, 10,); + STRING_FIELD (result->pw_gecos, ISCOLON, 0); + STRING_FIELD (result->pw_dir, ISCOLON, 0); + result->pw_shell = line; + ) + + +/* Read one entry from the given stream. */ +struct passwd * +__fgetpwent_r (FILE *stream, struct passwd *result, char *buffer, int buflen) +{ + char *p; + + do + { + p = fgets (buffer, buflen, stream); + if (p == NULL) + return NULL; + + /* Skip leading blanks. */ + while (isspace (*p)) + ++p; + } while (*p == '\0' || *p == '#' || /* Ignore empty and comment lines. */ + /* Parse the line. If it is invalid, loop to + get the next line of the file to parse. */ + ! parse_line (p, result, (void *) buffer, buflen)); + + return result; +} +weak_alias (__fgetpwent_r, fgetpwent_r) diff --git a/shadow/Makefile b/shadow/Makefile new file mode 100644 index 0000000..943881f --- /dev/null +++ b/shadow/Makefile @@ -0,0 +1,29 @@ +# Copyright (C) 1996 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. + +# +# Makefile for shadow. +# +subdir := shadow + +headers = shadow.h +routines = getspent getspnam sgetspent fgetspent putspent \ + getspent_r getspnam_r sgetspent_r fgetspent_r + + +include ../Rules diff --git a/shadow/fgetspent.c b/shadow/fgetspent.c new file mode 100644 index 0000000..d6c4e4f --- /dev/null +++ b/shadow/fgetspent.c @@ -0,0 +1,31 @@ +/* Copyright (C) 1996 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., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +#include <shadow.h> +#include <stdio.h> + + +/* Read one shadow entry from the given stream. */ +struct spwd * +fgetspent (FILE *stream) +{ + static char buffer[BUFSIZ]; + static struct spwd result; + + return __fgetspent_r (stream, &result, buffer, sizeof buffer); +} diff --git a/shadow/fgetspent_r.c b/shadow/fgetspent_r.c new file mode 100644 index 0000000..6521517 --- /dev/null +++ b/shadow/fgetspent_r.c @@ -0,0 +1,56 @@ +/* Copyright (C) 1996 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., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +#include <ctype.h> +#include <shadow.h> +#include <stdio.h> + +/* Define a line parsing function using the common code + used in the nss_files module. */ + +#define STRUCTURE spwd +#define ENTNAME spent +#define EXTERN_PARSER 1 +struct spent_data {}; + +#include "../nss/nss_files/files-parse.c" + + +/* Read one shadow entry from the given stream. */ +struct spwd * +__fgetspent_r (FILE *stream, struct spwd *result, char *buffer, int buflen) +{ + char *p; + + do + { + p = fgets (buffer, buflen, stream); + if (p == NULL) + return NULL; + + /* Skip leading blanks. */ + while (isspace (*p)) + ++p; + } while (*p == '\0' || *p == '#' || /* Ignore empty and comment lines. */ + /* Parse the line. If it is invalid, loop to + get the next line of the file to parse. */ + ! parse_line (buffer, (void *) result, NULL, 0)); + + return result; +} +weak_alias (__fgetspent_r, fgetspent_r) diff --git a/shadow/getspent.c b/shadow/getspent.c new file mode 100644 index 0000000..4266959 --- /dev/null +++ b/shadow/getspent.c @@ -0,0 +1,30 @@ +/* Copyright (C) 1996 Free Software Foundation, Inc. +This file is part of the GNU C Library. +Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. + +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 <shadow.h> + + +#define LOOKUP_TYPE struct spwd +#define SETFUNC_NAME setspent +#define GETFUNC_NAME getspent +#define ENDFUNC_NAME endspent +#define DATABASE_NAME shadow +#define BUFLEN 1024 + +#include "../nss/getXXent.c" diff --git a/shadow/getspent_r.c b/shadow/getspent_r.c new file mode 100644 index 0000000..d5f1546 --- /dev/null +++ b/shadow/getspent_r.c @@ -0,0 +1,30 @@ +/* Copyright (C) 1996 Free Software Foundation, Inc. +This file is part of the GNU C Library. +Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. + +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/tes +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 <shadow.h> + + +#define LOOKUP_TYPE struct spwd +#define SETFUNC_NAME setspent +#define GETFUNC_NAME getspent +#define ENDFUNC_NAME endspent +#define DATABASE_NAME shadow +#define BUFLEN 1024 + +#include "../nss/getXXent_r.c" diff --git a/shadow/getspnam.c b/shadow/getspnam.c new file mode 100644 index 0000000..6d82f28 --- /dev/null +++ b/shadow/getspnam.c @@ -0,0 +1,30 @@ +/* Copyright (C) 1996 Free Software Foundation, Inc. +This file is part of the GNU C Library. +Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. + +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 <shadow.h> + + +#define LOOKUP_TYPE struct spwd +#define FUNCTION_NAME getspnam +#define DATABASE_NAME shadow +#define ADD_PARAMS const char *name +#define ADD_VARIABLES name +#define BUFLEN 1024 + +#include "../nss/getXXbyYY.c" diff --git a/shadow/getspnam_r.c b/shadow/getspnam_r.c new file mode 100644 index 0000000..148c940 --- /dev/null +++ b/shadow/getspnam_r.c @@ -0,0 +1,30 @@ +/* Copyright (C) 1996 Free Software Foundation, Inc. +This file is part of the GNU C Library. +Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. + +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 <shadow.h> + + +#define LOOKUP_TYPE struct spwd +#define FUNCTION_NAME getspnam +#define DATABASE_NAME shadow +#define ADD_PARAMS const char *name +#define ADD_VARIABLES name +#define BUFLEN 1024 + +#include "../nss/getXXbyYY_r.c" diff --git a/shadow/putspent.c b/shadow/putspent.c new file mode 100644 index 0000000..59dbfda --- /dev/null +++ b/shadow/putspent.c @@ -0,0 +1,80 @@ +/* Copyright (C) 1991, 1992, 1996 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., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +#include <errno.h> +#include <stdio.h> +#include <shadow.h> + + +/* Write an entry to the given stream. + This must know the format of the password file. */ +int +putspent (const struct spwd *p, FILE *stream) +{ + int errors = 0; + + if (fprintf (stream, "%s:%s", p->sp_namp, p->sp_pwdp) < 0) + ++errors; + + if ((p->sp_lstchg != (time_t) -1 + && fprintf (stream, "%ld", p->sp_lstchg) < 0) + || (p->sp_lstchg == (time_t) -1 + && putc (':', stream) == EOF)) + ++errors; + + if ((p->sp_min != (time_t) -1 + && fprintf (stream, "%ld", p->sp_min) < 0) + || (p->sp_min == (time_t) -1 + && putc (':', stream) == EOF)) + ++errors; + + if ((p->sp_max != (time_t) -1 + && fprintf (stream, "%ld", p->sp_max) < 0) + || (p->sp_max == (time_t) -1 + && putc (':', stream) == EOF)) + ++errors; + + if ((p->sp_warn != (time_t) -1 + && fprintf (stream, "%ld", p->sp_warn) < 0) + || (p->sp_warn == (time_t) -1 + && putc (':', stream) == EOF)) + ++errors; + + if ((p->sp_inact != (time_t) -1 + && fprintf (stream, "%ld", p->sp_inact) < 0) + || (p->sp_inact == (time_t) -1 + && putc (':', stream) == EOF)) + ++errors; + + if ((p->sp_expire != (time_t) -1 + && fprintf (stream, "%ld", p->sp_expire) < 0) + || (p->sp_expire == (time_t) -1 + && putc (':', stream) == EOF)) + ++errors; + + if ((p->sp_flag != -1l + && fprintf (stream, "%ld", p->sp_flag) < 0) + || (p->sp_flag == -1l + && putc (':', stream) == EOF)) + ++errors; + + if (putc ('\n', stream) == EOF) + ++errors; + + return errors ? -1 : 0; +} diff --git a/shadow/sgetspent.c b/shadow/sgetspent.c new file mode 100644 index 0000000..a3c61f9 --- /dev/null +++ b/shadow/sgetspent.c @@ -0,0 +1,46 @@ +/* Copyright (C) 1996 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., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +#include <shadow.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + + +#define MAX(a, b) ((a) > (b) ? (a) : (b)) + +/* Read one shadow entry from the given stream. */ +struct spwd * +sgetspent (const char *string) +{ + static struct spwd result; + static int max_size = 0; + static char *buffer = NULL; + int len; + + len = strlen (string) + 1; + if (len > max_size) + { + max_size = MAX (128, len + 32); + buffer = realloc (buffer, max_size); + if (buffer == NULL) + return NULL; + } + + return __sgetspent_r (string, &result, buffer, max_size); +} diff --git a/shadow/sgetspent_r.c b/shadow/sgetspent_r.c new file mode 100644 index 0000000..3ad72f0 --- /dev/null +++ b/shadow/sgetspent_r.c @@ -0,0 +1,72 @@ +/* Copyright (C) 1996 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., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +#include <ctype.h> +#include <shadow.h> +#include <stdio.h> +#include <string.h> + +/* Define a line parsing function using the common code + used in the nss_files module. */ + +#define STRUCTURE spwd +#define ENTNAME spent +struct spent_data {}; + +#include "../nss/nss_files/files-parse.c" +LINE_PARSER +(, + STRING_FIELD (result->sp_namp, ISCOLON, 0); + STRING_FIELD (result->sp_pwdp, ISCOLON, 0); + INT_FIELD (result->sp_lstchg, ISCOLON, 0, 10, (time_t)); + INT_FIELD (result->sp_min, ISCOLON, 0, 10, (time_t)); + INT_FIELD (result->sp_max, ISCOLON, 0, 10, (time_t)); + while (isspace (*line)) + ++line; + if (*line == '\0') + { + /* The old form. */ + result->sp_warn = (time_t) -1; + result->sp_inact = (time_t) -1; + result->sp_expire = (time_t) -1; + result->sp_flag = (time_t) -1; + } + else + { + INT_FIELD (result->sp_warn, ISCOLON, 0, 10, (time_t)); + INT_FIELD (result->sp_inact, ISCOLON, 0, 10, (time_t)); + INT_FIELD (result->sp_expire, ISCOLON, 0, 10, (time_t)); + while (isspace (*line)) + ++line; + if (*line == '\0') + result->sp_flag = -1; + else + INT_FIELD (result->sp_flag, ISCOLON, 0, 10, ); + } + ) + + +/* Read one shadow entry from the given stream. */ +struct spwd * +__sgetspent_r (const char *string, struct spwd *result, char *buffer, + int buflen) +{ + return parse_line (strncpy (string, buffer, buflen), result, NULL, 0) + ? result : NULL; +} +weak_alias (__sgetspent_r, sgetspent_r) diff --git a/shadow/shadow.h b/shadow/shadow.h new file mode 100644 index 0000000..88199a9 --- /dev/null +++ b/shadow/shadow.h @@ -0,0 +1,108 @@ +/* Copyright (C) 1996 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. */ + +/* Declaration of types and functions for shadow password suite. */ + +#ifndef _SHADOW_H + +#define _SHADOW_H 1 +#include <features.h> + +#define __need_FILE +#include <stdio.h> +#define __need_time_t +#include <time.h> + +/* Paths to the userd files. */ +#define SHADOW "/etc/shadow" + + +__BEGIN_DECLS + +/* Structure of the password file. */ +struct spwd +{ + char *sp_namp; /* Login name. */ + char *sp_pwdp; /* Encrypted password. */ + __time_t sp_lstchg; /* Date of last change. */ + __time_t sp_min; /* Minimum number of days between changes. */ + __time_t sp_max; /* Maximum number of days between changes. */ + __time_t sp_warn; /* Number of days to warn user to change + the password. */ + __time_t sp_inact; /* Number of days the account may be + inactive. */ + __time_t sp_expire; /* Number of days since 700101 until account + expires. */ + unsigned long int sp_flag; /* Reserved. */ +}; + + +/* Open database for reading. */ +extern void setspent __P ((void)); + +/* Close database. */ +extern void endspent __P ((void)); + +/* Get next entry from database, perhaps after opening the file. */ +extern struct spwd *getspent __P ((void)); + +/* Get shadow entry matching NAME. */ +extern struct spwd *getspnam __P ((__const char *__name)); + +/* Read shadow entry from STRING. */ +extern struct spwd *sgetspent __P ((__const char *__string)); + +/* Read next shadow entry from STREAM. */ +extern struct spwd *fgetspent __P ((FILE *__stream)); + +/* Write line containing shadow password entry to stream. */ +extern int putspent __P ((__const struct spwd *__p, FILE *__stream)); + + +#ifdef __USE_REENTRANT +/* Reentrant versions of some of the functions above. */ +extern struct spwd *__getspent_r __P ((struct spwd *__result_buf, + char *__buffer, int __buflen)); +extern struct spwd *getspent_r __P ((struct spwd *__result_buf, + char *__buffer, int __buflen)); + +extern struct spwd *__getspnam_r __P ((__const char *__name, + struct spwd *__result_buf, + char *__buffer, int __buflen)); +extern struct spwd *getspnam_r __P ((__const char *__name, + struct spwd *__result_buf, + char *__buffer, int __buflen)); + +extern struct spwd *__sgetspent_r __P ((__const char *__string, + struct spwd *__result_buf, + char *__buffer, int __buflen)); +extern struct spwd *sgetspent_r __P ((__const char *__string, + struct spwd *__result_buf, + char *__buffer, int __buflen)); + +extern struct spwd *__fgetspent_r __P ((FILE *__stream, + struct spwd *__result_buf, + char *__buffer, int __buflen)); +extern struct spwd *fgetspent_r __P ((FILE *__stream, + struct spwd *__result_buf, + char *__buffer, int __buflen)); +#endif /* reentrant */ + +__END_DECLS + +#endif /* shadow.h */ diff --git a/stdio-common/scanf3.c b/stdio-common/scanf3.c index 1a77522..6c840ed 100644 --- a/stdio-common/scanf3.c +++ b/stdio-common/scanf3.c @@ -26,5 +26,4 @@ int main(int arc, char *argv) abort (); return 0; - return 0; } diff --git a/string/argz.h b/string/argz.h index d9314e6..b6906d9 100644 --- a/string/argz.h +++ b/string/argz.h @@ -27,12 +27,14 @@ __BEGIN_DECLS +#ifdef __USE_GNU + /* Make a '\0' separated arg vector from a unix argv vector, returning it in ARGZ, and the total length in LEN. If a memory allocation error occurs, ENOMEM is returned, otherwise 0. The result can be destroyed using free. */ -extern error_t __argz_create __P ((char *const __argv[], char **__argz, +extern error_t __argz_create __P ((char *__const __argv[], char **__argz, size_t *__len)); -extern error_t argz_create __P ((char *const __argv[], char **__argz, +extern error_t argz_create __P ((char *__const __argv[], char **__argz, size_t *__len)); /* Make a '\0' separated arg vector from a SEP separated list in @@ -130,4 +132,6 @@ argz_next (char *__argz, size_t __argz_len, const char *__entry) } #endif /* optimizing GCC2 */ +#endif /* use GNU */ + #endif /* __ARGZ_H__ */ diff --git a/sysdeps/i386/i686/Implies b/sysdeps/i386/i686/Implies new file mode 100644 index 0000000..75fde78 --- /dev/null +++ b/sysdeps/i386/i686/Implies @@ -0,0 +1,2 @@ +# Code optimized for i586 is better than simple i386 code. +i386/i586 diff --git a/sysdeps/libm-ieee754/s_isnan.c b/sysdeps/libm-ieee754/s_isnan.c index 4d8983c..1aed525 100644 --- a/sysdeps/libm-ieee754/s_isnan.c +++ b/sysdeps/libm-ieee754/s_isnan.c @@ -38,5 +38,6 @@ static char rcsid[] = "$NetBSD: s_isnan.c,v 1.8 1995/05/10 20:47:36 jtc Exp $"; } weak_alias (__isnan, isnan) #ifdef NO_LONG_DOUBLE +strong_alias (__isnan, __isnanl) weak_alias (__isnan, isnanl) #endif diff --git a/sysdeps/posix/tempname.c b/sysdeps/posix/tempname.c index 5881feb..0f088ec 100644 --- a/sysdeps/posix/tempname.c +++ b/sysdeps/posix/tempname.c @@ -202,7 +202,6 @@ __stdio_gen_tempname (const char *dir, const char *pfx, int dir_search, goto lose; } fp->file._flags &= ~_IO_DELETE_DONT_CLOSE; - fp->file._IO_file_flags = 0; *streamptr = (FILE *) fp; #else diff --git a/sysdeps/unix/sysv/linux/alpha/clone.S b/sysdeps/unix/sysv/linux/alpha/clone.S new file mode 100644 index 0000000..a1ef324 --- /dev/null +++ b/sysdeps/unix/sysv/linux/alpha/clone.S @@ -0,0 +1,118 @@ +/* Copyright (C) 1996 Free Software Foundation, Inc. + Contributed by Richard Henderson (rth@tamu.edu) + +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., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +/* clone() is even more special than fork() as it mucks with stacks + and invokes a function in the right context after its all over. */ + +#include <sysdep.h> +#include <errnos.h> + +/* int clone(int (*fn)(), void *child_stack, int flags, int nargs, ...) */ + + .text +ENTRY(__clone) + lda sp,-16(sp) + .frame sp,16,$26,0 + /* Save rest of argument registers for varargs-type work. */ + stq a4,0(sp) + stq a5,8(sp) + .prologue 1 + + /* Sanity check arguments. */ + sextl a3,a3 + ldiq v0,EINVAL + beq a0,$error /* no NULL function pointers */ + beq a1,$error /* no NULL stack pointers */ + blt a3,$error /* no negative argument counts */ + + /* Allocate space on the new stack and copy args over */ + mov a3,t0 /* save nargs for thread_start */ + s8addq a3,sp,t1 +1: ldq t2,-8(t1) + subq t1,8,t1 + stq t2,-8(a1) + subq a3,1,a3 + subq a1,8,a1 + bne a3,1b + + /* Do the system call */ + mov a0,pv /* get fn ptr out of the way */ + mov a2,a0 + ldiq v0,__NR_clone + call_pal PAL_callsys + + bne a3,$error + beq v0,thread_start + + /* Successful return from the parent */ + lda sp,16(sp) + ret + + /* Something bad happened -- no child created */ +$error: + br gp,1f +1: ldgp gp,0(gp) + lda sp,16(sp) + jmp zero,__syscall_error + + END(__clone) + +/* Load up the arguments to the function. Put this block of code in + its own function so that we can terminate the stack trace with our + debug info. + + At this point we have $t0=nargs, $pv=fn, $sp=&arg[0]. */ + + .ent thread_start +thread_start: + .frame fp,0,zero,0 + mov zero,fp + .prologue 0 + + /* Calculate address of jump into argument loading code */ + cmple t0,6,t2 /* no more than 6 args in registers */ + cmoveq t2,6,t0 + br v0,1f /* find address of arg0 */ +1: lda v0,$arg0-1b(v0) + s4addq t0,zero,t1 + subq v0,t1,v0 + jmp (v0) + + /* Load the integer register arguments */ + ldq a5,40(sp) + ldq a4,32(sp) + ldq a3,24(sp) + ldq a2,16(sp) + ldq a1,8(sp) + ldq a0,0(sp) +$arg0: + + /* Adjust stack to remove the arguments we just loaded */ + s8addq t0,sp,sp + + /* Call the user's function */ + jsr ra,(pv) + ldgp gp,0(ra) + + /* Call _exit rather than doing it inline for breakpoint purposes */ + mov v0,a0 + jsr ra,_exit + + .end thread_start + +weak_alias(__clone, clone) diff --git a/sysdeps/unix/sysv/linux/direntry.h b/sysdeps/unix/sysv/linux/direntry.h index 1d661d6..732a068 100644 --- a/sysdeps/unix/sysv/linux/direntry.h +++ b/sysdeps/unix/sysv/linux/direntry.h @@ -1,8 +1,26 @@ -/* Get `struct dirent' from the Linux kernel header file. */ +/* Copyright (C) 1996 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., 675 Mass Ave, +Cambridge, MA 02139, USA. */ #ifndef _DIRENTRY_H -#define _DIRENTRY_H +#define _DIRENTRY_H 1 +/* Get `struct dirent' from the Linux kernel header file. */ +#include <asm/posix_types.h> #include <linux/dirent.h> #define d_fileno d_ino /* backwards compatibility */ diff --git a/sysdeps/unix/sysv/linux/ftime.c b/sysdeps/unix/sysv/linux/ftime.c new file mode 100644 index 0000000..e8b5e6e --- /dev/null +++ b/sysdeps/unix/sysv/linux/ftime.c @@ -0,0 +1,3 @@ +/* Linux defines the ftime system call but doesn't actually implement + it. Use the generic implementation. */ +#include <sysdeps/generic/ftime.c> diff --git a/sysdeps/unix/sysv/linux/i386/clone.S b/sysdeps/unix/sysv/linux/i386/clone.S new file mode 100644 index 0000000..02f5619 --- /dev/null +++ b/sysdeps/unix/sysv/linux/i386/clone.S @@ -0,0 +1,80 @@ +/* Copyright (C) 1996 Free Software Foundation, Inc. + Contributed by Richard Henderson (rth@tamu.edu) + +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., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +/* clone() is even more special than fork() as it mucks with stacks + and invokes a function in the right context after its all over. */ + +#include <sysdep.h> +#include <errnos.h> + +/* int clone(int (*fn)(), void *child_stack, int flags, int nargs, ...) */ + + .text +ENTRY(__clone) + /* Sanity check arguments. */ + movl $-EINVAL,%eax + movl 4(%esp),%ecx /* no NULL function pointers */ + testl %ecx,%ecx + jz syscall_error + movl 8(%esp),%ecx /* no NULL stack pointers */ + testl %ecx,%ecx + jz syscall_error + movl 16(%esp),%edx /* no negative argument counts */ + testl %edx,%edx + js syscall_error + + /* Allocate space on the new stack and copy args over */ + movl %edx,%eax + negl %eax + lea -4(%ecx,%eax,4),%ecx + jz 2f +1: movl 16(%esp,%edx,4),%eax + movl %eax,0(%ecx,%edx,4) + dec %edx + jnz 1b +2: + /* Save the function pointer as the zeroth argument. + It will be popped off in the child in the ebx frobbing below. */ + movl 4(%esp),%eax + movl %eax,0(%ecx) + + /* Do the system call */ + pushl %ebx + movl 16(%esp),%ebx + movl $SYS_ify(clone),%eax + int $0x80 + popl %ebx + + test %eax,%eax + jl syscall_error + jz thread_start + + ret + + SYSCALL_ERROR_HANDLER + +thread_start: + subl %ebp,%ebp /* terminate the stack frame */ + call *%ebx +#ifdef PIC + call _exit@PLT +#else + call _exit +#endif + +weak_alias(__clone, clone) diff --git a/sysdeps/unix/sysv/linux/m68k/resourcebits.h b/sysdeps/unix/sysv/linux/m68k/resourcebits.h index 65cc6e5..d2f2dae 100644 --- a/sysdeps/unix/sysv/linux/m68k/resourcebits.h +++ b/sysdeps/unix/sysv/linux/m68k/resourcebits.h @@ -54,6 +54,9 @@ enum __rlimit_resource /* Locked-in-memory address space. */ RLIMIT_MEMLOCK, #define RLIMIT_MEMLOCK RLIMIT_MEMLOCK + /* Address space limit. */ + RLIMIT_AS, +#define RLIMIT_AS RLIMIT_AS RLIMIT_NLIMITS, /* Number of limit flavors. */ RLIM_NLIMITS = RLIMIT_NLIMITS /* Traditional name for same. */ diff --git a/sysdeps/unix/sysv/linux/sys/acct.h b/sysdeps/unix/sysv/linux/sys/acct.h index adb2da7..da03930 100644 --- a/sysdeps/unix/sysv/linux/sys/acct.h +++ b/sysdeps/unix/sysv/linux/sys/acct.h @@ -21,6 +21,9 @@ Boston, MA 02111-1307, USA. */ #define _SYS_ACCT_H 1 #include <features.h> +#define __need_time_t +#include <time.h> + /* Get needed constants. */ #include <linux/acct.h> diff --git a/sysdeps/unix/sysv/linux/sys/io.h b/sysdeps/unix/sysv/linux/sys/io.h index d44850f..6f0b9ab 100644 --- a/sysdeps/unix/sysv/linux/sys/io.h +++ b/sysdeps/unix/sysv/linux/sys/io.h @@ -16,9 +16,12 @@ License along with the GNU C Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#ifndef _SYS_IO_H -#define _SYS_IO_H +#ifndef _SYS_IO_H +#define _SYS_IO_H 1 +#include <features.h> + +/* Get constants from kernel header files. */ #include <asm/io.h> /* If TURN_ON is TRUE, request for permission to do direct i/o on the @@ -28,12 +31,12 @@ Cambridge, MA 02139, USA. */ Portability note: not all Linux platforms support this call. Most platforms based on the PC I/O architecture probably will, however. E.g., Linux/Alpha for Alpha PCs supports this. */ -extern int ioperm __P((unsigned long __from, unsigned long __num, - int __turn_on)); +extern int ioperm __P ((unsigned long int __from, unsigned long int __num, + int __turn_on)); /* Set the I/O privilege level to LEVEL. If LEVEL>3, permission to access any I/O port is granted. This call requires root privileges. */ -extern int iopl __P((int __level)); +extern int iopl __P ((int __level)); #endif /* _SYS_IO_H */ diff --git a/sysdeps/unix/sysv/linux/sys/klog.h b/sysdeps/unix/sysv/linux/sys/klog.h index b8a39d6..91811c3 100644 --- a/sysdeps/unix/sysv/linux/sys/klog.h +++ b/sysdeps/unix/sysv/linux/sys/klog.h @@ -1,10 +1,30 @@ -#ifndef _SYS_KLOG_H -#define _SYS_KLOG_H +/* Copyright (C) 1996 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., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +#ifndef _SYS_KLOG_H + +#define _SYS_KLOG_H 1 +#include <features.h> /* Control the kernel's logging facility. This corresponds exactly to the kernel's syslog system call, but that name is easily confused with the user-level syslog facility, which is something completely different. */ -extern int klogctl __P((int type, char *bufp, int len)); +extern int klogctl __P ((int __type, char *__bufp, int __len)); #endif /* _SYS_KLOG_H */ diff --git a/sysdeps/unix/sysv/linux/sys/module.h b/sysdeps/unix/sysv/linux/sys/module.h index 5c4dbce..1062854 100644 --- a/sysdeps/unix/sysv/linux/sys/module.h +++ b/sysdeps/unix/sysv/linux/sys/module.h @@ -1,21 +1,24 @@ -#ifndef _SYS_MODULE_H -#define _SYS_MODULE_H +#ifndef _SYS_MODULE_H +#define _SYS_MODULE_H 1 #include <features.h> +#define __need_size_t +#include <stddef.h> + #include <linux/module.h> /* Return number of kernel symbols if TABLE == NULL, otherwise, return kernel symbols in TABLE. TABLE must be large enough to hold all kernel symbols. */ -extern int get_kernel_syms __P((struct kernel_sym * table)); +extern int get_kernel_syms __P ((struct kernel_sym * table)); /* Create a new module of name MODULE_NAME and of size SIZE bytes. The return address is the starting address of the new module or -1L if the module cannot be created (the return value needs to be cast to (long) to detect the error condition). */ -extern unsigned long create_module __P((const char * module_name, - size_t size)); +extern unsigned long create_module __P ((__const char * module_name, + size_t size)); /* Initialize the module called MODULE_NAME with the CONTENTSSIZE bytes starting at address CONTENTS. CONTENTS normally contains the @@ -25,12 +28,12 @@ extern unsigned long create_module __P((const char * module_name, ROUTINES.cleanup is executed. SYMTAB is NULL if the module does not want to export symbols by itself, or a pointer to a symbol table if the module wants to register its own symbols. */ -extern int init_module __P((const char * module_name, - const void * contents, size_t contentssize, - struct mod_routines * routines, - struct symbol_table * symtab)); +extern int init_module __P ((__const char * module_name, + __const void * contents, size_t contentssize, + struct mod_routines * routines, + struct symbol_table * symtab)); /* Delete the module named MODULE_NAME from the kernel. */ -extern int delete_module __P((const char *module_name)); +extern int delete_module __P ((__const char *module_name)); #endif /* _SYS_MODULE_H */ diff --git a/sysdeps/unix/sysv/linux/sys/timex.h b/sysdeps/unix/sysv/linux/sys/timex.h index fad47cd..8543b0d 100644 --- a/sysdeps/unix/sysv/linux/sys/timex.h +++ b/sysdeps/unix/sysv/linux/sys/timex.h @@ -1,4 +1,5 @@ -/* Copyright (C) 1995 Free Software Foundation, Inc. +/* Copyright (C) 1995, 1996 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 @@ -15,10 +16,12 @@ 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. */ -#ifndef _SYS_TIMEX_H -#define _SYS_TIMEX_H +#ifndef _SYS_TIMEX_H +#define _SYS_TIMEX_H 1 #include <features.h> + +#include <sys/time.h> #include <linux/timex.h> __BEGIN_DECLS |