[Box Backup-commit] COMMIT r3198 - in box/trunk: bin/bbackupctl bin/bbstoreaccounts infrastructure lib/server lib/win32

subversion at boxbackup.org subversion at boxbackup.org
Mon Sep 30 09:28:59 BST 2013


Author: chris
Date: 2013-09-30 09:28:58 +0100 (Mon, 30 Sep 2013)
New Revision: 3198

Added:
   box/trunk/lib/win32/box_getopt.h
   box/trunk/lib/win32/bsd_getopt.h
Removed:
   box/trunk/lib/win32/getopt.h
Modified:
   box/trunk/bin/bbackupctl/bbackupctl.cpp
   box/trunk/bin/bbstoreaccounts/bbstoreaccounts.cpp
   box/trunk/infrastructure/buildenv-testmain-template.cpp
   box/trunk/lib/server/Daemon.cpp
   box/trunk/lib/win32/getopt_long.cpp
Log:
Fix getopt header confusion.

Our copy of getopt.h in lib/win32 was beating the system getopt.h in the
search path, and providing different definitions, which clang picked up.

Renamed our getopt.h to bsd_getopt.h, and added a box_getopt.h to decide
whether to include this one instead of the system getopt.h.

Modified: box/trunk/bin/bbackupctl/bbackupctl.cpp
===================================================================
--- box/trunk/bin/bbackupctl/bbackupctl.cpp	2013-09-28 23:53:09 UTC (rev 3197)
+++ box/trunk/bin/bbackupctl/bbackupctl.cpp	2013-09-30 08:28:58 UTC (rev 3198)
@@ -18,6 +18,7 @@
 
 #include <cstdlib>
 
+#include "box_getopt.h"
 #include "MainHelper.h"
 #include "BoxPortsAndFiles.h"
 #include "BackupDaemonConfigVerify.h"

Modified: box/trunk/bin/bbstoreaccounts/bbstoreaccounts.cpp
===================================================================
--- box/trunk/bin/bbstoreaccounts/bbstoreaccounts.cpp	2013-09-28 23:53:09 UTC (rev 3197)
+++ box/trunk/bin/bbstoreaccounts/bbstoreaccounts.cpp	2013-09-30 08:28:58 UTC (rev 3198)
@@ -24,6 +24,7 @@
 #include <ostream>
 #include <vector>
 
+#include "box_getopt.h"
 #include "BackupStoreAccounts.h"
 #include "BackupStoreAccountDatabase.h"
 #include "BackupStoreCheck.h"

Modified: box/trunk/infrastructure/buildenv-testmain-template.cpp
===================================================================
--- box/trunk/infrastructure/buildenv-testmain-template.cpp	2013-09-28 23:53:09 UTC (rev 3197)
+++ box/trunk/infrastructure/buildenv-testmain-template.cpp	2013-09-30 08:28:58 UTC (rev 3198)
@@ -25,10 +25,6 @@
 #include <stdio.h>
 #include <unistd.h>
 
-#ifdef HAVE_GETOPT_H
-	#include <getopt.h>
-#endif
-
 #ifdef HAVE_SYS_SOCKET_H
 #	include <sys/socket.h>
 #endif
@@ -43,6 +39,7 @@
 #include <exception>
 #include <string>
 
+#include "box_getopt.h"
 #include "Logging.h"
 #include "Test.h"
 #include "Timer.h"
@@ -231,7 +228,6 @@
 
 	Logging::SetProgramName(BOX_MODULE);
 
-#ifdef HAVE_GETOPT_H
 	#ifdef BOX_RELEASE_BUILD
 	int logLevel = Log::NOTICE; // need an int to do math with
 	#else
@@ -372,7 +368,6 @@
 
 	argc -= optind - 1;
 	argv += optind - 1;
-#endif // HAVE_GETOPT_H
 
 	// If there is more than one argument, then the test is doing something advanced, so leave it alone
 	bool fulltestmode = (argc == 1);

Modified: box/trunk/lib/server/Daemon.cpp
===================================================================
--- box/trunk/lib/server/Daemon.cpp	2013-09-28 23:53:09 UTC (rev 3197)
+++ box/trunk/lib/server/Daemon.cpp	2013-09-30 08:28:58 UTC (rev 3198)
@@ -368,7 +368,7 @@
 	// reset getopt, just in case anybody used it before.
 	// unfortunately glibc and BSD differ on this point!
 	// http://www.ussg.iu.edu/hypermail/linux/kernel/0305.3/0262.html
