From: Keith Marshall Date: Sat, 11 Feb 2017 12:35:12 +0000 (+0000) Subject: Refactor and shared declarations. X-Git-Tag: wsl-5.0-release~8 X-Git-Url: http://git.osdn.net/view?p=mingw%2Fmingw-org-wsl.git;a=commitdiff_plain;h=f034c6d7403650f81e872f025913fb6d46bba894 Refactor and shared declarations. --- diff --git a/mingwrt/ChangeLog b/mingwrt/ChangeLog index e316cf1..322c564 100644 --- a/mingwrt/ChangeLog +++ b/mingwrt/ChangeLog @@ -1,3 +1,21 @@ +2017-02-11 Keith Marshall + + Refactor and shared declarations. + + * include/getopt.h: Assert copyright. + (_BEGIN_C_DECLS, _END_C_DECLS): Use as appropriate. + (__GETOPT_H__, __GETOPT_LONG_H__): Delete them; replace them with... + (_GETOPT_H): This new macro; it guards the entire file, except when... + [__UNISTD_H_SOURCED__]: ...do not activate it; hence when... + [!_GETOPT_H]: ...do not expose API declarations for... + (getopt_long, getopt_long_only): ...these functions. + [_GETOPT_H && _UNISTD_H]: Skip second pass API declarations for... + (getopt): ...this function. + + * include/unistd.h: Use the #include "..." form when including... + (io.h, process.h, getopt.h): ...these, to ensure correct association. + (ftruncate): Map it directly to MSVCRT.DLL's _chsize() entry point. + 2017-02-10 Keith Marshall Avoid unnecessary duplication of configuration files. diff --git a/mingwrt/include/getopt.h b/mingwrt/include/getopt.h index 45a8afb..28f02d4 100644 --- a/mingwrt/include/getopt.h +++ b/mingwrt/include/getopt.h @@ -1,41 +1,62 @@ -#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. + * the getopt(), getopt_long() and getopt_long_only() APIs. * - * Contributed by Keith Marshall + * $Id$ * + * Written by Keith Marshall + * Copyright (C) 2003, 2008, 2009, 2017, MinGW.org Project. * - * THIS SOFTWARE IS NOT COPYRIGHTED * - * This source code is offered for use in the public domain. You may - * use, modify or distribute it freely. + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: * - * 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. + * The above copyright notice, this permission notice, and the following + * disclaimer shall be included in all copies or substantial portions of + * the Software. * - * $Revision$ - * $Author$ - * $Date$ + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OF OR OTHER + * DEALINGS IN THE SOFTWARE. * */ -#define __GETOPT_H__ +#ifndef _GETOPT_H +#pragma GCC system_header -/* All the headers include this file. */ -#include <_mingw.h> +#ifndef __UNISTD_H_SOURCED__ +/* POSIX requires the getopt() API to be specified in ; thus, + * includes . However, we do not want to expose the + * getopt_long() or getopt_long_only() APIs, when included in this manner. + * Thus, we process only part of when __UNISTD_H_SOURCED__ has + * been defined, and activate the _GETOPT_H repeat inclusion guard macro + * only when it has not. + */ +#define _GETOPT_H -#ifdef __cplusplus -extern "C" { +/* All MinGW headers are required to include <_mingw.h>, before anything + * else; however, when sourced by , this has been done already. + */ +#include <_mingw.h> #endif +_BEGIN_C_DECLS + +#if ! (defined _GETOPT_H && defined _UNISTD_H) +/* This section of is always to be processed, but it doesn't + * need to be processed twice; if both _GETOPT_H and _UNISTD_H have been + * defined, when we get to here, then we have reached this point for the + * second time, so we may safely skip this section. + */ 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... */ @@ -46,66 +67,41 @@ extern char *optarg; /* pointer to argument of current option */ extern int getopt( int, char * const [], const char * ); #ifdef _BSD_SOURCE -/* - * BSD adds the non-standard `optreset' feature, for reinitialisation - * of `getopt' parsing. We support this feature, for applications which +/* BSD adds the non-standard "optreset" feature, for reinitialization + * of getopt() parsing. We support this feature, for applications which * proclaim their BSD heritage, before including this header; however, * to maintain portability, developers are advised to avoid it. */ # define optreset __mingw_optreset extern int optreset; -#endif -#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 +#endif /* _BSD_SOURCE */ +#endif /* !(_GETOPT_H && _UNISTD_H) */ +#ifdef _GETOPT_H +/* This is the section of which declares the getopt_long() + * and getopt_long_only() APIs; it is processed only when + * is included directly. + */ struct option /* specification for a long form option... */ -{ - const char *name; /* option name, without leading hyphens */ +{ 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 */ +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 /* _GETOPT_H */ + +_END_C_DECLS -#endif /* !defined(__UNISTD_H_SOURCED__) && !defined(__GETOPT_LONG_H__) */ -/* $RCSfile$$Revision$: end of file */ +#endif /* !_GETOPT_H: $RCSfile$: end of file */ diff --git a/mingwrt/include/unistd.h b/mingwrt/include/unistd.h index 495f3af..4080ab5 100644 --- a/mingwrt/include/unistd.h +++ b/mingwrt/include/unistd.h @@ -11,7 +11,7 @@ * Ramiro Polla * Gregory McGarry * Keith Marshall - * Copyright (C) 1997, 1999, 2002-2004, 2007-2009, 2014-2016, + * Copyright (C) 1997, 1999, 2002-2004, 2007-2009, 2014-2017, * MinGW.org Project. * * @@ -50,9 +50,12 @@ */ #define __UNISTD_H_SOURCED__ 1 -#include -#include -#include +/* Use "..." inclusion here, to ensure that we get our own headers, which + * are designed to interoperate with the __UNISTD_H_SOURCED__ filter. + */ +#include "io.h" +#include "process.h" +#include "getopt.h" /* These are defined in stdio.h. POSIX also requires that they * are to be consistently defined here; don't guard against prior @@ -125,7 +128,7 @@ unsigned sleep( unsigned period ){ return __mingw_sleep( period, 0 ); } int __cdecl ftruncate( int, off_t ); #ifndef __NO_INLINE__ -__CRT_INLINE __JMPSTUB__(( FUNCTION = ftruncate, REMAPPED = _chsize )) +__CRT_INLINE __JMPSTUB__(( FUNCTION = ftruncate, DLLENTRY = _chsize )) int ftruncate( int __fd, off_t __length ){ return _chsize( __fd, __length ); } #endif @@ -134,4 +137,4 @@ _END_C_DECLS #endif /* _POSIX_C_SOURCE */ #undef __UNISTD_H_SOURCED__ -#endif /* ! _UNISTD_H: $RCSfile$: end of file */ +#endif /* !_UNISTD_H: $RCSfile$: end of file */