You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
qpid-proton/02-PROTON-348-Platform-neut...

995 lines
30 KiB

From c519f03332764cba2c231560dbd43c9028fb3d09 Mon Sep 17 00:00:00 2001
From: cliffjansen <cliffjansen@13f79535-47bb-0310-9956-ffa450edef68>
Date: Tue, 16 Jul 2013 00:55:03 +0000
Subject: [PATCH 2/3] PROTON-348: Platform neutral helper functions for
examples and tests.
git-svn-id: https://svn.apache.org/repos/asf/qpid/proton/trunk@1503531 13f79535-47bb-0310-9956-ffa450edef68
---
examples/include/pncompat/internal/LICENSE | 33 ++++
examples/include/pncompat/internal/getopt.c | 250 ++++++++++++++++++++++++++++
examples/include/pncompat/internal/getopt.h | 63 +++++++
examples/include/pncompat/misc_defs.h | 48 ++++++
examples/include/pncompat/misc_funcs.inc | 67 ++++++++
examples/messenger/c/recv.c | 6 +-
examples/messenger/c/send.c | 6 +-
proton-c/CMakeLists.txt | 1 +
proton-c/src/proton.c | 2 +-
proton-c/wincompat/getopt.h | 39 -----
proton-c/wincompat/internal/LICENSE | 33 ----
proton-c/wincompat/internal/getopt.c | 250 ----------------------------
proton-c/wincompat/internal/getopt.h | 63 -------
13 files changed, 465 insertions(+), 396 deletions(-)
create mode 100644 examples/include/pncompat/internal/LICENSE
create mode 100644 examples/include/pncompat/internal/getopt.c
create mode 100644 examples/include/pncompat/internal/getopt.h
create mode 100644 examples/include/pncompat/misc_defs.h
create mode 100644 examples/include/pncompat/misc_funcs.inc
delete mode 100644 proton-c/wincompat/getopt.h
delete mode 100644 proton-c/wincompat/internal/LICENSE
delete mode 100644 proton-c/wincompat/internal/getopt.c
delete mode 100644 proton-c/wincompat/internal/getopt.h
diff --git a/examples/include/pncompat/internal/LICENSE b/examples/include/pncompat/internal/LICENSE
new file mode 100644
index 0000000..99efb42
--- /dev/null
+++ b/examples/include/pncompat/internal/LICENSE
@@ -0,0 +1,33 @@
+Free Getopt
+Copyright (c)2002-2003 Mark K. Kim
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ * 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.
+
+ * Neither the original author of this software 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 COPYRIGHT HOLDERS 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
+COPYRIGHT OWNER 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.
+
diff --git a/examples/include/pncompat/internal/getopt.c b/examples/include/pncompat/internal/getopt.c
new file mode 100644
index 0000000..7ef9a68
--- /dev/null
+++ b/examples/include/pncompat/internal/getopt.c
@@ -0,0 +1,250 @@
+/*****************************************************************************
+* getopt.c - competent and free getopt library.
+* $Header: /cvsroot/freegetopt/freegetopt/getopt.c,v 1.2 2003/10/26 03:10:20 vindaci Exp $
+*
+* Copyright (c)2002-2003 Mark K. Kim
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
+*
+* * Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+*
+* * 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.
+*
+* * Neither the original author of this software 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 COPYRIGHT HOLDERS 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
+* COPYRIGHT OWNER 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.
+*/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "getopt.h"
+
+
+static const char* ID = "$Id: getopt.c,v 1.2 2003/10/26 03:10:20 vindaci Exp $";
+
+
+char* optarg = NULL;
+int optind = 0;
+int opterr = 1;
+int optopt = '?';
+
+
+static char** prev_argv = NULL; /* Keep a copy of argv and argc to */
+static int prev_argc = 0; /* tell if getopt params change */
+static int argv_index = 0; /* Option we're checking */
+static int argv_index2 = 0; /* Option argument we're checking */
+static int opt_offset = 0; /* Index into compounded "-option" */
+static int dashdash = 0; /* True if "--" option reached */
+static int nonopt = 0; /* How many nonopts we've found */
+
+static void increment_index()
+{
+ /* Move onto the next option */
+ if(argv_index < argv_index2)
+ {
+ while(prev_argv[++argv_index] && prev_argv[argv_index][0] != '-'
+ && argv_index < argv_index2+1);
+ }
+ else argv_index++;
+ opt_offset = 1;
+}
+
+
+/*
+* Permutes argv[] so that the argument currently being processed is moved
+* to the end.
+*/
+static int permute_argv_once()
+{
+ /* Movability check */
+ if(argv_index + nonopt >= prev_argc) return 1;
+ /* Move the current option to the end, bring the others to front */
+ else
+ {
+ char* tmp = prev_argv[argv_index];
+
+ /* Move the data */
+ memmove(&prev_argv[argv_index], &prev_argv[argv_index+1],
+ sizeof(char**) * (prev_argc - argv_index - 1));
+ prev_argv[prev_argc - 1] = tmp;
+
+ nonopt++;
+ return 0;
+ }
+}
+
+
+int getopt(int argc, char** argv, char* optstr)
+{
+ int c = 0;
+
+ /* If we have new argv, reinitialize */
+ if(prev_argv != argv || prev_argc != argc)
+ {
+ /* Initialize variables */
+ prev_argv = argv;
+ prev_argc = argc;
+ argv_index = 1;
+ argv_index2 = 1;
+ opt_offset = 1;
+ dashdash = 0;
+ nonopt = 0;
+ }
+
+ /* Jump point in case we want to ignore the current argv_index */
+ getopt_top:
+
+ /* Misc. initializations */
+ optarg = NULL;
+
+ /* Dash-dash check */
+ if(argv[argv_index] && !strcmp(argv[argv_index], "--"))
+ {
+ dashdash = 1;
+ increment_index();
+ }
+
+ /* If we're at the end of argv, that's it. */
+ if(argv[argv_index] == NULL)
+ {
+ c = -1;
+ }
+ /* Are we looking at a string? Single dash is also a string */
+ else if(dashdash || argv[argv_index][0] != '-' || !strcmp(argv[argv_index], "-"))
+ {
+ /* If we want a string... */
+ if(optstr[0] == '-')
+ {
+ c = 1;
+ optarg = argv[argv_index];
+ increment_index();
+ }
+ /* If we really don't want it (we're in POSIX mode), we're done */
+ else if(optstr[0] == '+' || getenv("POSIXLY_CORRECT"))
+ {
+ c = -1;
+
+ /* Everything else is a non-opt argument */
+ nonopt = argc - argv_index;
+ }
+ /* If we mildly don't want it, then move it back */
+ else
+ {
+ if(!permute_argv_once()) goto getopt_top;
+ else c = -1;
+ }
+ }
+ /* Otherwise we're looking at an option */
+ else
+ {
+ char* opt_ptr = NULL;
+
+ /* Grab the option */
+ c = argv[argv_index][opt_offset++];
+
+ /* Is the option in the optstr? */
+ if(optstr[0] == '-') opt_ptr = strchr(optstr+1, c);
+ else opt_ptr = strchr(optstr, c);
+ /* Invalid argument */
+ if(!opt_ptr)
+ {
+ if(opterr)
+ {
+ fprintf(stderr, "%s: invalid option -- %c\n", argv[0], c);
+ }
+
+ optopt = c;
+ c = '?';
+
+ /* Move onto the next option */
+ increment_index();
+ }
+ /* Option takes argument */
+ else if(opt_ptr[1] == ':')
+ {
+ /* ie, -oARGUMENT, -xxxoARGUMENT, etc. */
+ if(argv[argv_index][opt_offset] != '\0')
+ {
+ optarg = &argv[argv_index][opt_offset];
+ increment_index();
+ }
+ /* ie, -o ARGUMENT (only if it's a required argument) */
+ else if(opt_ptr[2] != ':')
+ {
+ /* One of those "you're not expected to understand this" moment */
+ if(argv_index2 < argv_index) argv_index2 = argv_index;
+ while(argv[++argv_index2] && argv[argv_index2][0] == '-');
+ optarg = argv[argv_index2];
+
+ /* Don't cross into the non-option argument list */
+ if(argv_index2 + nonopt >= prev_argc) optarg = NULL;
+
+ /* Move onto the next option */
+ increment_index();
+ }
+ else
+ {
+ /* Move onto the next option */
+ increment_index();
+ }
+
+ /* In case we got no argument for an option with required argument */
+ if(optarg == NULL && opt_ptr[2] != ':')
+ {
+ optopt = c;
+ c = '?';
+
+ if(opterr)
+ {
+ fprintf(stderr,"%s: option requires an argument -- %c\n",
+ argv[0], optopt);
+ }
+ }
+ }
+ /* Option does not take argument */
+ else
+ {
+ /* Next argv_index */
+ if(argv[argv_index][opt_offset] == '\0')
+ {
+ increment_index();
+ }
+ }
+ }
+
+ /* Calculate optind */
+ if(c == -1)
+ {
+ optind = argc - nonopt;
+ }
+ else
+ {
+ optind = argv_index;
+ }
+
+ return c;
+}
+
+
+/* vim:ts=3
+*/
diff --git a/examples/include/pncompat/internal/getopt.h b/examples/include/pncompat/internal/getopt.h
new file mode 100644
index 0000000..0b78650
--- /dev/null
+++ b/examples/include/pncompat/internal/getopt.h
@@ -0,0 +1,63 @@
+/*****************************************************************************
+* getopt.h - competent and free getopt library.
+* $Header: /cvsroot/freegetopt/freegetopt/getopt.h,v 1.2 2003/10/26 03:10:20 vindaci Exp $
+*
+* Copyright (c)2002-2003 Mark K. Kim
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
+*
+* * Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+*
+* * 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.
+*
+* * Neither the original author of this software 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 COPYRIGHT HOLDERS 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
+* COPYRIGHT OWNER 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_
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+extern char* optarg;
+extern int optind;
+extern int opterr;
+extern int optopt;
+
+int getopt(int argc, char** argv, char* optstr);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* GETOPT_H_ */
+
+
+/* vim:ts=3
+*/
diff --git a/examples/include/pncompat/misc_defs.h b/examples/include/pncompat/misc_defs.h
new file mode 100644
index 0000000..00d5f67
--- /dev/null
+++ b/examples/include/pncompat/misc_defs.h
@@ -0,0 +1,48 @@
+#ifndef PNCOMAPT_MISC_DEFS_H
+#define PNCOMAPT_MISC_DEFS_H
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+#if defined(qpid_proton_EXPORTS)
+#error This include file is not for use in the main proton library
+#endif
+
+/*
+ * Platform neutral definitions. Only intended for use by Proton
+ * examples and test/debug programs.
+ *
+ * This file and any related support files may change or be removed
+ * at any time.
+ */
+
+// getopt()
+
+#include <proton/types.h>
+
+#if !defined(_WIN32) || defined (__CYGWIN__)
+#include <getopt.h>
+#else
+#include "internal/getopt.h"
+#endif
+
+pn_timestamp_t time_now();
+
+#endif /* PNCOMPAT_MISC_DEFS_H */
diff --git a/examples/include/pncompat/misc_funcs.inc b/examples/include/pncompat/misc_funcs.inc
new file mode 100644
index 0000000..921d1d3
--- /dev/null
+++ b/examples/include/pncompat/misc_funcs.inc
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+/*
+ * This file provides the functions for "misc_defs.h" in the form of
+ * included code, as opposed to a separate library or object
+ * dependency. In the absence of portable "pragma weak" compiler
+ * directives, this provides a simple workaround.
+ *
+ * Usage for a single compilation unit:
+ *
+ * #include "pncompat/misc_funcs.inc"
+ *
+ * Usage for multiple combined compilation units: chose one to include
+ * "pncompat/misc_funcs.inc" as above and in each other unit needing the
+ * definitions use
+ *
+ * #include "pncompat/misc_defs.h"
+ *
+ */
+
+#include "misc_defs.h"
+
+#if defined(_WIN32) && ! defined(__CYGWIN__)
+#include "pncompat/internal/getopt.c"
+#endif
+
+#if defined(_WIN32) && ! defined(__CYGWIN__)
+#include <windows.h>
+pn_timestamp_t time_now(void)
+{
+ FILETIME now;
+ GetSystemTimeAsFileTime(&now);
+ ULARGE_INTEGER t;
+ t.u.HighPart = now.dwHighDateTime;
+ t.u.LowPart = now.dwLowDateTime;
+ // Convert to milliseconds and adjust base epoch
+ return t.QuadPart / 10000 - 11644473600000;
+}
+#else
+#include <proton/util.h>
+#include <sys/time.h>
+#include <stddef.h>
+pn_timestamp_t time_now(void)
+{
+ struct timeval now;
+ if (gettimeofday(&now, NULL)) pn_fatal("gettimeofday failed\n");
+ return ((pn_timestamp_t)now.tv_sec) * 1000 + (now.tv_usec / 1000);
+}
+#endif
diff --git a/examples/messenger/c/recv.c b/examples/messenger/c/recv.c
index 50a2787..b2c974d 100644
--- a/examples/messenger/c/recv.c
+++ b/examples/messenger/c/recv.c
@@ -21,11 +21,7 @@
#include "proton/message.h"
#include "proton/messenger.h"
-#if defined(_WIN32) && ! defined(__CYGWIN__)
-#include "../../../proton-c/wincompat/getopt.h"
-#else
-#include <getopt.h>
-#endif
+#include "pncompat/misc_funcs.inc"
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
diff --git a/examples/messenger/c/send.c b/examples/messenger/c/send.c
index 77f772a..a7e91a2 100644
--- a/examples/messenger/c/send.c
+++ b/examples/messenger/c/send.c
@@ -21,11 +21,7 @@
#include "proton/message.h"
#include "proton/messenger.h"
-#if defined(_WIN32) && ! defined(__CYGWIN__)
-#include "../../../proton-c/wincompat/getopt.h"
-#else
-#include <getopt.h>
-#endif
+#include "pncompat/misc_funcs.inc"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
diff --git a/proton-c/CMakeLists.txt b/proton-c/CMakeLists.txt
index 74d302a..c8ee531 100644
--- a/proton-c/CMakeLists.txt
+++ b/proton-c/CMakeLists.txt
@@ -57,6 +57,7 @@ configure_file (
include_directories ("${CMAKE_CURRENT_BINARY_DIR}")
include_directories ("${CMAKE_CURRENT_SOURCE_DIR}/include")
+include_directories ("${CMAKE_CURRENT_SOURCE_DIR}/../examples/include")
add_custom_command (
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/encodings.h
diff --git a/proton-c/src/proton.c b/proton-c/src/proton.c
index 370bfd5..552c9c2 100644
--- a/proton-c/src/proton.c
+++ b/proton-c/src/proton.c
@@ -22,7 +22,7 @@
#if defined(_WIN32) && ! defined(__CYGWIN__)
#define NOGDI
#include <winsock2.h>
-#include "../wincompat/getopt.h"
+#include "pncompat/misc_funcs.inc"
#else
#include <unistd.h>
#include <libgen.h>
diff --git a/proton-c/wincompat/getopt.h b/proton-c/wincompat/getopt.h
deleted file mode 100644
index 5106c29..0000000
--- a/proton-c/wincompat/getopt.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
- */
-
-/*
- * Provides an embedded getopt implementation to the C file including
- * this. Only intended for use by Proton examples and test/debug
- * programs to run on Windows.
- *
- * This file and any internal support files may change or be removed
- * at any time.
- */
-
-#if defined(qpid_proton_EXPORTS)
-#error This include file is not for use in the main proton library
-#endif
-
-#if !defined(_WIN32) || defined (__CYGWIN__)
-#error This include file only intended for Windows compatibility.
-#endif
-
-#include "internal/getopt.c"
diff --git a/proton-c/wincompat/internal/LICENSE b/proton-c/wincompat/internal/LICENSE
deleted file mode 100644
index 99efb42..0000000
--- a/proton-c/wincompat/internal/LICENSE
+++ /dev/null
@@ -1,33 +0,0 @@
-Free Getopt
-Copyright (c)2002-2003 Mark K. Kim
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- * 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.
-
- * Neither the original author of this software 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 COPYRIGHT HOLDERS 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
-COPYRIGHT OWNER 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.
-
diff --git a/proton-c/wincompat/internal/getopt.c b/proton-c/wincompat/internal/getopt.c
deleted file mode 100644
index 7ef9a68..0000000
--- a/proton-c/wincompat/internal/getopt.c
+++ /dev/null
@@ -1,250 +0,0 @@
-/*****************************************************************************
-* getopt.c - competent and free getopt library.
-* $Header: /cvsroot/freegetopt/freegetopt/getopt.c,v 1.2 2003/10/26 03:10:20 vindaci Exp $
-*
-* Copyright (c)2002-2003 Mark K. Kim
-* All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions
-* are met:
-*
-* * Redistributions of source code must retain the above copyright
-* notice, this list of conditions and the following disclaimer.
-*
-* * 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.
-*
-* * Neither the original author of this software 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 COPYRIGHT HOLDERS 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
-* COPYRIGHT OWNER 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.
-*/
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "getopt.h"
-
-
-static const char* ID = "$Id: getopt.c,v 1.2 2003/10/26 03:10:20 vindaci Exp $";
-
-
-char* optarg = NULL;
-int optind = 0;
-int opterr = 1;
-int optopt = '?';
-
-
-static char** prev_argv = NULL; /* Keep a copy of argv and argc to */
-static int prev_argc = 0; /* tell if getopt params change */
-static int argv_index = 0; /* Option we're checking */
-static int argv_index2 = 0; /* Option argument we're checking */
-static int opt_offset = 0; /* Index into compounded "-option" */
-static int dashdash = 0; /* True if "--" option reached */
-static int nonopt = 0; /* How many nonopts we've found */
-
-static void increment_index()
-{
- /* Move onto the next option */
- if(argv_index < argv_index2)
- {
- while(prev_argv[++argv_index] && prev_argv[argv_index][0] != '-'
- && argv_index < argv_index2+1);
- }
- else argv_index++;
- opt_offset = 1;
-}
-
-
-/*
-* Permutes argv[] so that the argument currently being processed is moved
-* to the end.
-*/
-static int permute_argv_once()
-{
- /* Movability check */
- if(argv_index + nonopt >= prev_argc) return 1;
- /* Move the current option to the end, bring the others to front */
- else
- {
- char* tmp = prev_argv[argv_index];
-
- /* Move the data */
- memmove(&prev_argv[argv_index], &prev_argv[argv_index+1],
- sizeof(char**) * (prev_argc - argv_index - 1));
- prev_argv[prev_argc - 1] = tmp;
-
- nonopt++;
- return 0;
- }
-}
-
-
-int getopt(int argc, char** argv, char* optstr)
-{
- int c = 0;
-
- /* If we have new argv, reinitialize */
- if(prev_argv != argv || prev_argc != argc)
- {
- /* Initialize variables */
- prev_argv = argv;
- prev_argc = argc;
- argv_index = 1;
- argv_index2 = 1;
- opt_offset = 1;
- dashdash = 0;
- nonopt = 0;
- }
-
- /* Jump point in case we want to ignore the current argv_index */
- getopt_top:
-
- /* Misc. initializations */
- optarg = NULL;
-
- /* Dash-dash check */
- if(argv[argv_index] && !strcmp(argv[argv_index], "--"))
- {
- dashdash = 1;
- increment_index();
- }
-
- /* If we're at the end of argv, that's it. */
- if(argv[argv_index] == NULL)
- {
- c = -1;
- }
- /* Are we looking at a string? Single dash is also a string */
- else if(dashdash || argv[argv_index][0] != '-' || !strcmp(argv[argv_index], "-"))
- {
- /* If we want a string... */
- if(optstr[0] == '-')
- {
- c = 1;
- optarg = argv[argv_index];
- increment_index();
- }
- /* If we really don't want it (we're in POSIX mode), we're done */
- else if(optstr[0] == '+' || getenv("POSIXLY_CORRECT"))
- {
- c = -1;
-
- /* Everything else is a non-opt argument */
- nonopt = argc - argv_index;
- }
- /* If we mildly don't want it, then move it back */
- else
- {
- if(!permute_argv_once()) goto getopt_top;
- else c = -1;
- }
- }
- /* Otherwise we're looking at an option */
- else
- {
- char* opt_ptr = NULL;
-
- /* Grab the option */
- c = argv[argv_index][opt_offset++];
-
- /* Is the option in the optstr? */
- if(optstr[0] == '-') opt_ptr = strchr(optstr+1, c);
- else opt_ptr = strchr(optstr, c);
- /* Invalid argument */
- if(!opt_ptr)
- {
- if(opterr)
- {
- fprintf(stderr, "%s: invalid option -- %c\n", argv[0], c);
- }
-
- optopt = c;
- c = '?';
-
- /* Move onto the next option */
- increment_index();
- }
- /* Option takes argument */
- else if(opt_ptr[1] == ':')
- {
- /* ie, -oARGUMENT, -xxxoARGUMENT, etc. */
- if(argv[argv_index][opt_offset] != '\0')
- {
- optarg = &argv[argv_index][opt_offset];
- increment_index();
- }
- /* ie, -o ARGUMENT (only if it's a required argument) */
- else if(opt_ptr[2] != ':')
- {
- /* One of those "you're not expected to understand this" moment */
- if(argv_index2 < argv_index) argv_index2 = argv_index;
- while(argv[++argv_index2] && argv[argv_index2][0] == '-');
- optarg = argv[argv_index2];
-
- /* Don't cross into the non-option argument list */
- if(argv_index2 + nonopt >= prev_argc) optarg = NULL;
-
- /* Move onto the next option */
- increment_index();
- }
- else
- {
- /* Move onto the next option */
- increment_index();
- }
-
- /* In case we got no argument for an option with required argument */
- if(optarg == NULL && opt_ptr[2] != ':')
- {
- optopt = c;
- c = '?';
-
- if(opterr)
- {
- fprintf(stderr,"%s: option requires an argument -- %c\n",
- argv[0], optopt);
- }
- }
- }
- /* Option does not take argument */
- else
- {
- /* Next argv_index */
- if(argv[argv_index][opt_offset] == '\0')
- {
- increment_index();
- }
- }
- }
-
- /* Calculate optind */
- if(c == -1)
- {
- optind = argc - nonopt;
- }
- else
- {
- optind = argv_index;
- }
-
- return c;
-}
-
-
-/* vim:ts=3
-*/
diff --git a/proton-c/wincompat/internal/getopt.h b/proton-c/wincompat/internal/getopt.h
deleted file mode 100644
index 0b78650..0000000
--- a/proton-c/wincompat/internal/getopt.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*****************************************************************************
-* getopt.h - competent and free getopt library.
-* $Header: /cvsroot/freegetopt/freegetopt/getopt.h,v 1.2 2003/10/26 03:10:20 vindaci Exp $
-*
-* Copyright (c)2002-2003 Mark K. Kim
-* All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions
-* are met:
-*
-* * Redistributions of source code must retain the above copyright
-* notice, this list of conditions and the following disclaimer.
-*
-* * 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.
-*
-* * Neither the original author of this software 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 COPYRIGHT HOLDERS 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
-* COPYRIGHT OWNER 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_
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-extern char* optarg;
-extern int optind;
-extern int opterr;
-extern int optopt;
-
-int getopt(int argc, char** argv, char* optstr);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* GETOPT_H_ */
-
-
-/* vim:ts=3
-*/
--
1.8.3.1