2023-01-07 05:08:04 +08:00
|
|
|
/* Copyright (C) 1995-2023 Free Software Foundation, Inc.
|
1997-01-30 12:09:36 +08:00
|
|
|
This file is part of the GNU C Library.
|
|
|
|
|
|
|
|
The GNU C Library is free software; you can redistribute it and/or
|
2001-07-06 12:58:11 +08:00
|
|
|
modify it under the terms of the GNU Lesser General Public
|
|
|
|
License as published by the Free Software Foundation; either
|
|
|
|
version 2.1 of the License, or (at your option) any later version.
|
1997-01-30 12:09:36 +08:00
|
|
|
|
|
|
|
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
|
2001-07-06 12:58:11 +08:00
|
|
|
Lesser General Public License for more details.
|
1997-01-30 12:09:36 +08:00
|
|
|
|
2001-07-06 12:58:11 +08:00
|
|
|
You should have received a copy of the GNU Lesser General Public
|
2012-02-10 07:18:22 +08:00
|
|
|
License along with the GNU C Library; if not, see
|
Prefer https to http for gnu.org and fsf.org URLs
Also, change sources.redhat.com to sourceware.org.
This patch was automatically generated by running the following shell
script, which uses GNU sed, and which avoids modifying files imported
from upstream:
sed -ri '
s,(http|ftp)(://(.*\.)?(gnu|fsf|sourceware)\.org($|[^.]|\.[^a-z])),https\2,g
s,(http|ftp)(://(.*\.)?)sources\.redhat\.com($|[^.]|\.[^a-z]),https\2sourceware.org\4,g
' \
$(find $(git ls-files) -prune -type f \
! -name '*.po' \
! -name 'ChangeLog*' \
! -path COPYING ! -path COPYING.LIB \
! -path manual/fdl-1.3.texi ! -path manual/lgpl-2.1.texi \
! -path manual/texinfo.tex ! -path scripts/config.guess \
! -path scripts/config.sub ! -path scripts/install-sh \
! -path scripts/mkinstalldirs ! -path scripts/move-if-change \
! -path INSTALL ! -path locale/programs/charmap-kw.h \
! -path po/libc.pot ! -path sysdeps/gnu/errlist.c \
! '(' -name configure \
-execdir test -f configure.ac -o -f configure.in ';' ')' \
! '(' -name preconfigure \
-execdir test -f preconfigure.ac ';' ')' \
-print)
and then by running 'make dist-prepare' to regenerate files built
from the altered files, and then executing the following to cleanup:
chmod a+x sysdeps/unix/sysv/linux/riscv/configure
# Omit irrelevant whitespace and comment-only changes,
# perhaps from a slightly-different Autoconf version.
git checkout -f \
sysdeps/csky/configure \
sysdeps/hppa/configure \
sysdeps/riscv/configure \
sysdeps/unix/sysv/linux/csky/configure
# Omit changes that caused a pre-commit check to fail like this:
# remote: *** error: sysdeps/powerpc/powerpc64/ppc-mcount.S: trailing lines
git checkout -f \
sysdeps/powerpc/powerpc64/ppc-mcount.S \
sysdeps/unix/sysv/linux/s390/s390-64/syscall.S
# Omit change that caused a pre-commit check to fail like this:
# remote: *** error: sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S: last line does not end in newline
git checkout -f sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S
2019-09-07 13:40:42 +08:00
|
|
|
<https://www.gnu.org/licenses/>. */
|
1995-02-18 09:27:10 +08:00
|
|
|
|
1995-09-14 17:00:06 +08:00
|
|
|
#include <fstab.h>
|
|
|
|
#include <mntent.h>
|
|
|
|
#include <stdio.h>
|
1998-02-26 19:20:59 +08:00
|
|
|
#include <stdlib.h>
|
2000-04-22 15:19:25 +08:00
|
|
|
#include <string.h>
|
2015-09-09 05:11:03 +08:00
|
|
|
#include <libc-lock.h>
|
1995-02-18 09:27:10 +08:00
|
|
|
|
1998-02-26 19:20:59 +08:00
|
|
|
#define BUFFER_SIZE 0x1fc0
|
update from main archive 960921
Sun Sep 22 03:40:52 1996 Ulrich Drepper <drepper@cygnus.com>
* resolv/resolv.h: Update to bind-4.9.5-T4B.
* resolv/base64.c: Likewise.
* resolv/res_debug.c: Likewise.
* resolv/res_query.c: Likewise.
* resolv/gethnamaddr.c: Likewise.
* nss/nss_dns/dns-host.c: Likewise.
* resolv/res_comp.c: Likewise.
* resolv/res_send.c: Likewise.
* resolv/arpa/nameser.h: Likewise. Attention: MAXDNAME is much
higher now.
* resolv/Banner: New file.
* resolv/Makefile (distribute): Add Banner.
Sat Sep 21 19:15:24 1996 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/stub/getsysstats.c: New file.
* sysdeps/unix/sysv/linux/getsysstats.c: New file.
* misc/Makefile (headers): Add sys/sysinfo.h.
(routines): Add getsysstats.
* sysdeps/unix/sysv/linux/Makefile [$(subdir)==misc]
(sysdep_headers): Remove sys/sysinfo.h.
* sysdeps/generic/sys/sysinfo.h: New file.
* sysdeps/unix/sysv/linux/sys/sysinfo.h: Add prototype for get_nprocs,
get_phys_pages, and get_avphys_pages.
* misc/Makefile (routines): Add mntent_r.
* misc/mntent_r.c: New file.
* misc/mntent.c: Remove all functions but getmntent and use
__getmntent_r.
* misc/mntent.h: Add prototype for __getmntent_r.
* misc/fstab.c: Use __getmntent_r function instead of getmntent.
This will not clobber the state in getmntent.
* sysdeps/generic/confname.h: Add _SC_PROCESSORS_CONF,
_SC_NPROCESSORS_ONLN, _SC_PHYS_PAGES, _SC_AVPHYS_PAGES,
_SC_ATEXIT_MAX, and _SC_PASS_MAX.
* sysdeps/stub/sysconf.c: Add handling _SC_PROCESSORS_CONF and
_SC_NPROCESSORS_ONLN by calling __get_nprocs, _SC_PHYS_PAGES by
calling __get_phys_pages, _SY_AVPHYS_PAGES by calling
__get_avphys_pages, _SC_ATEXIT_MAX and _SC_PASS_MAX.
* sysdeps/posix/sysconf.c: Likewise.
* posix/getconf.c (vars): Add _NPROCESSORS_CONF, _NPROCESSORS_ONLN,
_PHYS_PAGES, _AVPHYS_PAGES, ATEXIT_MAX, and PASS_MAX entries.
Sat Sep 21 05:20:36 1996 Ulrich Drepper <drepper@cygnus.com>
* version.h (VERSION): Bump to 1.95.
* Make-dist (+tsrcs): Don't filter out files in subdirs which
match files in the sysdeps hierachy (welcome back,
sys/syscall.h!).
* resolv/Makefile (libresolv-routines): Remove getnetnamad.
Sat Sep 21 03:00:19 1996 Ulrich Drepper <drepper@cygnus.com>
* locale/loadlocale.c (_nl_free_locale): Remove function.
* locale/localeinfo.h: Remove prototype for _nl_free_locale.
* locale/setlocale.c (setlocale): Don't free locale data of
categories which succeeded to load after a wrong or missing data
file was observed.
* locale/setlocale (setlocale): Initialize NEWNAME correctly so
that it works even when the locale data is not used.
* stdlib/random_r.c: Fix typo in comment.
* stdlib/drand48-iter.c: Likewise.
* stdlib/drand48.c: Likewise.
* stdlib/erand48.c: Likewise.
* stdlib/jrand48.c: Likewise.
* stdlib/lcong48.c: Likewise.
* stdlib/lrand48.c: Likewise.
* stdlib/mrand48.c: Likewise.
* stdlib/nrand48.c: Likewise.
* stdlib/random.c: Likewise.
* stdlib/seed48.c: Likewise.
* stdlib/srand48.c: Likewise.
* misc/search.h: Likewise.
* misc/hsearch.c: Likewise.
* misc/hsearch_r.c: Likewise.
* sysdeps/unix/sysv/linux/m68k/sysdep.S (__errno_location):
Thu Sep 19 23:36:19 1996 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
* hurd/hurdinit.c (__libc_argv): Provide common decl.
(_hurd_setproc): Don't declare __libc_argv here.
1996-09-22 11:06:42 +08:00
|
|
|
|
1998-02-26 19:20:59 +08:00
|
|
|
struct fstab_state
|
1995-02-18 09:27:10 +08:00
|
|
|
{
|
1998-02-26 19:20:59 +08:00
|
|
|
FILE *fs_fp;
|
|
|
|
char *fs_buffer;
|
|
|
|
struct mntent fs_mntres;
|
|
|
|
struct fstab fs_ret;
|
|
|
|
};
|
|
|
|
|
|
|
|
static struct fstab_state *fstab_init (int opt_rewind);
|
|
|
|
static struct mntent *fstab_fetch (struct fstab_state *state);
|
|
|
|
static struct fstab *fstab_convert (struct fstab_state *state);
|
|
|
|
|
|
|
|
static struct fstab_state fstab_state;
|
|
|
|
|
1995-02-18 09:27:10 +08:00
|
|
|
|
1995-09-14 17:00:06 +08:00
|
|
|
int
|
|
|
|
setfsent (void)
|
1995-02-18 09:27:10 +08:00
|
|
|
{
|
1998-02-26 19:20:59 +08:00
|
|
|
return fstab_init (1) != NULL;
|
1995-02-18 09:27:10 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
struct fstab *
|
1995-09-14 17:00:06 +08:00
|
|
|
getfsent (void)
|
1995-02-18 09:27:10 +08:00
|
|
|
{
|
1998-02-26 19:20:59 +08:00
|
|
|
struct fstab_state *state;
|
1995-09-14 17:00:06 +08:00
|
|
|
|
1998-02-26 19:20:59 +08:00
|
|
|
state = fstab_init (0);
|
|
|
|
if (state == NULL)
|
1995-09-14 17:00:06 +08:00
|
|
|
return NULL;
|
1998-02-26 19:20:59 +08:00
|
|
|
if (fstab_fetch (state) == NULL)
|
|
|
|
return NULL;
|
|
|
|
return fstab_convert (state);
|
1995-02-18 09:27:10 +08:00
|
|
|
}
|
|
|
|
|
1998-02-26 19:20:59 +08:00
|
|
|
|
1995-09-14 17:00:06 +08:00
|
|
|
struct fstab *
|
2015-10-17 04:21:49 +08:00
|
|
|
getfsspec (const char *name)
|
1995-02-18 09:27:10 +08:00
|
|
|
{
|
1998-02-26 19:20:59 +08:00
|
|
|
struct fstab_state *state;
|
1995-09-14 17:00:06 +08:00
|
|
|
struct mntent *m;
|
1998-02-26 19:20:59 +08:00
|
|
|
|
|
|
|
state = fstab_init (1);
|
|
|
|
if (state == NULL)
|
|
|
|
return NULL;
|
|
|
|
while ((m = fstab_fetch (state)) != NULL)
|
|
|
|
if (strcmp (m->mnt_fsname, name) == 0)
|
|
|
|
return fstab_convert (state);
|
1995-09-14 17:00:06 +08:00
|
|
|
return NULL;
|
1995-02-18 09:27:10 +08:00
|
|
|
}
|
|
|
|
|
1998-02-26 19:20:59 +08:00
|
|
|
|
1995-09-14 17:00:06 +08:00
|
|
|
struct fstab *
|
2015-10-17 04:21:49 +08:00
|
|
|
getfsfile (const char *name)
|
1995-02-18 09:27:10 +08:00
|
|
|
{
|
1998-02-26 19:20:59 +08:00
|
|
|
struct fstab_state *state;
|
1995-09-14 17:00:06 +08:00
|
|
|
struct mntent *m;
|
1998-02-26 19:20:59 +08:00
|
|
|
|
|
|
|
state = fstab_init (1);
|
|
|
|
if (state == NULL)
|
|
|
|
return NULL;
|
|
|
|
while ((m = fstab_fetch (state)) != NULL)
|
|
|
|
if (strcmp (m->mnt_dir, name) == 0)
|
|
|
|
return fstab_convert (state);
|
1995-09-14 17:00:06 +08:00
|
|
|
return NULL;
|
1995-02-18 09:27:10 +08:00
|
|
|
}
|
|
|
|
|
1998-02-26 19:20:59 +08:00
|
|
|
|
1995-09-14 17:00:06 +08:00
|
|
|
void
|
2013-06-08 08:22:23 +08:00
|
|
|
endfsent (void)
|
1995-02-18 09:27:10 +08:00
|
|
|
{
|
1998-02-26 19:20:59 +08:00
|
|
|
struct fstab_state *state;
|
|
|
|
|
|
|
|
state = &fstab_state;
|
|
|
|
if (state->fs_fp != NULL)
|
1995-09-14 17:00:06 +08:00
|
|
|
{
|
1998-07-16 19:44:36 +08:00
|
|
|
(void) __endmntent (state->fs_fp);
|
1998-02-26 19:20:59 +08:00
|
|
|
state->fs_fp = NULL;
|
1995-09-14 17:00:06 +08:00
|
|
|
}
|
1995-02-18 09:27:10 +08:00
|
|
|
}
|
1998-02-26 19:20:59 +08:00
|
|
|
|
|
|
|
|
|
|
|
static struct fstab_state *
|
|
|
|
fstab_init (int opt_rewind)
|
|
|
|
{
|
|
|
|
struct fstab_state *state;
|
|
|
|
char *buffer;
|
|
|
|
FILE *fp;
|
|
|
|
|
|
|
|
state = &fstab_state;
|
|
|
|
|
|
|
|
buffer = state->fs_buffer;
|
|
|
|
if (buffer == NULL)
|
|
|
|
{
|
|
|
|
buffer = (char *) malloc (BUFFER_SIZE);
|
|
|
|
if (buffer == NULL)
|
|
|
|
return NULL;
|
|
|
|
state->fs_buffer = buffer;
|
|
|
|
}
|
|
|
|
|
|
|
|
fp = state->fs_fp;
|
|
|
|
if (fp != NULL)
|
|
|
|
{
|
|
|
|
if (opt_rewind)
|
|
|
|
rewind (fp);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
1998-07-16 19:44:36 +08:00
|
|
|
fp = __setmntent (_PATH_FSTAB, "r");
|
1998-02-26 19:20:59 +08:00
|
|
|
if (fp == NULL)
|
|
|
|
return NULL;
|
|
|
|
state->fs_fp = fp;
|
|
|
|
}
|
|
|
|
|
|
|
|
return state;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static struct mntent *
|
|
|
|
fstab_fetch (struct fstab_state *state)
|
|
|
|
{
|
|
|
|
return __getmntent_r (state->fs_fp, &state->fs_mntres,
|
|
|
|
state->fs_buffer, BUFFER_SIZE);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static struct fstab *
|
|
|
|
fstab_convert (struct fstab_state *state)
|
|
|
|
{
|
|
|
|
struct mntent *m;
|
|
|
|
struct fstab *f;
|
|
|
|
|
|
|
|
m = &state->fs_mntres;
|
|
|
|
f = &state->fs_ret;
|
|
|
|
|
|
|
|
f->fs_spec = m->mnt_fsname;
|
|
|
|
f->fs_file = m->mnt_dir;
|
|
|
|
f->fs_vfstype = m->mnt_type;
|
|
|
|
f->fs_mntops = m->mnt_opts;
|
2019-02-25 21:19:19 +08:00
|
|
|
f->fs_type = (__hasmntopt (m, FSTAB_RW) ? FSTAB_RW
|
|
|
|
: __hasmntopt (m, FSTAB_RQ) ? FSTAB_RQ
|
|
|
|
: __hasmntopt (m, FSTAB_RO) ? FSTAB_RO
|
|
|
|
: __hasmntopt (m, FSTAB_SW) ? FSTAB_SW
|
|
|
|
: __hasmntopt (m, FSTAB_XX) ? FSTAB_XX
|
|
|
|
: "??");
|
1998-02-26 19:20:59 +08:00
|
|
|
f->fs_freq = m->mnt_freq;
|
|
|
|
f->fs_passno = m->mnt_passno;
|
|
|
|
return f;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* Make sure the memory is freed if the programs ends while in
|
|
|
|
memory-debugging mode and something actually was allocated. */
|
2022-12-28 05:11:42 +08:00
|
|
|
void
|
|
|
|
__libc_fstab_freemem (void)
|
1998-02-26 19:20:59 +08:00
|
|
|
{
|
|
|
|
char *buffer;
|
|
|
|
|
|
|
|
buffer = fstab_state.fs_buffer;
|
2008-05-27 14:04:07 +08:00
|
|
|
free ((void *) buffer);
|
1998-02-26 19:20:59 +08:00
|
|
|
}
|