-	#if HAVE_DECL_OPTRESET == 1 || defined WIN32
+	#if HAVE_DECL_OPTRESET == 1 || defined BOX_BSD_GETOPT
 		optind = 1;
 		optreset = 1;
 	#elif defined __GLIBC__

Added: box/trunk/lib/win32/box_getopt.h
===================================================================
--- box/trunk/lib/win32/box_getopt.h	                        (rev 0)
+++ box/trunk/lib/win32/box_getopt.h	2013-09-30 08:28:58 UTC (rev 3198)
@@ -0,0 +1,14 @@
+#if defined _MSC_VER || defined __MINGW32__
+#define	REPLACE_GETOPT 1 /* use this getopt as the system getopt(3) */
+#else
+#define	REPLACE_GETOPT 0 // force a conflict if included multiple times
+#endif
+
+#if REPLACE_GETOPT
+#	include "bsd_getopt.h"
+#	define BOX_BSD_GETOPT
+#else
+#	include <getopt.h>
+#	undef BOX_BSD_GETOPT
+#endif
+

Copied: box/trunk/lib/win32/bsd_getopt.h (from rev 3193, box/trunk/lib/win32/getopt.h)
===================================================================
--- box/trunk/lib/win32/bsd_getopt.h	                        (rev 0)
+++ box/trunk/lib/win32/bsd_getopt.h	2013-09-30 08:28:58 UTC (rev 3198)
@@ -0,0 +1,105 @@
+/*	$OpenBSD: getopt.h,v 1.1 2002/12/03 20:24:29 millert Exp $	*/
+/*	$NetBSD: getopt.h,v 1.4 2000/07/07 10:43:54 ad Exp $	*/
+
+/*-
+ * Copyright (c) 2000 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Dieter Baron and Thomas Klausner.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *        This product includes software developed by the NetBSD
+ *        Foundation, Inc. and its contributors.
+ * 4. Neither the name of The NetBSD Foundation nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef REPLACE_GETOPT
+#error You must include box_getopt.h, not bsd_getopt.h
+#endif
+
+#if REPLACE_GETOPT // defined in box_getopt.h; until end of file
+
+#ifndef _GETOPT_H_
+#define _GETOPT_H_
+
+// copied from: http://www.la.utexas.edu/lab/software/devtool/gnu/libtool/C_header_files.html
+
+/* __BEGIN_DECLS should be used at the beginning of your declarations,
+   so that C++ compilers don't mangle their names.  Use __END_DECLS at
+   the end of C declarations. */
+#undef __BEGIN_DECLS
+#undef __END_DECLS
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS /* empty */
+# define __END_DECLS /* empty */
+#endif
+
+/*
+ * GNU-like getopt_long() and 4.4BSD getsubopt()/optreset extensions
+ */
+#define no_argument        0
+#define required_argument  1
+#define optional_argument  2
+
+struct option {
+	/* name of long option */
+	const char *name;
+	/*
+	 * one of no_argument, required_argument, and optional_argument:
+	 * whether option takes an argument
+	 */
+	int has_arg;
+	/* if not NULL, set *flag to val when option found */
+	int *flag;
+	/* if flag not NULL, value to set *flag to; else return value */
+	int val;
+};
+
+__BEGIN_DECLS
+int	 getopt_long(int, char * const *, const char *,
+	    const struct option *, int *);
+int	 getopt_long_only(int, char * const *, const char *,
+	    const struct option *, int *);
+#ifndef _GETOPT_DEFINED_
+#define _GETOPT_DEFINED_
+int	 getopt(int, char * const *, const char *);
+int	 getsubopt(char **, char * const *, char **);
+
+extern   char *optarg;                  /* getopt(3) external variables */
+extern   int opterr;
+extern   int optind;
+extern   int optopt;
+extern   int optreset;
+extern   char *suboptarg;               /* getsubopt(3) external variable */
+#endif
+__END_DECLS
+ 
+#endif /* !_GETOPT_H_ */
+#endif // REPLACE_GETOPT

