aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2012-09-13 17:27:53 +0300
committerArnold D. Robbins <arnold@skeeve.com>2012-09-13 17:27:53 +0300
commit99290f5ca37cb905f7f1dab9be416b2e2057d243 (patch)
treeb8b337622f6f06293fed652cf93e39ab67a60a75
parentc2db2b9ff8465cb5044e6f22beb229336479be57 (diff)
downloadegawk-99290f5ca37cb905f7f1dab9be416b2e2057d243.tar.gz
egawk-99290f5ca37cb905f7f1dab9be416b2e2057d243.tar.bz2
egawk-99290f5ca37cb905f7f1dab9be416b2e2057d243.zip
z/OS changes from Dave Pitts and Arnold.
-rw-r--r--ChangeLog9
-rw-r--r--awk.h12
-rwxr-xr-xconfigure15
-rw-r--r--configure.ac11
-rw-r--r--extension/ChangeLog7
-rw-r--r--extension/gawkfts.c5
-rw-r--r--extension/gawkfts.h11
-rw-r--r--extension/readdir.c6
-rw-r--r--extension/rwarray.c15
-rw-r--r--missing_d/ChangeLog4
-rw-r--r--missing_d/snprintf.c4
-rw-r--r--missing_d/strtoul.c12
12 files changed, 91 insertions, 20 deletions
diff --git a/ChangeLog b/ChangeLog
index fa0f499e..2598c307 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2012-09-13 Arnold D. Robbins <arnold@skeeve.com>
+
+ * configure.ac: Determination of DYNAMIC adjusted. Hopefully is
+ smarter for z/OS.
+
+2012-09-13 Dave Pitts <dpitts@cozx.com>
+
+ * awk.h: Add defines for z/OS for newer types.
+
2012-08-31 Arnold D. Robbins <arnold@skeeve.com>
* gawkapi.c: Wrap various bits in #ifdef DYNAMIC so that
diff --git a/awk.h b/awk.h
index d106d2e0..de425290 100644
--- a/awk.h
+++ b/awk.h
@@ -117,6 +117,16 @@ extern int errno;
#if HAVE_STDINT_H
# include <stdint.h>
#endif
+#else /* ZOS_USS */
+#include <limits.h>
+#include <sys/time.h>
+#define INT32_MAX INT_MAX
+#define INT32_MIN INT_MIN
+#ifndef __uint32_t
+#define __uint32_t 1
+typedef unsigned long uint32_t;
+#endif
+typedef long int32_t;
#endif /* !ZOS_USS */
/* ----------------- System dependencies (with more includes) -----------*/
@@ -1638,7 +1648,7 @@ extern const wchar_t *wstrstr(const wchar_t *haystack, size_t hs_len,
extern const wchar_t *wcasestrstr(const wchar_t *haystack, size_t hs_len,
const wchar_t *needle, size_t needle_len);
extern void r_free_wstr(NODE *n);
-#define free_wstr(n) (((n)->flags & WSTRCUR) ? r_free_wstr(n) : 0)
+#define free_wstr(n) do { if ((n)->flags & WSTRCUR) r_free_wstr(n); } while(0)
extern wint_t btowc_cache[];
#define btowc_cache(x) btowc_cache[(x)&0xFF]
extern void init_btowc_cache();
diff --git a/configure b/configure
index 4125827f..fd9b1527 100755
--- a/configure
+++ b/configure
@@ -10018,9 +10018,6 @@ $as_echo "#define HAVE_MBRTOWC 1" >>confdefs.h
ac_fn_c_check_header_mongrel "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default"
if test "x$ac_cv_header_dlfcn_h" = xyes; then :
-$as_echo "#define DYNAMIC 1" >>confdefs.h
-
-
# Check this separately. Some systems have dlopen
# in libc. Notably freebsd and cygwin.
# HP-NSK has it in zrldsrl
@@ -10077,9 +10074,19 @@ $as_echo "$ac_cv_search_dlopen" >&6; }
ac_res=$ac_cv_search_dlopen
if test "$ac_res" != no; then :
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-
+ gawk_have_dlopen=yes
+else
+ gawk_have_dlopen=no
fi
+ # Only do DYNAMIC if we have the lip. z/OS (some versions) have
+ # the header but not the lib, apparently
+ if test "$gawk_have_dlopen" = yes
+ then
+
+$as_echo "#define DYNAMIC 1" >>confdefs.h
+
+ fi
fi
diff --git a/configure.ac b/configure.ac
index bb81f800..575b3da3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -285,12 +285,17 @@ AC_FUNC_MBRTOWC
dnl check for dynamic linking
dnl This is known to be very primitive
AC_CHECK_HEADER(dlfcn.h,
- [AC_DEFINE([DYNAMIC], 1, [dynamic loading is possible])
-
+ [
# Check this separately. Some systems have dlopen
# in libc. Notably freebsd and cygwin.
# HP-NSK has it in zrldsrl
- AC_SEARCH_LIBS(dlopen, dl zrldsrl)
+ AC_SEARCH_LIBS(dlopen, dl zrldsrl, gawk_have_dlopen=yes, gawk_have_dlopen=no)
+ # Only do DYNAMIC if we have the lip. z/OS (some versions) have
+ # the header but not the lib, apparently
+ if test "$gawk_have_dlopen" = yes
+ then
+ AC_DEFINE([DYNAMIC], 1, [dynamic loading is possible])
+ fi
])
dnl check for how to use getpgrp
diff --git a/extension/ChangeLog b/extension/ChangeLog
index e37715ae..1a32961a 100644
--- a/extension/ChangeLog
+++ b/extension/ChangeLog
@@ -1,3 +1,10 @@
+2012-09-13 Dave Pitts <dpitts@cozx.com>
+
+ * gawkfts.c: Add defines and ifdefs for z/OS.
+ * gawkfts.h: Add defines and ifdefs for z/OS. Fix // comments.
+ * readdir.c (dir_get_record): Adjust sprintf format for z/OS.
+ * rwarray.c: Add defines and ifdefs for z/OS. Fix // comments.
+
2012-09-11 Arnold D. Robbins <arnold@skeeve.com>
* readdir.c (do_readdir_do_ftype): Set ERRNO for bad arguments.
diff --git a/extension/gawkfts.c b/extension/gawkfts.c
index 2f465959..2b47275b 100644
--- a/extension/gawkfts.c
+++ b/extension/gawkfts.c
@@ -40,7 +40,12 @@ static char sccsid[] = "@(#)fts.c 8.6 (Berkeley) 8/14/94";
#endif
/* #include "namespace.h" */
+#ifndef ZOS_USS
#include <sys/param.h>
+#else
+#include <stdio.h>
+#include <limits.h>
+#endif /* ZOS_USS */
#include <sys/stat.h>
#include <assert.h>
diff --git a/extension/gawkfts.h b/extension/gawkfts.h
index 41109664..f1ca26f5 100644
--- a/extension/gawkfts.h
+++ b/extension/gawkfts.h
@@ -45,6 +45,11 @@
# endif
#endif
+#ifdef ZOS_USS
+#include <limits.h>
+#define MAXPATHLEN FILENAME_MAX
+#endif
+
typedef struct {
struct _ftsent *fts_cur; /* current node */
struct _ftsent *fts_child; /* linked list of children */
@@ -64,7 +69,7 @@ typedef struct {
#define FTS_PHYSICAL 0x010 /* physical walk */
#define FTS_SEEDOT 0x020 /* return dot and dot-dot */
#define FTS_XDEV 0x040 /* don't cross devices */
-// #define FTS_WHITEOUT 0x080 /* return whiteout information */
+/* #define FTS_WHITEOUT 0x080 */ /* return whiteout information */
#define FTS_OPTIONMASK 0x0ff /* valid user option mask */
#define FTS_NAMEONLY 0x100 /* (private) child names only */
@@ -76,7 +81,11 @@ typedef struct _ftsent {
struct _ftsent *fts_cycle; /* cycle node */
struct _ftsent *fts_parent; /* parent directory */
struct _ftsent *fts_link; /* next file in directory */
+#ifdef ZOS_USS
+ long fts_number; /* local numeric value */
+#else
long long fts_number; /* local numeric value */
+#endif
void *fts_pointer; /* local address value */
char *fts_accpath; /* access path */
char *fts_path; /* root path */
diff --git a/extension/readdir.c b/extension/readdir.c
index 7140b72b..5f937fb9 100644
--- a/extension/readdir.c
+++ b/extension/readdir.c
@@ -175,9 +175,15 @@ dir_get_record(char **out, struct iobuf_public *iobuf, int *errcode,
return EOF;
}
+#ifdef ZOS_USS
+ len = sprintf(the_dir->buf, "%lu/%s",
+ (unsigned long) dirent->d_ino,
+ dirent->d_name);
+#else
len = sprintf(the_dir->buf, "%llu/%s",
(unsigned long long) dirent->d_ino,
dirent->d_name);
+#endif
if (do_ftype != NEVER_DO_INFO) {
const char *ftstr = ftype(dirent);
diff --git a/extension/rwarray.c b/extension/rwarray.c
index d8a54fde..43118282 100644
--- a/extension/rwarray.c
+++ b/extension/rwarray.c
@@ -49,6 +49,17 @@
#define _(msgid) gettext(msgid)
#define N_(msgid) msgid
+#if defined(ZOS_USS)
+#include <limits.h>
+#define INT32_MAX INT_MAX
+#define INT32_MIN INT_MIN
+#ifndef __uint32_t
+#define __uint32_t 1
+typedef unsigned long uint32_t;
+#endif
+typedef long int32_t;
+#endif /* ZOS_USS */
+
#define MAGIC "awkrulz\n"
#define MAJOR 3
#define MINOR 0
@@ -388,11 +399,11 @@ read_elem(FILE *fp, awk_element_t *element)
if (index_len > 0) {
if (buffer == NULL) {
- // allocate buffer
+ /* allocate buffer */
emalloc(buffer, char *, index_len, "read_elem");
buflen = index_len;
} else if (buflen < index_len) {
- // reallocate buffer
+ /* reallocate buffer */
char *cp = realloc(buffer, index_len);
if (cp == NULL)
diff --git a/missing_d/ChangeLog b/missing_d/ChangeLog
index ff29a926..cb797470 100644
--- a/missing_d/ChangeLog
+++ b/missing_d/ChangeLog
@@ -1,3 +1,7 @@
+2012-09-13 Arnold D. Robbins <arnold@skeeve.com>
+
+ * snprintf.c, strtoul.c: Remove TRUE/FALSE in favor of true/false.
+
2012-05-04 Arnold D. Robbins <arnold@skeeve.com>
* snprintf.c [DJGPP]: Change to __DJGPP__.
diff --git a/missing_d/snprintf.c b/missing_d/snprintf.c
index 12e50925..6cee2bed 100644
--- a/missing_d/snprintf.c
+++ b/missing_d/snprintf.c
@@ -53,14 +53,14 @@ static void close_safe_f()
static FILE *
safe_tmpfile (void)
{
- static short first = TRUE;
+ static bool first = true;
static const char template[] = "snprintfXXXXXX";
int fd;
static char *tmpdir = NULL;
static int len = 0;
if (first) {
- first = FALSE;
+ first = false;
/*
* First try Unix stanadard env var, then Windows var,
* then fall back to /tmp.
diff --git a/missing_d/strtoul.c b/missing_d/strtoul.c
index d2655750..cdd7cf14 100644
--- a/missing_d/strtoul.c
+++ b/missing_d/strtoul.c
@@ -14,8 +14,6 @@
#include <string.h>
#include <errno.h>
#include <limits.h>
-#define TRUE 1
-#define FALSE 0
#define strtoul mystrtoul
#endif
@@ -33,10 +31,10 @@ int base;
unsigned long result = 0UL;
char *nptr_orig = (char *) nptr;
- int neg = FALSE;
+ bool neg = false;
char *cp, c;
int val;
- int sawdigs = FALSE;
+ bool sawdigs = false;
/*
* The strtoul() function converts the initial part of the
@@ -64,7 +62,7 @@ int base;
nptr++;
else if (*nptr == '-') {
nptr++;
- neg = TRUE;
+ neg = true;
}
/*
@@ -110,7 +108,7 @@ int base;
goto out;
result *= base;
result += val;
- sawdigs = TRUE;
+ sawdigs = true;
break;
case 'A': case 'B': case 'C': case 'D': case 'E':
case 'F': case 'G': case 'H': case 'I': case 'J':
@@ -133,7 +131,7 @@ int base;
goto out;
result *= base;
result += val;
- sawdigs = TRUE;
+ sawdigs = true;
break;
default:
goto out;