From ce37fa887b0ea89614d9538e90ade7356b80f48c Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Fri, 13 Jun 1997 22:46:42 +0000 Subject: [PATCH] Update. 1997-06-14 00:39 Ulrich Drepper * libc.map: Add more libio functions which are used in libio.h. * login/Makefile (libutil-routines): Move updwtmp to ... (routines): ...here. Suggested by Mark Kettenis . * sysdeps/stub/s_erfl.c: Add stub definition of erfcl. Reported by Andreas Jaeger . 1997-06-13 21:10 Thorsten Kukuk * nis/nis_add.c (nis_add): Create object name only if not set. * nis/nis_clone.c: Use calloc instead of malloc to prevent RPC encode errors. * nis/nis_modify.c (nis_modify): Create default object entrys if given are NULL. * nis/nis/nis_table.c (nis_add_entry, nis_modify_entry): Likewise. 1997-06-13 14:17 Andreas Jaeger * sysdeps/i386/addmul_1.S: Replace size with sizeP, otherwise the define might also replace the expanded macro ASM_SIZE_DIRECTIVE. * sysdeps/i386/submul_1.S: Likewise. 1997-06-13 12:19 Ulrich Drepper * elf/rtld.c: Print version information if LD_TRACE_LOADED_OBJECT and LD_VERBOSE are given. * elf/ldd.sh.in: Add -v|--verbose option. Add author information as per Coding Standard. * elf/ldd.bash.in: Likewise. 1997-06-12 21:22 Ulrich Drepper --- ChangeLog | 40 ++++++++- db/libdb.map | 2 +- elf/ldd.bash.in | 14 ++- elf/ldd.sh.in | 13 ++- elf/libdl.map | 2 +- elf/rtld.c | 170 +++++++++++++++++++++++++++++++---- libc.map | 3 +- locale/libBrokenLocale.map | 2 +- login/Makefile | 4 +- login/libutil.map | 4 +- manual/texinfo.tex | 12 +-- md5-crypt/libcrypt.map | 2 +- nis/TODO | 3 + nis/libnsl.map | 2 +- nis/libnss_compat.map | 2 +- nis/nis_add.c | 5 +- nis/nis_clone.c | 34 ++++--- nis/nis_modify.c | 25 ++++++ nis/nis_table.c | 54 ++++++++++- nss/libnss_db.map | 2 +- nss/libnss_files.map | 2 +- resolv/libnss_dns.map | 2 +- resolv/libresolv.map | 2 +- sysdeps/i386/add_n.S | 2 +- sysdeps/i386/addmul_1.S | 18 ++-- sysdeps/i386/lshift.S | 2 +- sysdeps/i386/rshift.S | 2 +- sysdeps/i386/sub_n.S | 2 +- sysdeps/i386/submul_1.S | 18 ++-- sysdeps/stub/s_erfl.c | 10 +++ sysdeps/wordsize-32/Dist | 2 +- sysdeps/wordsize-32/Makefile | 2 +- sysdeps/wordsize-64/Dist | 2 +- sysdeps/wordsize-64/Makefile | 2 +- 34 files changed, 370 insertions(+), 93 deletions(-) diff --git a/ChangeLog b/ChangeLog index 847c417cf1..a3bb6da727 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,42 @@ -<1997-06-12 21:22 Ulrich Drepper +1997-06-14 00:39 Ulrich Drepper + + * libc.map: Add more libio functions which are used in libio.h. + + * login/Makefile (libutil-routines): Move updwtmp to ... + (routines): ...here. + Suggested by Mark Kettenis . + + * sysdeps/stub/s_erfl.c: Add stub definition of erfcl. + Reported by Andreas Jaeger . + +1997-06-13 21:10 Thorsten Kukuk + + * nis/nis_add.c (nis_add): Create object name only if not set. + + * nis/nis_clone.c: Use calloc instead of malloc to prevent + RPC encode errors. + + * nis/nis_modify.c (nis_modify): Create default object entrys if + given are NULL. + * nis/nis/nis_table.c (nis_add_entry, nis_modify_entry): Likewise. + +1997-06-13 14:17 Andreas Jaeger + + + * sysdeps/i386/addmul_1.S: Replace size with sizeP, otherwise the + define might also replace the expanded macro ASM_SIZE_DIRECTIVE. + * sysdeps/i386/submul_1.S: Likewise. + +1997-06-13 12:19 Ulrich Drepper + + * elf/rtld.c: Print version information if LD_TRACE_LOADED_OBJECT + and LD_VERBOSE are given. + + * elf/ldd.sh.in: Add -v|--verbose option. Add author information + as per Coding Standard. + * elf/ldd.bash.in: Likewise. + +1997-06-12 21:22 Ulrich Drepper * Makefile (libc-map): Define before including Makerules. * Makerules (lib%.so): Depend on $(lib%-map). diff --git a/db/libdb.map b/db/libdb.map index 5be731cdea..3ce01866f2 100644 --- a/db/libdb.map +++ b/db/libdb.map @@ -9,4 +9,4 @@ GLIBC_2.0 { local: *; -}; \ No newline at end of file +}; diff --git a/elf/ldd.bash.in b/elf/ldd.bash.in index c433a72679..809c2717da 100644 --- a/elf/ldd.bash.in +++ b/elf/ldd.bash.in @@ -31,14 +31,16 @@ TEXTDOMAINDIR=@TEXTDOMAINDIR@ RTLD=@RTLD@ warn= bind_now= +verbose= while test $# -gt 0; do case "$1" in - --v | --ve | --ver | --vers | --versi | --versio | --version) + --vers | --versi | --versio | --version) echo 'ldd (GNU libc) @VERSION@' echo $"Copyright (C) 1996, 1997 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +Written by Roland McGrath and Ulrich Drepper." exit 0 ;; --h | --he | --hel | --help) echo $"ldd [OPTION]... FILE... @@ -46,6 +48,7 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." --version print version information and exit -d, --data-relocs process data relocations -r, --function-relocs process data and function relocations + -v, --verbose print all information Report bugs using the \`glibcbug' script to ." exit 0 ;; -d | --d | --da | --dat | --data | --data- | --data-r | --data-re | \ @@ -58,6 +61,12 @@ Report bugs using the \`glibcbug' script to ." warn=yes bind_now=yes shift ;; + -v | --verb | --verbo | --verbos | --verbose) + verbose=yes + shift ;; + --v | --ve | --ver) + echo >&2 $"ldd: option \`" $1 $"' is ambiguous" + exit 1 ;; --) # Stop option processing. shift; break ;; -*) @@ -70,6 +79,7 @@ Report bugs using the \`glibcbug' script to ." done add_env="LD_TRACE_LOADED_OBJECTS=1 LD_WARN=$warn LD_BIND_NOW=$bind_now" +add_env="$add_env LD_VERBOSE=$verbose" case $# in 0) echo >&2 'ldd:' $"missing file arguments" diff --git a/elf/ldd.sh.in b/elf/ldd.sh.in index d5dd54a536..908a26e269 100644 --- a/elf/ldd.sh.in +++ b/elf/ldd.sh.in @@ -30,11 +30,12 @@ bind_now= while test $# -gt 0; do case "$1" in - --v | --ve | --ver | --vers | --versi | --versio | --version) + --vers | --versi | --versio | --version) echo 'ldd (GNU libc) @VERSION@ Copyright (C) 1996, 1997 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.' +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +Written by Roland McGrath and Ulrich Drepper.' exit 0 ;; --h | --he | --hel | --help) echo "ldd [OPTION]... FILE... @@ -42,6 +43,7 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.' --version print version information and exit -d, --data-relocs process data relocations -r, --function-relocs process data and function relocations + -v, --verbose print all information Report bugs using the \`glibcbug' script to ." exit 0 ;; -d | --d | --da | --dat | --data | --data- | --data-r | --data-re | \ @@ -54,6 +56,12 @@ Report bugs using the \`glibcbug' script to ." warn=yes bind_now=yes shift ;; + -v | --verb | --verbo | --verbos | --verbose) + verbose=yes + shift ;; + --v | --ve | --ver) + echo >&2 "ldd: option \`$1' is ambiguous" + exit 1 ;; --) # Stop option processing. shift; break ;; -*) @@ -67,6 +75,7 @@ Try \`ldd --help' for more information." done add_env="LD_TRACE_LOADED_OBJECTS=1 LD_WARN=$warn LD_BIND_NOW=$bind_now" +add_env="$add_env LD_VERBOSE=$verbose" case $# in 0) echo >&2 "\ diff --git a/elf/libdl.map b/elf/libdl.map index d950382346..4bd2145a47 100644 --- a/elf/libdl.map +++ b/elf/libdl.map @@ -4,4 +4,4 @@ GLIBC_2.0 { local: *; -}; \ No newline at end of file +}; diff --git a/elf/rtld.c b/elf/rtld.c index ffa569e729..78ca490447 100644 --- a/elf/rtld.c +++ b/elf/rtld.c @@ -23,7 +23,7 @@ #include #include #include /* Check if MAP_ANON is defined. */ -#include "../stdio-common/_itoa.h" +#include #include #include "dynamic-link.h" @@ -188,6 +188,54 @@ version_check_doit (void *a) _exit (1); } + +static inline struct link_map * +find_needed (const char *name) +{ + unsigned int n; + + for (n = 0; n < _dl_loaded->l_nsearchlist; ++n) + if (_dl_name_match_p (name, _dl_loaded->l_searchlist[n])) + return _dl_loaded->l_searchlist[n]; + + /* Should never happen. */ + return NULL; +} + +static int +match_version (const char *string, struct link_map *map) +{ + const char *strtab = (const char *) (map->l_addr + + map->l_info[DT_STRTAB]->d_un.d_ptr); + ElfW(Verdef) *def; + +#define VERDEFTAG (DT_NUM + DT_PROCNUM + DT_VERSIONTAGIDX (DT_VERDEF)) + if (map->l_info[VERDEFTAG] == NULL) + /* The file has no symbol versioning. */ + return 0; + + def = (ElfW(Verdef) *) ((char *) map->l_addr + + map->l_info[VERDEFTAG]->d_un.d_ptr); + while (1) + { + ElfW(Verdaux) *aux = (ElfW(Verdaux) *) ((char *) def + def->vd_aux); + + /* Compare the version strings. */ + if (strcmp (string, strtab + aux->vda_name) == 0) + /* Bingo! */ + return 1; + + /* If no more definitions we failed to find what we want. */ + if (def->vd_next == 0) + break; + + /* Next definition. */ + def = (ElfW(Verdef) *) ((char *) def + def->vd_next); + } + + return 0; +} + unsigned int _dl_skip_args; /* Nonzero if we were run directly. */ static void @@ -576,27 +624,113 @@ of this helper program; chances are you did not intend to run this program.\n", *--bp = '0'; _dl_sysdep_message (" in object at 0x", bp, "\n", NULL); } - else if (lazy >= 0) + else { - /* We have to do symbol dependency testing. */ - struct relocate_args args; - struct link_map *l; - - args.lazy = lazy; - - l = _dl_loaded; - while (l->l_next) - l = l->l_next; - do + if (lazy >= 0) { - if (l != &_dl_rtld_map && l->l_opencount > 0) + /* We have to do symbol dependency testing. */ + struct relocate_args args; + struct link_map *l; + + args.lazy = lazy; + + l = _dl_loaded; + while (l->l_next) + l = l->l_next; + do { - args.l = l; - _dl_receive_error (print_unresolved, relocate_doit, &args); - *_dl_global_scope_end = NULL; + if (l != &_dl_rtld_map && l->l_opencount > 0) + { + args.l = l; + _dl_receive_error (print_unresolved, relocate_doit, + &args); + *_dl_global_scope_end = NULL; + } + l = l->l_prev; + } while (l); + } + +#define VERNEEDTAG (DT_NUM + DT_PROCNUM + DT_VERSIONTAGIDX (DT_VERNEED)) + if (*(getenv ("LD_VERBOSE") ?: "") != '\0') + { + /* Print more information. This means here, print information + about the versions needed. */ + int first = 1; + struct link_map *map = _dl_loaded; + + for (map = _dl_loaded; map != NULL; map = map->l_next) + { + const char *strtab = + (const char *) (map->l_addr + + map->l_info[DT_STRTAB]->d_un.d_ptr); + ElfW(Dyn) *dyn = map->l_info[VERNEEDTAG]; + + if (dyn != NULL) + { + ElfW(Verneed) *ent = + (ElfW(Verneed) *) (map->l_addr + dyn->d_un.d_ptr); + + if (first) + { + _dl_sysdep_message ("\n\tVersion information:\n", + NULL); + first = 0; + } + + _dl_sysdep_message ("\t", (map->l_name[0] + ? map->l_name + : _dl_argv[0]), ":\n", + NULL); + + while (1) + { + ElfW(Vernaux) *aux; + struct link_map *needed; + + needed = find_needed (strtab + ent->vn_file); + aux = (ElfW(Vernaux) *) ((char *) ent + ent->vn_aux); + + while (1) + { + const char *fname = NULL; + + _dl_sysdep_message ("\t\t", + strtab + ent->vn_file, + " (", strtab + aux->vna_name, + ") ", + (aux->vna_flags + & VER_FLG_WEAK + ? "[WEAK] " : ""), + "=> ", NULL); + + if (needed != NULL + && match_version (strtab + aux->vna_name, + needed)) + fname = needed->l_name; + + _dl_sysdep_message (fname ?: "not found", "\n", + NULL); + + if (aux->vna_next == 0) + /* No more symbols. */ + break; + + /* Next symbol. */ + aux = (ElfW(Vernaux) *) ((char *) aux + + aux->vna_next); + } + + if (ent->vn_next == 0) + /* No more dependencies. */ + break; + + /* Next dependency. */ + ent = (ElfW(Verneed) *) ((char *) ent + + ent->vn_next); + } + } } - l = l->l_prev; - } while (l); + } } _exit (0); diff --git a/libc.map b/libc.map index 0817685c7b..dabe1893a8 100644 --- a/libc.map +++ b/libc.map @@ -6,8 +6,6 @@ GLIBC_2.0 { _IO_stderr_; _IO_stdin_; _IO_stdout_; _nl_msg_cat_cntr; __environ; _environ; -# __libc_multiple_libcs; __libc_argc; __libc_argv; _dl_starting_up; __exit_funcs; - # helper functions __errno_location; __libc_init_first; @@ -40,6 +38,7 @@ GLIBC_2.0 { _obstack_allocated_p; _obstack_begin; _obstack_begin_1; _obstack_free; _obstack_memory_used; _obstack_newchunk; __assert_fail; __assert_perror_fail; + _IO_getc; _IO_peekc_unlocked; _IO_putc; _IO_feof; _IO_ferror; # functions used in other libraries __printf_fp; diff --git a/locale/libBrokenLocale.map b/locale/libBrokenLocale.map index 09752759f7..b96a65c4c0 100644 --- a/locale/libBrokenLocale.map +++ b/locale/libBrokenLocale.map @@ -4,4 +4,4 @@ GLIBC_2.0 { local: *; -}; \ No newline at end of file +}; diff --git a/login/Makefile b/login/Makefile index f75632a023..916dd6c512 100644 --- a/login/Makefile +++ b/login/Makefile @@ -25,7 +25,7 @@ subdir := login headers := utmp.h utmpbits.h lastlog.h pty.h routines := getutent getutent_r getutid getutline getutid_r getutline_r \ - utmp_file utmp_daemon utmpname + utmp_file utmp_daemon utmpname updwtmp others = utmpd install-sbin = utmpd @@ -42,7 +42,7 @@ vpath %.c programs extra-libs := libutil extra-libs-others := $(extra-libs) -libutil-routines:= login login_tty logout logwtmp pty updwtmp +libutil-routines:= login login_tty logout logwtmp pty libutil-map := libutil.map include ../Rules diff --git a/login/libutil.map b/login/libutil.map index 46064a63a3..3063790dd0 100644 --- a/login/libutil.map +++ b/login/libutil.map @@ -1,7 +1,7 @@ GLIBC_2.0 { global: - forkpty; login; login_tty; logout; logwtmp; openpty; updwtmp; + forkpty; login; login_tty; logout; logwtmp; openpty; local: *; -}; \ No newline at end of file +}; diff --git a/manual/texinfo.tex b/manual/texinfo.tex index e1dfbcbd53..8e42adc34f 100644 --- a/manual/texinfo.tex +++ b/manual/texinfo.tex @@ -1,5 +1,5 @@ %% TeX macros to handle Texinfo files. -%% $Id: texinfo.tex,v 2.202 1997/06/12 20:07:10 drepper Exp $ +%% $Id: texinfo.tex,v 2.203 1997/06/13 22:43:07 drepper Exp $ % Copyright (C) 1985, 86, 88, 90, 91, 92, 93, % 94, 95, 96, 97 Free Software Foundation, Inc. @@ -36,7 +36,7 @@ % This automatically updates the version number based on RCS. \def\deftexinfoversion$#1: #2 ${\def\texinfoversion{#2}} -\deftexinfoversion$Revision: 2.202 $ +\deftexinfoversion$Revision: 2.203 $ \message{Loading texinfo package [Version \texinfoversion]:} % If in a .fmt file, print the version number @@ -120,7 +120,7 @@ % For @cropmarks command. % Do @cropmarks to get crop marks. -% +% \newif\ifcropmarks \let\cropmarks = \cropmarkstrue % @@ -1346,7 +1346,7 @@ where each line of input produces a line of output.} % @uref (abbreviation for `urlref') takes an optional second argument % specifying the text to display. First (mandatory) arg is the url. -% +% \def\uref#1{\urefxxx #1,,\finish} \def\urefxxx#1,#2,#3\finish{% \setbox0 = \hbox{\ignorespaces #2}% @@ -2101,7 +2101,7 @@ July\or August\or September\or October\or November\or December\fi \global\colcount=0\relax}} } -\def\setultitablespacing{% test to see if user has set \multitablelinespace. +\def\setmultitablespacing{% test to see if user has set \multitablelinespace. % If so, do nothing. If not, give it an appropriate dimension based on % current baselineskip. \ifdim\multitablelinespace=0pt @@ -2569,7 +2569,7 @@ width0pt\relax} \fi \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns % Grab any single-column material above us. \output = {\global\setbox\partialpage = \vbox{% - % + % % Here is a possibility not foreseen in manmac: if we accumulate a % whole lot of material, we might end up calling this \output % routine twice in a row (see the doublecol-lose test, which is diff --git a/md5-crypt/libcrypt.map b/md5-crypt/libcrypt.map index a3128da2e9..9e0c20792f 100644 --- a/md5-crypt/libcrypt.map +++ b/md5-crypt/libcrypt.map @@ -4,4 +4,4 @@ GLIBC_2.0 { local: *; -}; \ No newline at end of file +}; diff --git a/nis/TODO b/nis/TODO index f87b02a407..f6d695956a 100644 --- a/nis/TODO +++ b/nis/TODO @@ -1,4 +1,7 @@ + * nis_addmember: Where checks for duplicate group members ? nisgrpadm or + nis_addmember ? + * nss_nisplus: When using parser form nss_files, rewrite parser * nis_table.c: nis_list(): diff --git a/nis/libnsl.map b/nis/libnsl.map index 5cb3bc30f7..ab88de6cb8 100644 --- a/nis/libnsl.map +++ b/nis/libnsl.map @@ -11,4 +11,4 @@ GLIBC_2.0 { local: *; -}; \ No newline at end of file +}; diff --git a/nis/libnss_compat.map b/nis/libnss_compat.map index 55d6f4745f..cff0ef2c15 100644 --- a/nis/libnss_compat.map +++ b/nis/libnss_compat.map @@ -8,4 +8,4 @@ GLIBC_2.0 { local: *; -}; \ No newline at end of file +}; diff --git a/nis/nis_add.c b/nis/nis_add.c index e358ea4987..9baf4e8278 100644 --- a/nis/nis_add.c +++ b/nis/nis_add.c @@ -40,8 +40,9 @@ nis_add (const_nis_name name, const nis_object *obj) req.ns_object.ns_object_val = nis_clone_object (obj, NULL); p1 = req.ns_object.ns_object_val[0].zo_name; - req.ns_object.ns_object_val[0].zo_name = - nis_leaf_of_r (name, buf1, sizeof (buf1)); + if (p1 == NULL || strlen (p1) == 0) + req.ns_object.ns_object_val[0].zo_name = + nis_leaf_of_r (name, buf1, sizeof (buf1)); p2 = req.ns_object.ns_object_val[0].zo_owner; if (p2 == NULL || strlen (p2) == 0) diff --git a/nis/nis_clone.c b/nis/nis_clone.c index e4dc87d4c9..a1d753692c 100644 --- a/nis/nis_clone.c +++ b/nis/nis_clone.c @@ -161,9 +161,8 @@ nis_clone_group (const group_obj *src, group_obj *dest) { if (res->gr_members.gr_members_val == NULL) { - res->gr_members.gr_members_val = - malloc (res->gr_members.gr_members_len * sizeof (nis_name)); - if (res->gr_members.gr_members_val == NULL) + if ((res->gr_members.gr_members_val = + malloc (res->gr_members.gr_members_len * sizeof (nis_name))) == NULL) return NULL; } for (i = 0; i < res->gr_members.gr_members_len; ++i) @@ -208,9 +207,8 @@ nis_clone_table (const table_obj *src, table_obj *dest) res->ta_cols.ta_cols_len = src->ta_cols.ta_cols_len; if (res->ta_cols.ta_cols_val == NULL) { - res->ta_cols.ta_cols_val = - malloc (src->ta_cols.ta_cols_len * sizeof (table_col)); - if (res->ta_cols.ta_cols_val == NULL) + if ((res->ta_cols.ta_cols_val = + calloc (1, src->ta_cols.ta_cols_len * sizeof (table_col))) == NULL) return NULL; } for (i = 0; i < res->ta_cols.ta_cols_len; i++) @@ -312,16 +310,19 @@ nis_clone_nis_attr (const nis_attr *src, nis_attr *dest) res->zattr_ndx = NULL; res->zattr_val.zattr_val_len = src->zattr_val.zattr_val_len; - if (res->zattr_val.zattr_val_val == NULL) + if (res->zattr_val.zattr_val_len > 0) { - res->zattr_val.zattr_val_val = - malloc (src->zattr_val.zattr_val_len); if (res->zattr_val.zattr_val_val == NULL) - return NULL; + { + if ((res->zattr_val.zattr_val_val = + calloc (1, src->zattr_val.zattr_val_len)) == NULL) + return NULL; + } + memcpy (res->zattr_val.zattr_val_val, src->zattr_val.zattr_val_val, + src->zattr_val.zattr_val_len); } - memcpy (res->zattr_val.zattr_val_val, src->zattr_val.zattr_val_val, - src->zattr_val.zattr_val_len); - + else + res->zattr_val.zattr_val_val = NULL; return res; } @@ -440,15 +441,12 @@ nis_clone_objdata (const objdata *src, objdata *dest) src->objdata_u.po_data.po_data_len; if (src->objdata_u.po_data.po_data_val) { - res->objdata_u.po_data.po_data_val = - malloc (res->objdata_u.po_data.po_data_len); - if (res->objdata_u.po_data.po_data_val == NULL) + if ((res->objdata_u.po_data.po_data_val = + malloc (res->objdata_u.po_data.po_data_len)) == NULL) return NULL; memcpy (res->objdata_u.po_data.po_data_val, src->objdata_u.po_data.po_data_val, src->objdata_u.po_data.po_data_len); - if (res->objdata_u.po_data.po_data_val == NULL) - return NULL; } else { diff --git a/nis/nis_modify.c b/nis/nis_modify.c index e68bf2a954..04572794a8 100644 --- a/nis/nis_modify.c +++ b/nis/nis_modify.c @@ -28,6 +28,9 @@ nis_modify (const_nis_name name, const nis_object *obj) nis_result *res; nis_error status; struct ns_request req; + char *p1, *p2, *p3, *p4; + char buf1 [strlen (name) + 20]; + char buf4 [strlen (name) + 20]; res = calloc (1, sizeof (nis_result)); @@ -36,11 +39,33 @@ nis_modify (const_nis_name name, const nis_object *obj) req.ns_object.ns_object_len = 1; req.ns_object.ns_object_val = nis_clone_object (obj, NULL); + p1 = req.ns_object.ns_object_val[0].zo_name; + if (p1 == NULL || strlen (p1) == 0) + req.ns_object.ns_object_val[0].zo_name = + nis_leaf_of_r (name, buf1, sizeof (buf1)); + + p2 = req.ns_object.ns_object_val[0].zo_owner; + if (p2 == NULL || strlen (p2) == 0) + req.ns_object.ns_object_val[0].zo_owner = nis_local_principal (); + + p3 = req.ns_object.ns_object_val[0].zo_group; + if (p3 == NULL || strlen (p3) == 0) + req.ns_object.ns_object_val[0].zo_group = nis_local_group (); + + p4 = req.ns_object.ns_object_val[0].zo_domain; + req.ns_object.ns_object_val[0].zo_domain = + nis_domain_of_r (name, buf4, sizeof (buf4)); + if ((status = __do_niscall (name, NIS_MODIFY, (xdrproc_t) xdr_ns_request, (caddr_t) & req, (xdrproc_t) xdr_nis_result, (caddr_t) res, MASTER_ONLY)) != RPC_SUCCESS) res->status = status; + req.ns_object.ns_object_val[0].zo_name = p1; + req.ns_object.ns_object_val[0].zo_owner = p2; + req.ns_object.ns_object_val[0].zo_group = p3; + req.ns_object.ns_object_val[0].zo_domain = p4; + nis_destroy_object (req.ns_object.ns_object_val); return res; diff --git a/nis/nis_table.c b/nis/nis_table.c index e9e35abf3b..4cfd734173 100644 --- a/nis/nis_table.c +++ b/nis/nis_table.c @@ -261,8 +261,11 @@ nis_add_entry (const_nis_name name, const nis_object *obj, u_long flags) { nis_result *res; - struct ib_request ibreq; nis_error status; + struct ib_request ibreq; + char *p1, *p2, *p3, *p4; + char buf1 [strlen (name) + 20]; + char buf4 [strlen (name) + 20]; res = calloc (1, sizeof (nis_result)); @@ -276,6 +279,23 @@ nis_add_entry (const_nis_name name, const nis_object *obj, ibreq.ibr_obj.ibr_obj_val = nis_clone_object (obj, NULL); ibreq.ibr_obj.ibr_obj_len = 1; + p1 = ibreq.ibr_obj.ibr_obj_val[0].zo_name; + if (p1 == NULL || strlen (p1) == 0) + ibreq.ibr_obj.ibr_obj_val[0].zo_name = + nis_leaf_of_r (name, buf1, sizeof (buf1)); + + p2 = ibreq.ibr_obj.ibr_obj_val[0].zo_owner; + if (p2 == NULL || strlen (p2) == 0) + ibreq.ibr_obj.ibr_obj_val[0].zo_owner = nis_local_principal (); + + p3 = ibreq.ibr_obj.ibr_obj_val[0].zo_group; + if (p3 == NULL || strlen (p3) == 0) + ibreq.ibr_obj.ibr_obj_val[0].zo_group = nis_local_group (); + + p4 = ibreq.ibr_obj.ibr_obj_val[0].zo_domain; + ibreq.ibr_obj.ibr_obj_val[0].zo_domain = + nis_domain_of_r (name, buf4, sizeof (buf4)); + if ((status = __do_niscall (ibreq.ibr_name, NIS_IBADD, (xdrproc_t) xdr_ib_request, (caddr_t) &ibreq, @@ -283,6 +303,11 @@ nis_add_entry (const_nis_name name, const nis_object *obj, (caddr_t) res, 0)) != RPC_SUCCESS) res->status = status; + ibreq.ibr_obj.ibr_obj_val[0].zo_name = p1; + ibreq.ibr_obj.ibr_obj_val[0].zo_owner = p2; + ibreq.ibr_obj.ibr_obj_val[0].zo_group = p3; + ibreq.ibr_obj.ibr_obj_val[0].zo_domain = p4; + nis_free_request (&ibreq); return res; @@ -293,8 +318,11 @@ nis_modify_entry (const_nis_name name, const nis_object *obj, u_long flags) { nis_result *res; - struct ib_request ibreq; nis_error status; + struct ib_request ibreq; + char *p1, *p2, *p3, *p4; + char buf1 [strlen (name) + 20]; + char buf4 [strlen (name) + 20]; res = calloc (1, sizeof (nis_result)); @@ -308,12 +336,34 @@ nis_modify_entry (const_nis_name name, const nis_object *obj, ibreq.ibr_obj.ibr_obj_val = nis_clone_object (obj, NULL); ibreq.ibr_obj.ibr_obj_len = 1; + p1 = ibreq.ibr_obj.ibr_obj_val[0].zo_name; + if (p1 == NULL || strlen (p1) == 0) + ibreq.ibr_obj.ibr_obj_val[0].zo_name = + nis_leaf_of_r (name, buf1, sizeof (buf1)); + + p2 = ibreq.ibr_obj.ibr_obj_val[0].zo_owner; + if (p2 == NULL || strlen (p2) == 0) + ibreq.ibr_obj.ibr_obj_val[0].zo_owner = nis_local_principal (); + + p3 = ibreq.ibr_obj.ibr_obj_val[0].zo_group; + if (p3 == NULL || strlen (p3) == 0) + ibreq.ibr_obj.ibr_obj_val[0].zo_group = nis_local_group (); + + p4 = ibreq.ibr_obj.ibr_obj_val[0].zo_domain; + ibreq.ibr_obj.ibr_obj_val[0].zo_domain = + nis_domain_of_r (name, buf4, sizeof (buf4)); + if ((status = __do_niscall (ibreq.ibr_name, NIS_IBMODIFY, (xdrproc_t) xdr_ib_request, (caddr_t) & ibreq, (xdrproc_t) xdr_nis_result, (caddr_t) res, 0)) != RPC_SUCCESS) res->status = status; + ibreq.ibr_obj.ibr_obj_val[0].zo_name = p1; + ibreq.ibr_obj.ibr_obj_val[0].zo_owner = p2; + ibreq.ibr_obj.ibr_obj_val[0].zo_group = p3; + ibreq.ibr_obj.ibr_obj_val[0].zo_domain = p4; + nis_free_request (&ibreq); return res; diff --git a/nss/libnss_db.map b/nss/libnss_db.map index 9248107747..f0765c7522 100644 --- a/nss/libnss_db.map +++ b/nss/libnss_db.map @@ -17,4 +17,4 @@ GLIBC_2.0 { local: *; -}; \ No newline at end of file +}; diff --git a/nss/libnss_files.map b/nss/libnss_files.map index 8ec5e0ee32..e2c4922c76 100644 --- a/nss/libnss_files.map +++ b/nss/libnss_files.map @@ -25,4 +25,4 @@ GLIBC_2.0 { local: *; -}; \ No newline at end of file +}; diff --git a/resolv/libnss_dns.map b/resolv/libnss_dns.map index 359ddc1d15..423cdf98bb 100644 --- a/resolv/libnss_dns.map +++ b/resolv/libnss_dns.map @@ -6,4 +6,4 @@ GLIBC_2.0 { local: *; -}; \ No newline at end of file +}; diff --git a/resolv/libresolv.map b/resolv/libresolv.map index 79d70539c2..d9ac72e93f 100644 --- a/resolv/libresolv.map +++ b/resolv/libresolv.map @@ -8,4 +8,4 @@ GLIBC_2.0 { local: *; -}; \ No newline at end of file +}; diff --git a/sysdeps/i386/add_n.S b/sysdeps/i386/add_n.S index 55c5dda446..a93e2899a7 100644 --- a/sysdeps/i386/add_n.S +++ b/sysdeps/i386/add_n.S @@ -104,4 +104,4 @@ L(oop): movl (%esi),%eax popl %edi ret - ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(__mpn_add_n)) \ No newline at end of file + ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(__mpn_add_n)) diff --git a/sysdeps/i386/addmul_1.S b/sysdeps/i386/addmul_1.S index 8194ec495e..7116c1646d 100644 --- a/sysdeps/i386/addmul_1.S +++ b/sysdeps/i386/addmul_1.S @@ -22,7 +22,7 @@ INPUT PARAMETERS res_ptr (sp + 4) s1_ptr (sp + 8) - size (sp + 12) + sizeP (sp + 12) s2_limb (sp + 16) */ @@ -31,7 +31,7 @@ #define res_ptr edi #define s1_ptr esi -#define size ecx +#define sizeP ecx #define s2_limb ebp TEXT @@ -47,24 +47,24 @@ C_SYMBOL_NAME(__mpn_addmul_1:) INSN2(mov,l ,R(res_ptr),MEM_DISP(esp,20)) INSN2(mov,l ,R(s1_ptr),MEM_DISP(esp,24)) - INSN2(mov,l ,R(size),MEM_DISP(esp,28)) + INSN2(mov,l ,R(sizeP),MEM_DISP(esp,28)) INSN2(mov,l ,R(s2_limb),MEM_DISP(esp,32)) - INSN2(lea,l ,R(res_ptr),MEM_INDEX(res_ptr,size,4)) - INSN2(lea,l ,R(s1_ptr),MEM_INDEX(s1_ptr,size,4)) - INSN1(neg,l ,R(size)) + INSN2(lea,l ,R(res_ptr),MEM_INDEX(res_ptr,sizeP,4)) + INSN2(lea,l ,R(s1_ptr),MEM_INDEX(s1_ptr,sizeP,4)) + INSN1(neg,l ,R(sizeP)) INSN2(xor,l ,R(ebx),R(ebx)) ALIGN (3) L(oop): - INSN2(mov,l ,R(eax),MEM_INDEX(s1_ptr,size,4)) + INSN2(mov,l ,R(eax),MEM_INDEX(s1_ptr,sizeP,4)) INSN1(mul,l ,R(s2_limb)) INSN2(add,l ,R(eax),R(ebx)) INSN2(adc,l ,R(edx),$0) - INSN2(add,l ,MEM_INDEX(res_ptr,size,4),R(eax)) + INSN2(add,l ,MEM_INDEX(res_ptr,sizeP,4),R(eax)) INSN2(adc,l ,R(edx),$0) INSN2(mov,l ,R(ebx),R(edx)) - INSN1(inc,l ,R(size)) + INSN1(inc,l ,R(sizeP)) INSN1(jnz, ,L(oop)) INSN2(mov,l ,R(eax),R(ebx)) diff --git a/sysdeps/i386/lshift.S b/sysdeps/i386/lshift.S index 2f629b0303..b5b7d6be32 100644 --- a/sysdeps/i386/lshift.S +++ b/sysdeps/i386/lshift.S @@ -83,4 +83,4 @@ L(end): shll %cl,%ebx /* compute least significant limb */ popl %edi ret - ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(__mpn_lshift)) \ No newline at end of file + ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(__mpn_lshift)) diff --git a/sysdeps/i386/rshift.S b/sysdeps/i386/rshift.S index a0382672de..1eb84db802 100644 --- a/sysdeps/i386/rshift.S +++ b/sysdeps/i386/rshift.S @@ -85,4 +85,4 @@ L(end): shrl %cl,%ebx /* compute most significant limb */ popl %edi ret - ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(__mpn_rshift)) \ No newline at end of file + ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(__mpn_rshift)) diff --git a/sysdeps/i386/sub_n.S b/sysdeps/i386/sub_n.S index c41c9a6408..ea9986b889 100644 --- a/sysdeps/i386/sub_n.S +++ b/sysdeps/i386/sub_n.S @@ -104,4 +104,4 @@ L(oop): movl (%esi),%eax popl %edi ret - ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(__mpn_sub_n)) \ No newline at end of file + ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(__mpn_sub_n)) diff --git a/sysdeps/i386/submul_1.S b/sysdeps/i386/submul_1.S index 6bba494417..17050bc078 100644 --- a/sysdeps/i386/submul_1.S +++ b/sysdeps/i386/submul_1.S @@ -22,7 +22,7 @@ INPUT PARAMETERS res_ptr (sp + 4) s1_ptr (sp + 8) - size (sp + 12) + sizeP (sp + 12) s2_limb (sp + 16) */ @@ -31,7 +31,7 @@ #define res_ptr edi #define s1_ptr esi -#define size ecx +#define sizeP ecx #define s2_limb ebp TEXT @@ -47,24 +47,24 @@ C_SYMBOL_NAME(__mpn_submul_1:) INSN2(mov,l ,R(res_ptr),MEM_DISP(esp,20)) INSN2(mov,l ,R(s1_ptr),MEM_DISP(esp,24)) - INSN2(mov,l ,R(size),MEM_DISP(esp,28)) + INSN2(mov,l ,R(sizeP),MEM_DISP(esp,28)) INSN2(mov,l ,R(s2_limb),MEM_DISP(esp,32)) - INSN2(lea,l ,R(res_ptr),MEM_INDEX(res_ptr,size,4)) - INSN2(lea,l ,R(s1_ptr),MEM_INDEX(s1_ptr,size,4)) - INSN1(neg,l ,R(size)) + INSN2(lea,l ,R(res_ptr),MEM_INDEX(res_ptr,sizeP,4)) + INSN2(lea,l ,R(s1_ptr),MEM_INDEX(s1_ptr,sizeP,4)) + INSN1(neg,l ,R(sizeP)) INSN2(xor,l ,R(ebx),R(ebx)) ALIGN (3) L(oop): - INSN2(mov,l ,R(eax),MEM_INDEX(s1_ptr,size,4)) + INSN2(mov,l ,R(eax),MEM_INDEX(s1_ptr,sizeP,4)) INSN1(mul,l ,R(s2_limb)) INSN2(add,l ,R(eax),R(ebx)) INSN2(adc,l ,R(edx),$0) - INSN2(sub,l ,MEM_INDEX(res_ptr,size,4),R(eax)) + INSN2(sub,l ,MEM_INDEX(res_ptr,sizeP,4),R(eax)) INSN2(adc,l ,R(edx),$0) INSN2(mov,l ,R(ebx),R(edx)) - INSN1(inc,l ,R(size)) + INSN1(inc,l ,R(sizeP)) INSN1(jnz, ,L(oop)) INSN2(mov,l ,R(eax),R(ebx)) diff --git a/sysdeps/stub/s_erfl.c b/sysdeps/stub/s_erfl.c index e01bad206d..efcf490fa7 100644 --- a/sysdeps/stub/s_erfl.c +++ b/sysdeps/stub/s_erfl.c @@ -10,3 +10,13 @@ __erfl (long double x) weak_alias (__erfl, erfl) stub_warning (erfl) + +long double +__erfcl (long double x) +{ + fputs ("__erfcl not implemented\n", stderr); + return 0.0; +} +weak_alias (__erfcl, erfcl) + +stub_warning (erfcl) diff --git a/sysdeps/wordsize-32/Dist b/sysdeps/wordsize-32/Dist index 625e4d0fc7..5661d79d1d 100644 --- a/sysdeps/wordsize-32/Dist +++ b/sysdeps/wordsize-32/Dist @@ -1 +1 @@ -inttypes.h \ No newline at end of file +inttypes.h diff --git a/sysdeps/wordsize-32/Makefile b/sysdeps/wordsize-32/Makefile index 73b64ed054..87ced71ec1 100644 --- a/sysdeps/wordsize-32/Makefile +++ b/sysdeps/wordsize-32/Makefile @@ -1,3 +1,3 @@ ifeq ($(subdir),stdlib) sysdep_headers += inttypes.h -endif \ No newline at end of file +endif diff --git a/sysdeps/wordsize-64/Dist b/sysdeps/wordsize-64/Dist index 625e4d0fc7..5661d79d1d 100644 --- a/sysdeps/wordsize-64/Dist +++ b/sysdeps/wordsize-64/Dist @@ -1 +1 @@ -inttypes.h \ No newline at end of file +inttypes.h diff --git a/sysdeps/wordsize-64/Makefile b/sysdeps/wordsize-64/Makefile index 73b64ed054..87ced71ec1 100644 --- a/sysdeps/wordsize-64/Makefile +++ b/sysdeps/wordsize-64/Makefile @@ -1,3 +1,3 @@ ifeq ($(subdir),stdlib) sysdep_headers += inttypes.h -endif \ No newline at end of file +endif