Deleted: box/trunk/lib/win32/getopt.h
===================================================================
--- box/trunk/lib/win32/getopt.h	2013-09-28 23:53:09 UTC (rev 3197)
+++ box/trunk/lib/win32/getopt.h	2013-09-30 08:28:58 UTC (rev 3198)
@@ -1,98 +0,0 @@
-/*	$OpenBSD: getopt.h,v 1.1 2002/12/03 20:24:29 millert Exp $	*/
-/*	$NetBSD: getopt.h,v 1.4 2000/07/07 10:43:54 ad Exp $	*/
-
-/*-
- * Copyright (c) 2000 The NetBSD Foundation, Inc.
- * All rights reserved.
- *
- * This code is derived from software contributed to The NetBSD Foundation
- * by Dieter Baron and Thomas Klausner.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *        This product includes software developed by the NetBSD
- *        Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- *    contributors may be used to endorse or promote products derived
- *    from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _GETOPT_H_
-#define _GETOPT_H_
-
-// copied from: http://www.la.utexas.edu/lab/software/devtool/gnu/libtool/C_header_files.html
-
-/* __BEGIN_DECLS should be used at the beginning of your declarations,
-   so that C++ compilers don't mangle their names.  Use __END_DECLS at
-   the end of C declarations. */
-#undef __BEGIN_DECLS
-#undef __END_DECLS
-#ifdef __cplusplus
-# define __BEGIN_DECLS extern "C" {
-# define __END_DECLS }
-#else
-# define __BEGIN_DECLS /* empty */
-# define __END_DECLS /* empty */
-#endif
-
-/*
- * GNU-like getopt_long() and 4.4BSD getsubopt()/optreset extensions
- */
-#define no_argument        0
-#define required_argument  1
-#define optional_argument  2
-
-struct option {
-	/* name of long option */
-	const char *name;
-	/*
-	 * one of no_argument, required_argument, and optional_argument:
-	 * whether option takes an argument
-	 */
-	int has_arg;
-	/* if not NULL, set *flag to val when option found */
-	int *flag;
-	/* if flag not NULL, value to set *flag to; else return value */
-	int val;
-};
-
-__BEGIN_DECLS
-int	 getopt_long(int, char * const *, const char *,
-	    const struct option *, int *);
-int	 getopt_long_only(int, char * const *, const char *,
-	    const struct option *, int *);
-#ifndef _GETOPT_DEFINED_
-#define _GETOPT_DEFINED_
-int	 getopt(int, char * const *, const char *);
-int	 getsubopt(char **, char * const *, char **);
-
-extern   char *optarg;                  /* getopt(3) external variables */
-extern   int opterr;
-extern   int optind;
-extern   int optopt;
-extern   int optreset;
-extern   char *suboptarg;               /* getsubopt(3) external variable */
-#endif
-__END_DECLS
- 
-#endif /* !_GETOPT_H_ */

Modified: box/trunk/lib/win32/getopt_long.cpp
===================================================================
--- box/trunk/lib/win32/getopt_long.cpp	2013-09-28 23:53:09 UTC (rev 3197)
+++ box/trunk/lib/win32/getopt_long.cpp	2013-09-30 08:28:58 UTC (rev 3198)
@@ -68,16 +68,13 @@
 
 #include "getopt.h"
 
-#if defined _MSC_VER || defined __MINGW32__
-#define	REPLACE_GETOPT		/* use this getopt as the system getopt(3) */
+#ifdef REPLACE_GETOPT // until end of file
 
-#ifdef REPLACE_GETOPT
 int	opterr = 1;		/* if error message should be printed */
 int	optind = 1;		/* index into parent argv vector */
 int	optopt = '?';		/* character checked for validity */
 int	optreset;		/* reset getopt */
 char    *optarg;		/* argument associated with option */
-#endif
 
 #define PRINT_ERROR	((opterr) && (*options != ':'))
 
@@ -499,7 +496,6 @@
 	return (optchar);
 }
 
-#ifdef REPLACE_GETOPT
 /*
  * getopt --
  *	Parse argc/argv argument vector.
@@ -520,7 +516,6 @@
 	 */
 	return (getopt_internal(nargc, nargv, options, NULL, NULL, 0));
 }
-#endif /* REPLACE_GETOPT */
 
 /*
  * getopt_long --
@@ -548,4 +543,4 @@
 	    FLAG_PERMUTE|FLAG_LONGONLY));
 }
 
-#endif // defined _MSC_VER || defined __MINGW32__
+#endif // REPLACE_GETOPT




More information about the Boxbackup-commit mailing list