[uClibc-cvs] uClibc/libc/sysdeps/linux/common/bits getopt.h, NONE, 1.1 uClibc_ctype.h, 1.3, 1.4
Manuel Novoa III
mjn3 at uclibc.org
Mon Sep 8 20:33:09 UTC 2003
- Previous message: [uClibc-cvs] uClibc/include getopt.h, 1.5, 1.6 stdio.h, 1.28, 1.29 unistd.h, 1.23, 1.24
- Next message: [uClibc-cvs] uClibc/libc/unistd getopt-susv3.c, NONE, 1.1 Makefile, 1.32, 1.33
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /var/cvs/uClibc/libc/sysdeps/linux/common/bits
In directory winder:/tmp/cvs-serv11607/libc/sysdeps/linux/common/bits
Modified Files:
uClibc_ctype.h
Added Files:
getopt.h
Log Message:
Add back in table-less ctype funcs for those interested in minimizing
static build sizes and not needing wchar support.
Add in a SUSv3 getopt as an option for those not needing gnu getopt.
Again, mainly for the static linking crowd.
--- NEW FILE: getopt.h ---
/* Declarations for getopt.
Copyright (C) 1989-1994, 1996-1999, 2001 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 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.
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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#ifndef _GETOPT_H
#ifndef __need_getopt
# define _GETOPT_H 1
#endif
/* If __GNU_LIBRARY__ is not already defined, either we are being used
standalone, or this is the first header included in the source file.
If we are being used with glibc, we need to include <features.h>, but
that does not exist if we are standalone. So: if __GNU_LIBRARY__ is
not defined, include <ctype.h>, which will pull in <features.h> for us
if it's from glibc. (Why ctype.h? It's guaranteed to exist and it
doesn't flood the namespace with stuff the way some other headers do.) */
#if !defined __GNU_LIBRARY__
# include <ctype.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif
/* For communication from `getopt' to the caller.
When `getopt' finds an option that takes an argument,
the argument value is returned here.
Also, when `ordering' is RETURN_IN_ORDER,
each non-option ARGV-element is returned here. */
extern char *optarg;
/* Index in ARGV of the next element to be scanned.
This is used for communication to and from the caller
and for communication between successive calls to `getopt'.
On entry to `getopt', zero means this is the first call; initialize.
When `getopt' returns -1, this is the index of the first of the
non-option elements that the caller should itself scan.
Otherwise, `optind' communicates from one call to the next
how much of ARGV has been scanned so far. */
extern int optind;
/* Callers store zero here to inhibit the error message `getopt' prints
for unrecognized options. */
extern int opterr;
/* Set to an option character which was unrecognized. */
extern int optopt;
#ifndef __need_getopt
/* Describe the long-named options requested by the application.
The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
of `struct option' terminated by an element containing a name which is
zero.
The field `has_arg' is:
no_argument (or 0) if the option does not take an argument,
required_argument (or 1) if the option requires an argument,
optional_argument (or 2) if the option takes an optional argument.
If the field `flag' is not NULL, it points to a variable that is set
to the value given in the field `val' when the option is found, but
left unchanged if the option is not found.
To have a long-named option do something other than set an `int' to
a compiled-in constant, such as set a value from `optarg', set the
option's `flag' field to zero and its `val' field to a nonzero
value (the equivalent single-letter option character, if there is
one). For long options that have a zero `flag' field, `getopt'
returns the contents of the `val' field. */
struct option
{
const char *name;
/* has_arg can't be an enum because some compilers complain about
type mismatches in all the code that assumes it is an int. */
int has_arg;
int *flag;
int val;
};
/* Names for the values of the `has_arg' field of `struct option'. */
# define no_argument 0
# define required_argument 1
# define optional_argument 2
#endif /* need getopt */
/* Get definitions and prototypes for functions to process the
arguments in ARGV (ARGC of them, minus the program name) for
options given in OPTS.
Return the option character from OPTS just read. Return -1 when
there are no more options. For unrecognized options, or options
missing arguments, `optopt' is set to the option letter, and '?' is
returned.
The OPTS string is a list of characters which are recognized option
letters, optionally followed by colons, specifying that that letter
takes an argument, to be placed in `optarg'.
If a letter in OPTS is followed by two colons, its argument is
optional. This behavior is specific to the GNU `getopt'.
The argument `--' causes premature termination of argument
scanning, explicitly telling `getopt' that there are no more
options.
If OPTS begins with `--', then non-option arguments are treated as
arguments to the option '\0'. This behavior is specific to the GNU
`getopt'. */
/* Many other libraries have conflicting prototypes for getopt, with
differences in the consts, in stdlib.h. To avoid compilation
errors, only prototype getopt for the GNU C library. */
extern int getopt (int __argc, char *const *__argv, const char *__shortopts);
#ifndef __need_getopt
extern int getopt_long (int __argc, char *const *__argv, const char *__shortopts,
const struct option *__longopts, int *__longind);
extern int getopt_long_only (int __argc, char *const *__argv,
const char *__shortopts,
const struct option *__longopts, int *__longind);
/* Internal only. Users should not call this directly. */
extern int _getopt_internal (int __argc, char *const *__argv,
const char *__shortopts,
const struct option *__longopts, int *__longind,
int __long_only);
#endif
#ifdef __cplusplus
}
#endif
/* Make sure we later can get all the definitions and declarations. */
#undef __need_getopt
#endif /* getopt.h */
Index: uClibc_ctype.h
===================================================================
RCS file: /var/cvs/uClibc/libc/sysdeps/linux/common/bits/uClibc_ctype.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- uClibc_ctype.h 1 Aug 2003 20:08:56 -0000 1.3
+++ uClibc_ctype.h 8 Sep 2003 20:33:05 -0000 1.4
@@ -33,7 +33,7 @@
#ifndef _BITS_CTYPE_H
#define _BITS_CTYPE_H
-#warning uClibc_ctype.h is deprecated
+#ifdef __UCLIBC_GEN_LOCALE
/* Taking advantage of the C99 mutual-exclusion guarantees for the various
* (w)ctype classes, including the descriptions of printing and control
@@ -80,72 +80,9 @@
/* #define __CTYPE_isxdigit(D) -- isxdigit is untestable this way.
* But that's ok as isxdigit() (and isdigit() too) are locale-invariant. */
-/* The values for wctype_t. */
-enum {
- _CTYPE_unclassified = 0,
- _CTYPE_isalnum,
- _CTYPE_isalpha,
- _CTYPE_isblank,
- _CTYPE_iscntrl,
- _CTYPE_isdigit,
- _CTYPE_isgraph,
- _CTYPE_islower,
- _CTYPE_isprint,
- _CTYPE_ispunct,
- _CTYPE_isspace,
- _CTYPE_isupper,
- _CTYPE_isxdigit /* _MUST_ be last of the standard classes! */
-};
-
-
-/* The following is used to implement wctype(), but it is defined
- * here because the ordering must agree with that of the enumeration
- * above (ignoring unclassified). */
-#define __CTYPE_TYPESTRING \
- "\6alnum\0\6alpha\0\6blank\0\6cntrl\0\6digit\0\6graph\0\6lower\0" \
- "\6print\0\6punct\0\6space\0\6upper\0\7xdigit\0\0"
-
-/* Used in implementing iswctype(), but defined here as it must agree
- * in ordering with the string above. */
-#define __CTYPE_RANGES \
- 0, -1, /* unclassified */ \
- 1, __CTYPE_digit - 1, /* alnum */ \
- 1, __CTYPE_alpha_upper - 1, /* alpha */ \
- __CTYPE_print_space_blank, 5, /* blank -- also must be odd! */ \
- __CTYPE_cntrl_space_nonblank, 2, /* cntrl */ \
- __CTYPE_digit, 0, /* digit */ \
- 1, __CTYPE_graph - 1, /* graph */ \
- __CTYPE_alpha_lower, 1, /* lower */ \
- 1, __CTYPE_print_space_blank - 1, /* print */ \
- __CTYPE_punct, 0, /* punct */ \
- __CTYPE_print_space_nonblank, 5, /* space */ \
- __CTYPE_alpha_upper_lower, 1, /* upper */ \
- /* No entry for xdigit as it is handled specially. */
-
-#define _CTYPE_iswalnum _CTYPE_isalnum
-#define _CTYPE_iswalpha _CTYPE_isalpha
-#define _CTYPE_iswblank _CTYPE_isblank
-#define _CTYPE_iswcntrl _CTYPE_iscntrl
-#define _CTYPE_iswdigit _CTYPE_isdigit
-#define _CTYPE_iswgraph _CTYPE_isgraph
-#define _CTYPE_iswlower _CTYPE_islower
-#define _CTYPE_iswprint _CTYPE_isprint
-#define _CTYPE_iswpunct _CTYPE_ispunct
-#define _CTYPE_iswspace _CTYPE_isspace
-#define _CTYPE_iswupper _CTYPE_isupper
-#define _CTYPE_iswxdigit _CTYPE_isxdigit
-
-/* The following is used to implement wctrans(). */
-
-enum {
- _CTYPE_tolower = 1,
- _CTYPE_toupper,
- _CTYPE_totitle
-};
-
-#define __CTYPE_TRANSTRING "\10tolower\0\10toupper\0\10totitle\0\0"
+#else /* __UCLIBC_GEN_LOCALE *****************************************/
-/* Now define some ctype macros valid for the C/POSIX locale. */
+/* Define some ctype macros valid for the C/POSIX locale. */
/* ASCII ords of \t, \f, \n, \r, and \v are 9, 12, 10, 13, 11 respectively. */
#define __C_isspace(c) \
@@ -207,46 +144,173 @@
? (((unsigned char)(((c)) - 'A')) < 6) \
: (((unsigned int)(((c)) - 'A')) < 6)))
-/* TODO: Replace the above with expressions like the following? */
-/* #define __C_isdigit(c) ((sizeof(c) == sizeof(char)) \ */
-/* ? (((unsigned char)((c) - '0')) < 10) \ */
-/* : (((unsigned int)((c) - '0')) < 10)) */
+/**********************************************************************/
+__BEGIN_DECLS
-/* Similarly, define some wctype macros valid for the C/POSIX locale. */
+extern int isalnum(int c) __THROW;
+extern int isalpha(int c) __THROW;
+#ifdef __USE_ISOC99
+extern int isblank(int c) __THROW;
+#endif
+extern int iscntrl(int c) __THROW;
+extern int isdigit(int c) __THROW;
+extern int isgraph(int c) __THROW;
+extern int islower(int c) __THROW;
+extern int isprint(int c) __THROW;
+extern int ispunct(int c) __THROW;
+extern int isspace(int c) __THROW;
+extern int isupper(int c) __THROW;
+extern int isxdigit(int c) __THROW;
-/* First, we need some way to make sure the arg is in range. */
-#define __C_classed(c) \
- ((sizeof(c) <= sizeof(int)) || (c == ((unsigned char)c)))
+extern int tolower(int c) __THROW;
+extern int toupper(int c) __THROW;
-#define __C_iswspace(c) (__C_classed(c) && __C_isspace(c))
-#define __C_iswblank(c) (__C_classed(c) && __C_isblank(c))
-#define __C_iswdigit(c) (__C_classed(c) && __C_isdigit(c))
-#define __C_iswxdigit(c) (__C_classed(c) && __C_isxdigit(c))
-#define __C_iswcntrl(c) (__C_classed(c) && __C_iscntrl(c))
-#define __C_iswalpha(c) (__C_classed(c) && __C_isalpha(c))
-#define __C_iswalnum(c) (__C_classed(c) && __C_isalnum(c))
-#define __C_iswprint(c) (__C_classed(c) && __C_isprint(c))
-#define __C_iswlower(c) (__C_classed(c) && __C_islower(c))
-#define __C_iswupper(c) (__C_classed(c) && __C_isupper(c))
-#define __C_iswpunct(c) (__C_classed(c) && __C_ispunct(c))
-#define __C_iswgraph(c) (__C_classed(c) && __C_isgraph(c))
-#define __C_towlower(c) \
- ((__C_classed(c) && __C_isupper(c)) ? ((c) | 0x20) : (c))
-#define __C_towupper(c) \
- ((__C_classed(c) && __C_islower(c)) ? ((c) ^ 0x20) : (c))
+#if defined __USE_SVID || defined __USE_MISC || defined __USE_XOPEN
+extern int isascii(int c) __THROW;
+extern int toascii(int c) __THROW;
+#endif
-/* Now define some macros to aviod the extra wrapper-function call. */
-#define __iswalnum(c) iswctype(c, _CTYPE_iswalnum)
-#define __iswalpha(c) iswctype(c, _CTYPE_iswalpha)
-#define __iswblank(c) iswctype(c, _CTYPE_iswblank)
-#define __iswcntrl(c) iswctype(c, _CTYPE_iswcntrl)
-#define __iswgraph(c) iswctype(c, _CTYPE_iswgraph)
-#define __iswlower(c) iswctype(c, _CTYPE_iswlower)
-#define __iswprint(c) iswctype(c, _CTYPE_iswprint)
-#define __iswpunct(c) iswctype(c, _CTYPE_iswpunct)
-#define __iswspace(c) iswctype(c, _CTYPE_iswspace)
-#define __iswupper(c) iswctype(c, _CTYPE_iswupper)
-#define __iswdigit(c) __C_iswdigit(c)
-#define __iswxdigit(c) __C_iswxdigit(c)
+/* The following are included for compatibility with older versions of
+ * uClibc; but now they're only visible if MISC funcctionality is requested.
+ * However, as they are locale-independent, the hidden macro versions are
+ * always present. */
+#ifdef __USE_MISC
+extern int isxlower(int c) __THROW; /* uClibc-specific. */
+extern int isxupper(int c) __THROW; /* uClibc-specific. */
+
+/* isdigit() is really locale-invariant, so provide some small fast macros.
+ * These are uClibc-specific. */
+#define __isdigit_char(C) (((unsigned char)((C) - '0')) <= 9)
+#define __isdigit_int(C) (((unsigned int)((C) - '0')) <= 9)
+#endif
+
+/* Next, some ctype macros which are valid for all supported locales. */
+/* WARNING: isspace and isblank need to be reverified if more 8-bit codesets
+ * are added!!! But isdigit and isxdigit are always valid. */
+
+/* #define __isspace(c) __C_isspace(c) */
+/* #define __isblank(c) __C_isblank(c) */
+
+/* #define __isdigit(c) __C_isdigit(c) */
+/* #define __isxdigit(c) __C_isxdigit(c) */
+
+/* Now some non-ansi/iso c99 macros. */
+
+#define __isascii(c) (((c) & ~0x7f) == 0)
+#define __toascii(c) ((c) & 0x7f)
+#define _toupper(c) ((c) ^ 0x20)
+#define _tolower(c) ((c) | 0x20)
+
+
+/* For compatibility with older versions of uClibc. Are these ever used? */
+#if 0
+#define __isxlower(c) __C_isxlower(c) /* uClibc-specific. */
+#define __isxupper(c) __C_isxupper(c) /* uClibc-specific. */
+#endif
+
+/* Apparently, glibc implements things as macros if __NO_CTYPE isn't defined.
+ * If we don't have locale support, we'll do the same. Otherwise, we'll
+ * only use macros for the supported-locale-invariant cases. */
+#ifndef __UCLIBC_HAS_LOCALE__
+
+#endif /* __UCLIBC_HAS_LOCALE__ */
+
+__END_DECLS
+
+/**********************************************************************/
+#ifdef __GNUC__
+
+#define __isbody_C_macro(f,args) __C_ ## f args
+
+#define __isbody(f,c) \
+ (__extension__ ({ \
+ int __res; \
+ if (sizeof(c) > sizeof(char)) { \
+ int __c = (c); \
+ __res = __isbody_C_macro(f,(__c)); \
+ } else { \
+ unsigned char __c = (c); \
+ __res = __isbody_C_macro(f,(__c)); \
+ } \
+ __res; \
+ }))
+
+#define __body_C_macro(f,args) __C_ ## f args
+
+#define __body(f,c) \
+ (__extension__ ({ \
+ int __res; \
+ if (sizeof(c) > sizeof(char)) { \
+ int __c = (c); \
+ __res = __body_C_macro(f,(__c)); \
+ } else { \
+ unsigned char __c = (c); \
+ __res = __body_C_macro(f,(__c)); \
+ } \
+ __res; \
+ }))
+
+#define __isspace(c) __body(isspace,c)
+#define __isblank(c) __body(isblank,c)
+#define __isdigit(c) __body(isdigit,c)
+#define __isxdigit(c) __body(isxdigit,c)
+#define __iscntrl(c) __body(iscntrl,c)
+#define __isalpha(c) __body(isalpha,c)
+#define __isalnum(c) __body(isalnum,c)
+#define __isprint(c) __body(isprint,c)
+#define __islower(c) __body(islower,c)
+#define __isupper(c) __body(isupper,c)
+#define __ispunct(c) __body(ispunct,c)
+#define __isgraph(c) __body(isgraph,c)
+
+#define __isxlower(c) __body(isxlower,c)
+#define __isxupper(c) __body(isxupper,c)
+
+#define __tolower(c) __body(tolower,c)
+#define __toupper(c) __body(toupper,c)
+
+#if !defined __NO_CTYPE && !defined __cplusplus
+
+#define isspace(c) __isspace(c)
+#define isblank(c) __isblank(c)
+#define isdigit(c) __isdigit(c)
+#define isxdigit(c) __isxdigit(c)
+#define iscntrl(c) __iscntrl(c)
+#define isalpha(c) __isalpha(c)
+#define isalnum(c) __isalnum(c)
+#define isprint(c) __isprint(c)
+#define islower(c) __islower(c)
+#define isupper(c) __isupper(c)
+#define ispunct(c) __ispunct(c)
+#define isgraph(c) __isgraph(c)
+
+#define isxlower(c) __isxlower(c)
+#define isxupper(c) __isxupper(c)
+
+#define tolower(c) __tolower(c)
+#define toupper(c) __toupper(c)
+
+
+#endif
+
+#else /* _GNUC__ ***************************************************/
+
+#if !defined __NO_CTYPE && !defined __cplusplus
+
+/* These macros should be safe from side effects. */
+
+#define isdigit(c) __C_isdigit(c)
+#define isalpha(c) __C_isalpha(c)
+#define isprint(c) __C_isprint(c)
+#define islower(c) __C_islower(c)
+#define isupper(c) __C_isupper(c)
+#define isgraph(c) __C_isgraph(c)
+
+#endif
+
+#endif /* __GNUC__ */
+/**********************************************************************/
+
+#endif /* __UCLIBC_GEN_LOCALE */
#endif /* _BITS_CTYPE_H */
- Previous message: [uClibc-cvs] uClibc/include getopt.h, 1.5, 1.6 stdio.h, 1.28, 1.29 unistd.h, 1.23, 1.24
- Next message: [uClibc-cvs] uClibc/libc/unistd getopt-susv3.c, NONE, 1.1 Makefile, 1.32, 1.33
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the uClibc-cvs
mailing list