mirror of
https://gitlab.freedesktop.org/libbsd/libbsd.git
synced 2025-05-30 07:52:43 +02:00
reset_getopt: New function (borrowed from e2fsprogs)
This commit is contained in:
parent
19cc95400b
commit
c849ba32af
@ -1,3 +1,11 @@
|
|||||||
|
2006-02-13 Robert Millan <rmh@aybabtu.com>
|
||||||
|
|
||||||
|
Add reset_getopt (borrowed from e2fsprogs).
|
||||||
|
* reset_getopt.c: New.
|
||||||
|
* Versions: Add reset_getopt.
|
||||||
|
* Makefile: Add reset_getopt.c.
|
||||||
|
* debian/copyright: Add license (GPL).
|
||||||
|
|
||||||
2006-02-10 Robert Millan <rmh@aybabtu.com>
|
2006-02-10 Robert Millan <rmh@aybabtu.com>
|
||||||
|
|
||||||
Add errc, warnc, verrc and vwarnc.
|
Add errc, warnc, verrc and vwarnc.
|
||||||
|
2
Makefile
2
Makefile
@ -4,7 +4,7 @@
|
|||||||
# $Id$
|
# $Id$
|
||||||
#
|
#
|
||||||
|
|
||||||
LIB_SRCS = arc4random.c err.c fgetln.c inet_net_pton.c strlcat.c strlcpy.c md5c.c fmtcheck.c
|
LIB_SRCS = arc4random.c err.c fgetln.c inet_net_pton.c reset_getopt.c strlcat.c strlcpy.c md5c.c fmtcheck.c
|
||||||
|
|
||||||
LIB_INCLUDES = include/bsd/err.h include/bsd/ip_icmp.h include/bsd/random.h include/bsd/queue.h include/bsd/md5.h include/bsd/string.h include/bsd/bsd.h include/bsd/stdlib.h
|
LIB_INCLUDES = include/bsd/err.h include/bsd/ip_icmp.h include/bsd/random.h include/bsd/queue.h include/bsd/md5.h include/bsd/string.h include/bsd/bsd.h include/bsd/stdlib.h
|
||||||
|
|
||||||
|
4
Versions
4
Versions
@ -6,8 +6,8 @@ LIBBSD_0.0 {
|
|||||||
fgetwln;
|
fgetwln;
|
||||||
fmtcheck;
|
fmtcheck;
|
||||||
inet_net_pton;
|
inet_net_pton;
|
||||||
strlcpy;
|
reset_getopt;
|
||||||
strlcat;
|
strlcpy; strlcat;
|
||||||
MD5Init;
|
MD5Init;
|
||||||
MD5Update;
|
MD5Update;
|
||||||
MD5Pad;
|
MD5Pad;
|
||||||
|
51
reset_getopt.c
Normal file
51
reset_getopt.c
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
* util.c --- utilities for the debugfs program
|
||||||
|
*
|
||||||
|
* Copyright (C) 1993, 1994 Theodore Ts'o. This file may be
|
||||||
|
* redistributed under the terms of the GNU Public License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Enable getopt variables */
|
||||||
|
#ifndef _GNU_SOURCE
|
||||||
|
# define _GNU_SOURCE 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
/* FIXME */
|
||||||
|
#ifndef __GLIBC__
|
||||||
|
# define HAVE_OPTRESET 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This function resets the libc getopt() function, which keeps
|
||||||
|
* internal state. Bad design! Stupid libc API designers! No
|
||||||
|
* biscuit!
|
||||||
|
*
|
||||||
|
* BSD-derived getopt() functions require that optind be reset to 1 in
|
||||||
|
* order to reset getopt() state. This used to be generally accepted
|
||||||
|
* way of resetting getopt(). However, glibc's getopt()
|
||||||
|
* has additional getopt() state beyond optind, and requires that
|
||||||
|
* optind be set zero to reset its state. So the unfortunate state of
|
||||||
|
* affairs is that BSD-derived versions of getopt() misbehave if
|
||||||
|
* optind is set to 0 in order to reset getopt(), and glibc's getopt()
|
||||||
|
* will core ump if optind is set 1 in order to reset getopt().
|
||||||
|
*
|
||||||
|
* More modern versions of BSD require that optreset be set to 1 in
|
||||||
|
* order to reset getopt(). Sigh. Standards, anyone?
|
||||||
|
*
|
||||||
|
* We hide the hair here.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
reset_getopt (void)
|
||||||
|
{
|
||||||
|
#ifdef __GLIBC__
|
||||||
|
optind = 0;
|
||||||
|
#else
|
||||||
|
optind = 1;
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_OPTRESET
|
||||||
|
optreset = 1; /* Makes BSD getopt happy */
|
||||||
|
#endif
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user