Skip to content

Commit

Permalink
getopt_long: Copy over the implementation from netbsd.
Browse files Browse the repository at this point in the history
Windows does not have a getopt_long function. This commit
copies over the getopt_long implementation from netbsd with
some minor modifications and is used only on Windows platform.

Modifications on top of the version in NetBSD repo.
* Remove header files not available in Visual Studio.
* Remove some unwanted #defines.
* Add Open vSwitch specific header files like config.h, vlog.h, util.h
* Add the following #define's
define __UNCONST(a)    ((void *)(unsigned long)(const void *)(a))
define _DIAGASSERT(q) ovs_assert(q)
define warnx VLOG_WARN
* Add extern declaration in getopt.h for optarg, optind.

Signed-off-by: Gurucharan Shetty <[email protected]>
Acked-by: Ben Pfaff <[email protected]>
  • Loading branch information
shettyg committed Jan 27, 2014
1 parent a3ea182 commit 9d0581f
Show file tree
Hide file tree
Showing 6 changed files with 541 additions and 4 deletions.
4 changes: 4 additions & 0 deletions COPYING
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ Public License, version 2.
File build-aux/cccl is licensed under the GNU General Public
License, version 2.

The following files are licensed under the 2-clause BSD license.
include/windows/getopt.h
lib/getopt_long.c

Files under the xenserver directory are licensed on a file-by-file
basis. Refer to each file for details.

Expand Down
6 changes: 6 additions & 0 deletions debian/copyright.in
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ Upstream Copyright Holders:
and authors listed above.
Copyright (c) 2011 Gaetano Catalli
Copyright (C) 2000-2003 Geoffrey Wossum ([email protected])
Copyright (C) 2000 The NetBSD Foundation, Inc.

License:

Expand Down Expand Up @@ -78,6 +79,11 @@ License:

build-aux/cccl

* The following files are licensed under the 2-clause BSD license.

lib/getopt_long.c
include/windows/getopt.h

* The following components are dual-licensed under the
GNU General Public License version 2 and the Apache License Version 2.0.

Expand Down
5 changes: 3 additions & 2 deletions include/windows/automake.mk
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@
# without warranty of any kind.

noinst_HEADERS += \
include/windows/windefs.h \
include/windows/syslog.h
include/windows/getopt.h \
include/windows/syslog.h \
include/windows/windefs.h
62 changes: 62 additions & 0 deletions include/windows/getopt.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
/*-
* 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.
*
* 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_

#include <unistd.h>

extern char *optarg;
extern int optind;

/*
* Gnu like getopt_long() and BSD4.4 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;
};

int getopt_long(int, char * const *, const char *,
const struct option *, int *);

#endif /* !_GETOPT_H_ */
8 changes: 6 additions & 2 deletions lib/automake.mk
Original file line number Diff line number Diff line change
Expand Up @@ -236,10 +236,14 @@ lib_libopenvswitch_la_SOURCES = \
lib/vswitch-idl.h \
lib/vtep-idl.c \
lib/vtep-idl.h

if WIN32
lib_libopenvswitch_la_SOURCES += lib/latch-windows.c
lib_libopenvswitch_la_SOURCES += \
lib/getopt_long.c \
lib/latch-windows.c
else
lib_libopenvswitch_la_SOURCES += lib/latch.c
lib_libopenvswitch_la_SOURCES += \
lib/latch.c
endif

EXTRA_DIST += \
Expand Down
Loading

0 comments on commit 9d0581f

Please sign in to comment.