summaryrefslogtreecommitdiffstats
path: root/winsup/mingw/include
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/mingw/include')
-rw-r--r--winsup/mingw/include/getopt.h100
-rw-r--r--winsup/mingw/include/unistd.h10
2 files changed, 105 insertions, 5 deletions
diff --git a/winsup/mingw/include/getopt.h b/winsup/mingw/include/getopt.h
index e69de29bb..00cd5473f 100644
--- a/winsup/mingw/include/getopt.h
+++ b/winsup/mingw/include/getopt.h
@@ -0,0 +1,100 @@
+#ifndef __GETOPT_H__
+/*
+ * getopt.h
+ *
+ * $Id$
+ *
+ * Defines constants and function prototypes required to implement
+ * the `getopt', `getopt_long' and `getopt_long_only' APIs.
+ *
+ * This file is part of the MinGW32 package set.
+ *
+ * Contributed by Keith Marshall <keithmarshall@users.sourceforge.net>
+ *
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * $Revision$
+ * $Author$
+ * $Date$
+ *
+ */
+#define __GETOPT_H__
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern int optind; /* index of first non-option in argv */
+extern int optopt; /* single option character, as parsed */
+extern int opterr; /* flag to enable built-in diagnostics... */
+ /* (user may set to zero, to suppress) */
+
+extern char *optarg; /* pointer to argument of current option */
+
+extern int getopt( int, char * const [], const char * );
+
+#ifdef __cplusplus
+}
+#endif
+/*
+ * POSIX requires the `getopt' API to be specified in `unistd.h';
+ * thus, `unistd.h' includes this header. However, we do not want
+ * to expose the `getopt_long' or `getopt_long_only' APIs, when
+ * included in this manner. Thus, close the standard __GETOPT_H__
+ * declarations block, and open an additional __GETOPT_LONG_H__
+ * specific block, only when *not* __UNISTD_H_SOURCED__, in which
+ * to declare the extended API.
+ */
+#endif /* !defined(__GETOPT_H__) */
+#if !defined(__UNISTD_H_SOURCED__) && !defined(__GETOPT_LONG_H__)
+#define __GETOPT_LONG_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct option /* specification for a long form option... */
+{
+ const char *name; /* option name, without leading hyphens */
+ int has_arg; /* does it take an argument? */
+ int *flag; /* where to save its status, or NULL */
+ int val; /* its associated status value */
+};
+
+enum /* permitted values for its `has_arg' field... */
+{
+ no_argument = 0, /* option never takes an argument */
+ required_argument, /* option always requires an argument */
+ optional_argument /* option may take an argument */
+};
+
+extern int getopt_long( int, char * const [], const char *, const struct option *, int * );
+extern int getopt_long_only( int, char * const [], const char *, const struct option *, int * );
+/*
+ * Previous MinGW implementation had...
+ */
+#ifndef HAVE_DECL_GETOPT
+/*
+ * ...for the long form API only; keep this for compatibility.
+ */
+# define HAVE_DECL_GETOPT 1
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !defined(__UNISTD_H_SOURCED__) && !defined(__GETOPT_LONG_H__) */
+/* $RCSfile$Revision$: end of file */
diff --git a/winsup/mingw/include/unistd.h b/winsup/mingw/include/unistd.h
index 54dbc6699..3e7f2364a 100644
--- a/winsup/mingw/include/unistd.h
+++ b/winsup/mingw/include/unistd.h
@@ -1,18 +1,17 @@
+#ifndef _UNISTD_H
/*
* This file is part of the Mingw32 package.
*
* unistd.h maps (roughly) to io.h
+ * Other headers included by unistd.h may be selectively processed;
+ * __UNISTD_H_SOURCED__ enables such selective processing.
*/
-
-#ifndef _UNISTD_H
#define _UNISTD_H
+#define __UNISTD_H_SOURCED__ 1
#include <io.h>
#include <process.h>
-
-#define __UNISTD_GETOPT__
#include <getopt.h>
-#undef __UNISTD_GETOPT__
/* These are also defined in stdio.h. */
#ifndef SEEK_SET
@@ -49,4 +48,5 @@ __CRT_INLINE int ftruncate(int __fd, off_t __length)
}
#endif
+#undef __UNISTD_H_SOURCED__
#endif /* _UNISTD_H */