mirror of
https://codeberg.org/scip/pcp.git
synced 2025-12-17 03:50:57 +01:00
fixed aix portability problems
This commit is contained in:
@@ -79,3 +79,6 @@ if test -z "$clean"; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
rm -rf README include/pcp/config.h.in~ libpcp/stamp-h1 autom4te.cache
|
rm -rf README include/pcp/config.h.in~ libpcp/stamp-h1 autom4te.cache
|
||||||
|
|
||||||
|
sleep 1
|
||||||
|
touch Makefile.in configure */Makefile.in
|
||||||
11
configure
vendored
11
configure
vendored
@@ -12364,7 +12364,9 @@ for ac_func in \
|
|||||||
be32toh \
|
be32toh \
|
||||||
htobe32 \
|
htobe32 \
|
||||||
umask \
|
umask \
|
||||||
towlower
|
towlower \
|
||||||
|
getopt_long \
|
||||||
|
vasprintf
|
||||||
|
|
||||||
do :
|
do :
|
||||||
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
|
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
|
||||||
@@ -12476,10 +12478,13 @@ $as_echo "no" >&6; }
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Check for some target-specific stuff
|
# Check for some target-specific stuff
|
||||||
case "$host" in
|
case "$host" in
|
||||||
*-*-aix*) ;;
|
*aix*)
|
||||||
|
# libm is required as well
|
||||||
|
CFLAGS="$CFLAGS -D_AIX_SOURCE=1"
|
||||||
|
LDFLAGS="$LDFLAGS -lm"
|
||||||
|
;;
|
||||||
*-*-android*) ;;
|
*-*-android*) ;;
|
||||||
*-*-cygwin*) ;;
|
*-*-cygwin*) ;;
|
||||||
*-*-dgux*) ;;
|
*-*-dgux*) ;;
|
||||||
|
|||||||
@@ -79,7 +79,9 @@ AC_CHECK_FUNCS( \
|
|||||||
be32toh \
|
be32toh \
|
||||||
htobe32 \
|
htobe32 \
|
||||||
umask \
|
umask \
|
||||||
towlower
|
towlower \
|
||||||
|
getopt_long \
|
||||||
|
vasprintf
|
||||||
)
|
)
|
||||||
|
|
||||||
AC_MSG_CHECKING([compiler and flags for sanity])
|
AC_MSG_CHECKING([compiler and flags for sanity])
|
||||||
@@ -151,11 +153,11 @@ if test "x${_havenacl}" = "xno"; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Check for some target-specific stuff
|
# Check for some target-specific stuff
|
||||||
case "$host" in
|
case "$host" in
|
||||||
*-*-aix*)
|
*aix*)
|
||||||
# libm is required as well
|
# libm is required as well
|
||||||
|
CFLAGS="$CFLAGS -D_AIX_SOURCE=1"
|
||||||
LDFLAGS="$LDFLAGS -lm"
|
LDFLAGS="$LDFLAGS -lm"
|
||||||
;;
|
;;
|
||||||
*-*-android*) ;;
|
*-*-android*) ;;
|
||||||
|
|||||||
@@ -45,6 +45,9 @@
|
|||||||
/* Define to 1 if you have the <getopt.h> header file. */
|
/* Define to 1 if you have the <getopt.h> header file. */
|
||||||
#undef HAVE_GETOPT_H
|
#undef HAVE_GETOPT_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getopt_long' function. */
|
||||||
|
#undef HAVE_GETOPT_LONG
|
||||||
|
|
||||||
/* Define to 1 if you have the `htobe32' function. */
|
/* Define to 1 if you have the `htobe32' function. */
|
||||||
#undef HAVE_HTOBE32
|
#undef HAVE_HTOBE32
|
||||||
|
|
||||||
@@ -132,6 +135,9 @@
|
|||||||
/* Define to 1 if you have the <unistd.h> header file. */
|
/* Define to 1 if you have the <unistd.h> header file. */
|
||||||
#undef HAVE_UNISTD_H
|
#undef HAVE_UNISTD_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `vasprintf' function. */
|
||||||
|
#undef HAVE_VASPRINTF
|
||||||
|
|
||||||
/* Define to 1 if you have the <wctype.h> header file. */
|
/* Define to 1 if you have the <wctype.h> header file. */
|
||||||
#undef HAVE_WCTYPE_H
|
#undef HAVE_WCTYPE_H
|
||||||
|
|
||||||
|
|||||||
@@ -25,8 +25,6 @@
|
|||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <errno.h>
|
|
||||||
#include <err.h>
|
|
||||||
#include "platform.h"
|
#include "platform.h"
|
||||||
|
|
||||||
// simple malloc() wrapper
|
// simple malloc() wrapper
|
||||||
|
|||||||
@@ -31,14 +31,18 @@
|
|||||||
# ifdef HAVE_SYS_ENDIAN_H
|
# ifdef HAVE_SYS_ENDIAN_H
|
||||||
# include <sys/endian.h>
|
# include <sys/endian.h>
|
||||||
# ifdef HAVE_BETOH32
|
# ifdef HAVE_BETOH32
|
||||||
// openbsd, use aliases
|
# // openbsd, use aliases
|
||||||
# define be32toh betoh32
|
# define be32toh betoh32
|
||||||
# define htobe32 hto32be
|
# define htobe32 hto32be
|
||||||
|
# define be64toh betoh64
|
||||||
|
# define htobe64 hto64be
|
||||||
# endif
|
# endif
|
||||||
# else // no sys/endian.h
|
# else // no sys/endian.h
|
||||||
# if __BYTE_ORDER == __BIG_ENDIAN
|
# if __BYTE_ORDER == __BIG_ENDIAN
|
||||||
# define be32toh(x) ((void)0)
|
# define be32toh(x) (x)
|
||||||
# define htobe32(x) ((void)0)
|
# define htobe32(x) (x)
|
||||||
|
# define be64toh(x) (x)
|
||||||
|
# define htobe64(x) (x)
|
||||||
# else
|
# else
|
||||||
# ifdef HAVE_ARPA_INET_H
|
# ifdef HAVE_ARPA_INET_H
|
||||||
# include <arpa/inet.h>
|
# include <arpa/inet.h>
|
||||||
@@ -51,6 +55,8 @@
|
|||||||
# endif
|
# endif
|
||||||
# define be32toh(x) ((u_int32_t)ntohl((u_int32_t)(x)))
|
# define be32toh(x) ((u_int32_t)ntohl((u_int32_t)(x)))
|
||||||
# define htobe32(x) ((u_int32_t)htonl((u_int32_t)(x)))
|
# define htobe32(x) ((u_int32_t)htonl((u_int32_t)(x)))
|
||||||
|
# define be64toh(x) ((u_int64_t)ntohl((u_int64_t)(x)))
|
||||||
|
# define htobe64(x) ((u_int64_t)htonl((u_int64_t)(x)))
|
||||||
# endif
|
# endif
|
||||||
# endif // HAVE_SYS_ENDIAN_H
|
# endif // HAVE_SYS_ENDIAN_H
|
||||||
#endif // HAVE_ENDIAN_H
|
#endif // HAVE_ENDIAN_H
|
||||||
@@ -73,5 +79,68 @@ static inline void arc4random_buf(void *buf, size_t nbytes) {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef HAVE_ERR_H
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
static inline void err(int eval, const char *fmt, ...) {
|
||||||
|
va_list ap;
|
||||||
|
va_start(ap, fmt);
|
||||||
|
fprintf(stderr, "pcp1");
|
||||||
|
if (fmt != NULL) {
|
||||||
|
fprintf(stderr, ": ");
|
||||||
|
vfprintf(stderr, fmt, ap);
|
||||||
|
}
|
||||||
|
fprintf(stderr, ": %s\n", strerror(errno));
|
||||||
|
va_end(ap);
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
#include <err.h>
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef HAVE_VASPRINTF
|
||||||
|
|
||||||
|
#include <stdarg.h>
|
||||||
|
static inline
|
||||||
|
int vasprintf(char **ret, const char *format, va_list args) {
|
||||||
|
va_list copy;
|
||||||
|
va_copy(copy, args);
|
||||||
|
|
||||||
|
*ret = 0;
|
||||||
|
|
||||||
|
int count = vsnprintf(NULL, 0, format, args);
|
||||||
|
if (count >= 0) {
|
||||||
|
char* buffer = malloc(count + 1);
|
||||||
|
if (buffer != NULL) {
|
||||||
|
count = vsnprintf(buffer, count + 1, format, copy);
|
||||||
|
if (count < 0)
|
||||||
|
free(buffer);
|
||||||
|
else
|
||||||
|
*ret = buffer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
va_end(copy); // Each va_start() or va_copy() needs a va_end()
|
||||||
|
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef _AIX_SOURCE
|
||||||
|
#define _LINUX_SOURCE_COMPAT
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* !_HAVE_PCP_PLATFORM_H */
|
#endif /* !_HAVE_PCP_PLATFORM_H */
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
|
|
||||||
|
|
||||||
#include "defines.h"
|
#include "defines.h"
|
||||||
|
#include "platform.h"
|
||||||
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
|||||||
@@ -25,11 +25,14 @@
|
|||||||
|
|
||||||
|
|
||||||
void *ucmalloc(size_t s) {
|
void *ucmalloc(size_t s) {
|
||||||
|
if (s == 0)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
size_t size = s * sizeof(unsigned char);
|
size_t size = s * sizeof(unsigned char);
|
||||||
void *value = malloc (size);
|
void *value = malloc (size);
|
||||||
|
|
||||||
if (value == NULL) {
|
if (value == NULL) {
|
||||||
err(errno, "Cannot allocate memory");
|
err(errno, "Cannot allocate %d bytes of memory", (int)s);
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -124,7 +124,7 @@
|
|||||||
.\" ========================================================================
|
.\" ========================================================================
|
||||||
.\"
|
.\"
|
||||||
.IX Title "PCP1 1"
|
.IX Title "PCP1 1"
|
||||||
.TH PCP1 1 "2013-11-16" "PCP 0.1.5" "USER CONTRIBUTED DOCUMENTATION"
|
.TH PCP1 1 "2013-11-17" "PCP 0.1.5" "USER CONTRIBUTED DOCUMENTATION"
|
||||||
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
|
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
|
||||||
.\" way too many mistakes in technical documents.
|
.\" way too many mistakes in technical documents.
|
||||||
.if n .ad l
|
.if n .ad l
|
||||||
|
|||||||
@@ -26,5 +26,6 @@ bin_PROGRAMS = pcp1
|
|||||||
|
|
||||||
pcp1_LDADD = ../libpcp/.libs/libpcp1.a
|
pcp1_LDADD = ../libpcp/.libs/libpcp1.a
|
||||||
pcp1_SOURCES = pcp.c keymgmt.c keyprint.c readpass.c \
|
pcp1_SOURCES = pcp.c keymgmt.c keyprint.c readpass.c \
|
||||||
encryption.c z85util.c signature.c
|
encryption.c z85util.c signature.c \
|
||||||
|
compat_getopt.c
|
||||||
|
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ am__installdirs = "$(DESTDIR)$(bindir)"
|
|||||||
PROGRAMS = $(bin_PROGRAMS)
|
PROGRAMS = $(bin_PROGRAMS)
|
||||||
am_pcp1_OBJECTS = pcp.$(OBJEXT) keymgmt.$(OBJEXT) keyprint.$(OBJEXT) \
|
am_pcp1_OBJECTS = pcp.$(OBJEXT) keymgmt.$(OBJEXT) keyprint.$(OBJEXT) \
|
||||||
readpass.$(OBJEXT) encryption.$(OBJEXT) z85util.$(OBJEXT) \
|
readpass.$(OBJEXT) encryption.$(OBJEXT) z85util.$(OBJEXT) \
|
||||||
signature.$(OBJEXT)
|
signature.$(OBJEXT) compat_getopt.$(OBJEXT)
|
||||||
pcp1_OBJECTS = $(am_pcp1_OBJECTS)
|
pcp1_OBJECTS = $(am_pcp1_OBJECTS)
|
||||||
pcp1_DEPENDENCIES = ../libpcp/.libs/libpcp1.a
|
pcp1_DEPENDENCIES = ../libpcp/.libs/libpcp1.a
|
||||||
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/pcp
|
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/pcp
|
||||||
@@ -233,7 +233,8 @@ top_srcdir = @top_srcdir@
|
|||||||
AM_CFLAGS = -I../include/pcp -Wall -g
|
AM_CFLAGS = -I../include/pcp -Wall -g
|
||||||
pcp1_LDADD = ../libpcp/.libs/libpcp1.a
|
pcp1_LDADD = ../libpcp/.libs/libpcp1.a
|
||||||
pcp1_SOURCES = pcp.c keymgmt.c keyprint.c readpass.c \
|
pcp1_SOURCES = pcp.c keymgmt.c keyprint.c readpass.c \
|
||||||
encryption.c z85util.c signature.c
|
encryption.c z85util.c signature.c \
|
||||||
|
compat_getopt.c
|
||||||
|
|
||||||
all: all-am
|
all: all-am
|
||||||
|
|
||||||
@@ -325,6 +326,7 @@ mostlyclean-compile:
|
|||||||
distclean-compile:
|
distclean-compile:
|
||||||
-rm -f *.tab.c
|
-rm -f *.tab.c
|
||||||
|
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/compat_getopt.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/encryption.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/encryption.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keymgmt.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keymgmt.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyprint.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyprint.Po@am__quote@
|
||||||
|
|||||||
279
src/compat_getopt.c
Normal file
279
src/compat_getopt.c
Normal file
@@ -0,0 +1,279 @@
|
|||||||
|
/*
|
||||||
|
* my_getopt.c - my re-implementation of getopt.
|
||||||
|
* Copyright 1997, 2000, 2001, 2002, Benjamin Sittler
|
||||||
|
*
|
||||||
|
* 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:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be
|
||||||
|
* included in all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* 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 OR OTHER
|
||||||
|
* DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#if ! ( defined(HAVE_GETOPT_H) && defined(HAVE_GETOPT_LONG) )
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "compat_getopt.h"
|
||||||
|
|
||||||
|
int my_optind=1, my_opterr=1, my_optopt=0;
|
||||||
|
char *my_optarg=0;
|
||||||
|
|
||||||
|
/* this is the plain old UNIX getopt, with GNU-style extensions. */
|
||||||
|
/* if you're porting some piece of UNIX software, this is all you need. */
|
||||||
|
/* this supports GNU-style permution and optional arguments */
|
||||||
|
|
||||||
|
int my_getopt(int argc, char * argv[], const char *opts)
|
||||||
|
{
|
||||||
|
static int charind=0;
|
||||||
|
const char *s;
|
||||||
|
char mode, colon_mode;
|
||||||
|
int off = 0, opt = -1;
|
||||||
|
|
||||||
|
if(getenv("POSIXLY_CORRECT")) colon_mode = mode = '+';
|
||||||
|
else {
|
||||||
|
if((colon_mode = *opts) == ':') off ++;
|
||||||
|
if(((mode = opts[off]) == '+') || (mode == '-')) {
|
||||||
|
off++;
|
||||||
|
if((colon_mode != ':') && ((colon_mode = opts[off]) == ':'))
|
||||||
|
off ++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
my_optarg = 0;
|
||||||
|
if(charind) {
|
||||||
|
my_optopt = argv[my_optind][charind];
|
||||||
|
for(s=opts+off; *s; s++) if(my_optopt == *s) {
|
||||||
|
charind++;
|
||||||
|
if((*(++s) == ':') || ((my_optopt == 'W') && (*s == ';'))) {
|
||||||
|
if(argv[my_optind][charind]) {
|
||||||
|
my_optarg = &(argv[my_optind++][charind]);
|
||||||
|
charind = 0;
|
||||||
|
} else if(*(++s) != ':') {
|
||||||
|
charind = 0;
|
||||||
|
if(++my_optind >= argc) {
|
||||||
|
if(my_opterr) fprintf(stderr,
|
||||||
|
"%s: option requires an argument -- %c\n",
|
||||||
|
argv[0], my_optopt);
|
||||||
|
opt = (colon_mode == ':') ? ':' : '?';
|
||||||
|
goto my_getopt_ok;
|
||||||
|
}
|
||||||
|
my_optarg = argv[my_optind++];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
opt = my_optopt;
|
||||||
|
goto my_getopt_ok;
|
||||||
|
}
|
||||||
|
if(my_opterr) fprintf(stderr,
|
||||||
|
"%s: illegal option -- %c\n",
|
||||||
|
argv[0], my_optopt);
|
||||||
|
opt = '?';
|
||||||
|
if(argv[my_optind][++charind] == '\0') {
|
||||||
|
my_optind++;
|
||||||
|
charind = 0;
|
||||||
|
}
|
||||||
|
my_getopt_ok:
|
||||||
|
if(charind && ! argv[my_optind][charind]) {
|
||||||
|
my_optind++;
|
||||||
|
charind = 0;
|
||||||
|
}
|
||||||
|
} else if((my_optind >= argc) ||
|
||||||
|
((argv[my_optind][0] == '-') &&
|
||||||
|
(argv[my_optind][1] == '-') &&
|
||||||
|
(argv[my_optind][2] == '\0'))) {
|
||||||
|
my_optind++;
|
||||||
|
opt = -1;
|
||||||
|
} else if((argv[my_optind][0] != '-') ||
|
||||||
|
(argv[my_optind][1] == '\0')) {
|
||||||
|
char *tmp;
|
||||||
|
int i, j, k;
|
||||||
|
|
||||||
|
if(mode == '+') opt = -1;
|
||||||
|
else if(mode == '-') {
|
||||||
|
my_optarg = argv[my_optind++];
|
||||||
|
charind = 0;
|
||||||
|
opt = 1;
|
||||||
|
} else {
|
||||||
|
for(i=j=my_optind; i<argc; i++) if((argv[i][0] == '-') &&
|
||||||
|
(argv[i][1] != '\0')) {
|
||||||
|
my_optind=i;
|
||||||
|
opt=my_getopt(argc, argv, opts);
|
||||||
|
while(i > j) {
|
||||||
|
tmp=argv[--i];
|
||||||
|
for(k=i; k+1<my_optind; k++) argv[k]=argv[k+1];
|
||||||
|
argv[--my_optind]=tmp;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(i == argc) opt = -1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
charind++;
|
||||||
|
opt = my_getopt(argc, argv, opts);
|
||||||
|
}
|
||||||
|
if (my_optind > argc) my_optind = argc;
|
||||||
|
return opt;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* this is the extended getopt_long{,_only}, with some GNU-like
|
||||||
|
* extensions. Implements _getopt_internal in case any programs
|
||||||
|
* expecting GNU libc getopt call it.
|
||||||
|
*/
|
||||||
|
|
||||||
|
int _my_getopt_internal(int argc, char * argv[], const char *shortopts,
|
||||||
|
const struct option *longopts, int *longind,
|
||||||
|
int long_only)
|
||||||
|
{
|
||||||
|
char mode, colon_mode = *shortopts;
|
||||||
|
int shortoff = 0, opt = -1;
|
||||||
|
|
||||||
|
if(getenv("POSIXLY_CORRECT")) colon_mode = mode = '+';
|
||||||
|
else {
|
||||||
|
if((colon_mode = *shortopts) == ':') shortoff ++;
|
||||||
|
if(((mode = shortopts[shortoff]) == '+') || (mode == '-')) {
|
||||||
|
shortoff++;
|
||||||
|
if((colon_mode != ':') && ((colon_mode = shortopts[shortoff]) == ':'))
|
||||||
|
shortoff ++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
my_optarg = 0;
|
||||||
|
if((my_optind >= argc) ||
|
||||||
|
((argv[my_optind][0] == '-') &&
|
||||||
|
(argv[my_optind][1] == '-') &&
|
||||||
|
(argv[my_optind][2] == '\0'))) {
|
||||||
|
my_optind++;
|
||||||
|
opt = -1;
|
||||||
|
} else if((argv[my_optind][0] != '-') ||
|
||||||
|
(argv[my_optind][1] == '\0')) {
|
||||||
|
char *tmp;
|
||||||
|
int i, j, k;
|
||||||
|
|
||||||
|
opt = -1;
|
||||||
|
if(mode == '+') return -1;
|
||||||
|
else if(mode == '-') {
|
||||||
|
my_optarg = argv[my_optind++];
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
for(i=j=my_optind; i<argc; i++) if((argv[i][0] == '-') &&
|
||||||
|
(argv[i][1] != '\0')) {
|
||||||
|
my_optind=i;
|
||||||
|
opt=_my_getopt_internal(argc, argv, shortopts,
|
||||||
|
longopts, longind,
|
||||||
|
long_only);
|
||||||
|
while(i > j) {
|
||||||
|
tmp=argv[--i];
|
||||||
|
for(k=i; k+1<my_optind; k++)
|
||||||
|
argv[k]=argv[k+1];
|
||||||
|
argv[--my_optind]=tmp;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else if((!long_only) && (argv[my_optind][1] != '-'))
|
||||||
|
opt = my_getopt(argc, argv, shortopts);
|
||||||
|
else {
|
||||||
|
int charind, offset;
|
||||||
|
int found = 0, ind, hits = 0;
|
||||||
|
|
||||||
|
if(((my_optopt = argv[my_optind][1]) != '-') && ! argv[my_optind][2]) {
|
||||||
|
int c;
|
||||||
|
|
||||||
|
ind = shortoff;
|
||||||
|
while((c = shortopts[ind++])) {
|
||||||
|
if(((shortopts[ind] == ':') ||
|
||||||
|
((c == 'W') && (shortopts[ind] == ';'))) &&
|
||||||
|
(shortopts[++ind] == ':'))
|
||||||
|
ind ++;
|
||||||
|
if(my_optopt == c) return my_getopt(argc, argv, shortopts);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
offset = 2 - (argv[my_optind][1] != '-');
|
||||||
|
for(charind = offset;
|
||||||
|
(argv[my_optind][charind] != '\0') &&
|
||||||
|
(argv[my_optind][charind] != '=');
|
||||||
|
charind++);
|
||||||
|
for(ind = 0; longopts[ind].name && !hits; ind++)
|
||||||
|
if((strlen(longopts[ind].name) == (size_t) (charind - offset)) &&
|
||||||
|
(strncmp(longopts[ind].name,
|
||||||
|
argv[my_optind] + offset, charind - offset) == 0))
|
||||||
|
found = ind, hits++;
|
||||||
|
if(!hits) for(ind = 0; longopts[ind].name; ind++)
|
||||||
|
if(strncmp(longopts[ind].name,
|
||||||
|
argv[my_optind] + offset, charind - offset) == 0)
|
||||||
|
found = ind, hits++;
|
||||||
|
if(hits == 1) {
|
||||||
|
opt = 0;
|
||||||
|
|
||||||
|
if(argv[my_optind][charind] == '=') {
|
||||||
|
if(longopts[found].has_arg == 0) {
|
||||||
|
opt = '?';
|
||||||
|
if(my_opterr) fprintf(stderr,
|
||||||
|
"%s: option `--%s' doesn't allow an argument\n",
|
||||||
|
argv[0], longopts[found].name);
|
||||||
|
} else {
|
||||||
|
my_optarg = argv[my_optind] + ++charind;
|
||||||
|
charind = 0;
|
||||||
|
}
|
||||||
|
} else if(longopts[found].has_arg == 1) {
|
||||||
|
if(++my_optind >= argc) {
|
||||||
|
opt = (colon_mode == ':') ? ':' : '?';
|
||||||
|
if(my_opterr) fprintf(stderr,
|
||||||
|
"%s: option `--%s' requires an argument\n",
|
||||||
|
argv[0], longopts[found].name);
|
||||||
|
} else my_optarg = argv[my_optind];
|
||||||
|
}
|
||||||
|
if(!opt) {
|
||||||
|
if (longind) *longind = found;
|
||||||
|
if(!longopts[found].flag) opt = longopts[found].val;
|
||||||
|
else *(longopts[found].flag) = longopts[found].val;
|
||||||
|
}
|
||||||
|
my_optind++;
|
||||||
|
} else if(!hits) {
|
||||||
|
if(offset == 1) opt = my_getopt(argc, argv, shortopts);
|
||||||
|
else {
|
||||||
|
opt = '?';
|
||||||
|
if(my_opterr) fprintf(stderr,
|
||||||
|
"%s: unrecognized option `%s'\n",
|
||||||
|
argv[0], argv[my_optind++]);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
opt = '?';
|
||||||
|
if(my_opterr) fprintf(stderr,
|
||||||
|
"%s: option `%s' is ambiguous\n",
|
||||||
|
argv[0], argv[my_optind++]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (my_optind > argc) my_optind = argc;
|
||||||
|
return opt;
|
||||||
|
}
|
||||||
|
|
||||||
|
int my_getopt_long(int argc, char * argv[], const char *shortopts,
|
||||||
|
const struct option *longopts, int *longind)
|
||||||
|
{
|
||||||
|
return _my_getopt_internal(argc, argv, shortopts, longopts, longind, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int my_getopt_long_only(int argc, char * argv[], const char *shortopts,
|
||||||
|
const struct option *longopts, int *longind)
|
||||||
|
{
|
||||||
|
return _my_getopt_internal(argc, argv, shortopts, longopts, longind, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
91
src/compat_getopt.h
Normal file
91
src/compat_getopt.h
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
/*
|
||||||
|
* my_getopt.h - interface to my re-implementation of getopt.
|
||||||
|
* Copyright 1997, 2000, 2001, 2002, Benjamin Sittler
|
||||||
|
*
|
||||||
|
* 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:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be
|
||||||
|
* included in all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* 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 OR OTHER
|
||||||
|
* DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef MY_GETOPT_H_INCLUDED
|
||||||
|
#define MY_GETOPT_H_INCLUDED
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(HAVE_GETOPT_H) && defined(HAVE_GETOPT_LONG)
|
||||||
|
#include <getopt.h>
|
||||||
|
#else
|
||||||
|
|
||||||
|
/* Prevent mingw32 from including an incompatible getopt implementation */
|
||||||
|
#define __GETOPT_H__
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define getopt my_getopt
|
||||||
|
#define getopt_long my_getopt_long
|
||||||
|
#define getopt_long_only my_getopt_long_only
|
||||||
|
#define _getopt_internal _my_getopt_internal
|
||||||
|
#define opterr my_opterr
|
||||||
|
#define optind my_optind
|
||||||
|
#define optopt my_optopt
|
||||||
|
#define optarg my_optarg
|
||||||
|
|
||||||
|
/* UNIX-style short-argument parser */
|
||||||
|
extern int my_getopt(int argc, char * argv[], const char *opts);
|
||||||
|
|
||||||
|
extern int my_optind, my_opterr, my_optopt;
|
||||||
|
extern char *my_optarg;
|
||||||
|
|
||||||
|
struct option {
|
||||||
|
const char *name;
|
||||||
|
int has_arg;
|
||||||
|
int *flag;
|
||||||
|
int val;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* human-readable values for has_arg */
|
||||||
|
#undef no_argument
|
||||||
|
#define no_argument 0
|
||||||
|
#undef required_argument
|
||||||
|
#define required_argument 1
|
||||||
|
#undef optional_argument
|
||||||
|
#define optional_argument 2
|
||||||
|
|
||||||
|
/* GNU-style long-argument parsers */
|
||||||
|
extern int my_getopt_long(int argc, char * argv[], const char *shortopts,
|
||||||
|
const struct option *longopts, int *longind);
|
||||||
|
|
||||||
|
extern int my_getopt_long_only(int argc, char * argv[], const char *shortopts,
|
||||||
|
const struct option *longopts, int *longind);
|
||||||
|
|
||||||
|
extern int _my_getopt_internal(int argc, char * argv[], const char *shortopts,
|
||||||
|
const struct option *longopts, int *longind,
|
||||||
|
int long_only);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* HAVE_GETOPT_H && HAVE_GETOPT_LONG && HAVE_GETOPT_LONG_ONLY */
|
||||||
|
|
||||||
|
#endif /* MY_GETOPT_H_INCLUDED */
|
||||||
@@ -30,7 +30,7 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <getopt.h>
|
#include <compat_getopt.h>
|
||||||
|
|
||||||
// lib
|
// lib
|
||||||
#include "mem.h"
|
#include "mem.h"
|
||||||
|
|||||||
@@ -30,7 +30,6 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <getopt.h>
|
|
||||||
|
|
||||||
#include "mem.h"
|
#include "mem.h"
|
||||||
#include "z85.h"
|
#include "z85.h"
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ AM_CFLAGS = -I../include/pcp -Wall -g
|
|||||||
check_PROGRAMS = col invalidkeys pwhashes
|
check_PROGRAMS = col invalidkeys pwhashes
|
||||||
|
|
||||||
col_LDADD = ../libpcp/.libs/libpcp1.a
|
col_LDADD = ../libpcp/.libs/libpcp1.a
|
||||||
col_SOURCES = collisions.c
|
col_SOURCES = collisions.c ../src/compat_getopt.c
|
||||||
|
|
||||||
invalidkeys_LDADD = ../libpcp/.libs/libpcp1.a \
|
invalidkeys_LDADD = ../libpcp/.libs/libpcp1.a \
|
||||||
../src/keyprint.o ../src/keymgmt.o ../src/readpass.o
|
../src/keyprint.o ../src/keymgmt.o ../src/readpass.o
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ mkinstalldirs = $(install_sh) -d
|
|||||||
CONFIG_HEADER = $(top_builddir)/include/pcp/config.h
|
CONFIG_HEADER = $(top_builddir)/include/pcp/config.h
|
||||||
CONFIG_CLEAN_FILES =
|
CONFIG_CLEAN_FILES =
|
||||||
CONFIG_CLEAN_VPATH_FILES =
|
CONFIG_CLEAN_VPATH_FILES =
|
||||||
am_col_OBJECTS = collisions.$(OBJEXT)
|
am_col_OBJECTS = collisions.$(OBJEXT) compat_getopt.$(OBJEXT)
|
||||||
col_OBJECTS = $(am_col_OBJECTS)
|
col_OBJECTS = $(am_col_OBJECTS)
|
||||||
col_DEPENDENCIES = ../libpcp/.libs/libpcp1.a
|
col_DEPENDENCIES = ../libpcp/.libs/libpcp1.a
|
||||||
am_invalidkeys_OBJECTS = invalidkeys.$(OBJEXT)
|
am_invalidkeys_OBJECTS = invalidkeys.$(OBJEXT)
|
||||||
@@ -235,7 +235,7 @@ top_builddir = @top_builddir@
|
|||||||
top_srcdir = @top_srcdir@
|
top_srcdir = @top_srcdir@
|
||||||
AM_CFLAGS = -I../include/pcp -Wall -g
|
AM_CFLAGS = -I../include/pcp -Wall -g
|
||||||
col_LDADD = ../libpcp/.libs/libpcp1.a
|
col_LDADD = ../libpcp/.libs/libpcp1.a
|
||||||
col_SOURCES = collisions.c
|
col_SOURCES = collisions.c ../src/compat_getopt.c
|
||||||
invalidkeys_LDADD = ../libpcp/.libs/libpcp1.a \
|
invalidkeys_LDADD = ../libpcp/.libs/libpcp1.a \
|
||||||
../src/keyprint.o ../src/keymgmt.o ../src/readpass.o
|
../src/keyprint.o ../src/keymgmt.o ../src/readpass.o
|
||||||
|
|
||||||
@@ -303,6 +303,7 @@ distclean-compile:
|
|||||||
-rm -f *.tab.c
|
-rm -f *.tab.c
|
||||||
|
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/collisions.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/collisions.Po@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/compat_getopt.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/invalidkeys.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/invalidkeys.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pwhashes.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pwhashes.Po@am__quote@
|
||||||
|
|
||||||
@@ -327,6 +328,20 @@ distclean-compile:
|
|||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
|
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
|
||||||
|
|
||||||
|
compat_getopt.o: ../src/compat_getopt.c
|
||||||
|
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT compat_getopt.o -MD -MP -MF $(DEPDIR)/compat_getopt.Tpo -c -o compat_getopt.o `test -f '../src/compat_getopt.c' || echo '$(srcdir)/'`../src/compat_getopt.c
|
||||||
|
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/compat_getopt.Tpo $(DEPDIR)/compat_getopt.Po
|
||||||
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../src/compat_getopt.c' object='compat_getopt.o' libtool=no @AMDEPBACKSLASH@
|
||||||
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
|
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o compat_getopt.o `test -f '../src/compat_getopt.c' || echo '$(srcdir)/'`../src/compat_getopt.c
|
||||||
|
|
||||||
|
compat_getopt.obj: ../src/compat_getopt.c
|
||||||
|
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT compat_getopt.obj -MD -MP -MF $(DEPDIR)/compat_getopt.Tpo -c -o compat_getopt.obj `if test -f '../src/compat_getopt.c'; then $(CYGPATH_W) '../src/compat_getopt.c'; else $(CYGPATH_W) '$(srcdir)/../src/compat_getopt.c'; fi`
|
||||||
|
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/compat_getopt.Tpo $(DEPDIR)/compat_getopt.Po
|
||||||
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../src/compat_getopt.c' object='compat_getopt.obj' libtool=no @AMDEPBACKSLASH@
|
||||||
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
|
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o compat_getopt.obj `if test -f '../src/compat_getopt.c'; then $(CYGPATH_W) '../src/compat_getopt.c'; else $(CYGPATH_W) '$(srcdir)/../src/compat_getopt.c'; fi`
|
||||||
|
|
||||||
mostlyclean-libtool:
|
mostlyclean-libtool:
|
||||||
-rm -f *.lo
|
-rm -f *.lo
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <getopt.h>
|
#include <compat_getopt.h>
|
||||||
#include <sodium.h>
|
#include <sodium.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <getopt.h>
|
|
||||||
#include <sodium.h>
|
#include <sodium.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <getopt.h>
|
|
||||||
#include <sodium.h>
|
#include <sodium.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user