[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gawk-diffs] [SCM] gawk branch, gawk-4.1-stable, updated. gawk-4.1.0-811
From: |
John Malmberg |
Subject: |
[gawk-diffs] [SCM] gawk branch, gawk-4.1-stable, updated. gawk-4.1.0-811-gafe5657 |
Date: |
Wed, 03 Feb 2016 03:36:14 +0000 |
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "gawk".
The branch, gawk-4.1-stable has been updated
via afe565753eb654aa1b2280908701e8c0d8e7ccbb (commit)
from ea508868203a26ce441d28fc4cbb0dff35ddaab6 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=afe565753eb654aa1b2280908701e8c0d8e7ccbb
commit afe565753eb654aa1b2280908701e8c0d8e7ccbb
Author: John Malmberg <address@hidden>
Date: Tue Feb 2 21:29:10 2016 -0600
Use VMS provided descriptor struct
diff --git a/vms/ChangeLog b/vms/ChangeLog
index cdcdcf0..3a16319 100644
--- a/vms/ChangeLog
+++ b/vms/ChangeLog
@@ -7,7 +7,7 @@
update.
(vms_debug) New command to switch to debug_gawk
New/fixed tests:
- (basic) badassign1,dfamb1,exit2,nfloop,badbuild,
+ (basic) badassign1,dfamb1,exit2,nfloop,badbuild,
callparam,exitval2,exitval3,inpref,paramasfunc1,
paramasfunc2,regexpbrack,sortglos,rebrackloc
aryprm9,nulinsrc,rstest4,rstest5
@@ -18,6 +18,9 @@
(locale) backbigs1,backsmalls1,backsmalls2,mbprintf4
(shlib) inplace2,testext,lc_num1,mbprintf1,
mbprintf2,mbprintf3,mbprintf4,mbfw1,ordchr2
+ * vms.h, vms_args.c, vms_cli.c, vms_fwrite.c,
+ vms_misc.c, vms_popen.c:
+ Use VMS provided descriptor definitions.
2016-01-27 John E. Malmberg <address@hidden>
diff --git a/vms/vms.h b/vms/vms.h
index 3991d39..43ca837 100644
--- a/vms/vms.h
+++ b/vms/vms.h
@@ -3,7 +3,7 @@
* Pat Rankin, Nov'89
*/
-#if 0
+#if 1
#include <iodef.h>
#else
#define IO$_WRITEVBLK 48 /* write virtual block */
@@ -11,7 +11,7 @@
#define IO$M_CANCTRLO (1 << IO$V_CANCTRLO)
#endif
-#if 0
+#if 1
#include <clidef.h>
#include <cliverbdef.h>
#include <fscndef.h>
@@ -22,19 +22,26 @@
#define FSCN$_FILESPEC 1
#endif
-#if 0
+#if 1
#include <climsgdef.h>
#else
-#define CLI$_RUNUSED 0x00030000 /* value returned by $CLI for "RUN" */
-#define CLI$_SYNTAX 0x000310FC /* error signalled by CLI$DCL_PARSE */
#define CLI$_INSFPRM 0x00038048 /* insufficient parameters */
#define CLI$_VALREQ 0x00038150 /* missing required value */
#define CLI$_NEGATED 0x000381F8 /* explicitly negated */
#define CLI$_CONFLICT 0x00038258 /* conflicting qualifiers */
#define CLI$_NOOPTPRS 0x00038840 /* no option present */
#endif
+/* Missing in VAX/VMS 7.3 */
+#ifndef CLI$_RUNUSED
+#define CLI$_RUNUSED 0x00030000 /* value returned by $CLI for "RUN" */
+#endif
+/* Missing as of VMS 8.4 */
+#ifndef CLI$_SYNTAX
+#define CLI$_SYNTAX 0x000310FC /* error signalled by CLI$DCL_PARSE */
+#endif
+
-#if 0
+#if 1
#include <psldef.h>
#else
#define PSL$C_USER 3 /* user mode */
@@ -44,36 +51,60 @@
typedef unsigned long U_Long;
typedef unsigned short U_Short;
-typedef struct _dsc { int len; char *adr; } Dsc; /* limited string descriptor
*/
- /* standard VMS itemlist-3 structure */
+#include <descrip.h>
+#include <stsdef.h>
+
+#pragma member_alignment save
+#pragma nomember_alignment longword
+#pragma message save
+#pragma message disable misalgndmem
typedef struct _itm { U_Short len, code; void *buffer; U_Short *retlen; } Itm;
+#pragma message restore
+#pragma member_alignment restore
+
-#define vmswork(sts) ((sts)&1)
-#define vmsfail(sts) (!vmswork(sts))
+#define vmswork(sts) $VMS_STATUS_SUCCESS(sts)
+#define vmsfail(sts) (!$VMS_STATUS_SUCCESS(sts))
#define CondVal(sts) ((sts)&0x0FFFFFF8) /* strip severity & msg inhibit */
-#define Descrip(strdsc,strbuf) Dsc strdsc = {sizeof strbuf - 1, (char *)strbuf}
+#define Descrip(strdsc,strbuf) struct dsc$descriptor_s \
+ strdsc = {sizeof strbuf - 1, DSC$K_DTYPE_T, DSC$K_CLASS_S, (char *)strbuf}
extern int shell$is_shell(void);
-extern U_Long LIB$FIND_FILE(const Dsc *, Dsc *, void *, ...);
+extern U_Long LIB$FIND_FILE(const struct dsc$descriptor_s *,
+ struct dsc$descriptor_s *, void *, ...);
extern U_Long LIB$FIND_FILE_END(void *);
#ifndef NO_TTY_FWRITE
extern U_Long LIB$GET_EF(long *);
-extern U_Long SYS$ASSIGN(const Dsc *, short *, long, const Dsc *);
+extern U_Long SYS$ASSIGN(const struct dsc$descriptor_s *, short *, long,
+ const struct dsc$descriptor_s *);
extern U_Long SYS$DASSGN(short);
extern U_Long SYS$QIO(U_Long, U_Long, U_Long, void *,
void (*)(U_Long), U_Long,
const char *, int, int, U_Long, int, int);
extern U_Long SYS$SYNCH(long, void *);
#endif /*!NO_TTY_FWRITE*/
-extern U_Long LIB$SPAWN(const Dsc *,const Dsc *,const Dsc *,
- const U_Long *,const Dsc *,U_Long *,U_Long *,...);
+extern U_Long LIB$SPAWN(const struct dsc$descriptor_s *,
+ const struct dsc$descriptor_s *,
+ const struct dsc$descriptor_s *,
+ const U_Long *,
+ const struct dsc$descriptor_s *,
+ U_Long *, U_Long * ,...);
/* system services for logical name manipulation */
-extern U_Long SYS$TRNLNM(const U_Long *,const Dsc *,const Dsc *,
- const unsigned char *,Itm *);
-extern U_Long SYS$CRELNM(const U_Long *,const Dsc *,const Dsc *,
- const unsigned char *,const Itm *);
-extern U_Long SYS$CRELOG(int,const Dsc *,const Dsc *,unsigned char);
-extern U_Long SYS$DELLNM(const Dsc *,const Dsc *,const unsigned char *);
+extern U_Long SYS$TRNLNM(const U_Long *,
+ const struct dsc$descriptor_s *,
+ const struct dsc$descriptor_s *,
+ const unsigned char *, Itm *);
+extern U_Long SYS$CRELNM(const U_Long *,
+ const struct dsc$descriptor_s *,
+ const struct dsc$descriptor_s *,
+ const unsigned char *, const Itm *);
+extern U_Long SYS$CRELOG(int,
+ const struct dsc$descriptor_s *,
+ const struct dsc$descriptor_s *,
+ unsigned char);
+extern U_Long SYS$DELLNM(const struct dsc$descriptor_s *,
+ const struct dsc$descriptor_s *,
+ const unsigned char *);
extern void v_add_arg(int, const char *);
extern void vms_exit(int);
diff --git a/vms/vms_args.c b/vms/vms_args.c
index 1216513..de94b64 100644
--- a/vms/vms_args.c
+++ b/vms/vms_args.c
@@ -319,7 +319,7 @@ static void
vms_expand_wildcards( const char *prospective_filespec )
{
char *p, spec_buf[255+1], res_buf[255+1];
- Dsc spec, result;
+ struct dsc$descriptor_s spec, result;
void *context;
register int len = strlen(prospective_filespec);
@@ -333,8 +333,14 @@ vms_expand_wildcards( const char *prospective_filespec )
else if (strchr(spec_buf, '*') == strchr(spec_buf, '%') /* => both NULL */
&& strstr(spec_buf, "...") == NULL)
return; /* no wildcards present; don't attempt file lookup */
- spec.len = len, spec.adr = spec_buf;
- result.len = sizeof res_buf - 1, result.adr = res_buf;
+ spec.dsc$w_length = len;
+ spec.dsc$a_pointer = spec_buf;
+ spec.dsc$b_dtype = DSC$K_DTYPE_T;
+ spec.dsc$b_class = DSC$K_CLASS_S;
+ result.dsc$w_length = sizeof res_buf - 1;
+ result.dsc$a_pointer = res_buf;
+ result.dsc$b_dtype = DSC$K_DTYPE_T;
+ result.dsc$b_class = DSC$K_CLASS_S;
/* The filespec is already in v_argv[v_argc]; if we fail to match anything,
we'll just leave it there (unlike most shells, where it would
evaporate).
@@ -395,7 +401,7 @@ skipblanks( const char *ptr )
static U_Long
vms_define( const char *log_name, const char *trans_val )
{
- Dsc log_dsc;
+ struct dsc$descriptor_s log_dsc;
static Descrip(lnmtable,"LNM$PROCESS_TABLE");
static U_Long attr = LNM$M_CONFINE;
static Itm itemlist[] = { {0,LNM$_STRING,0,0}, {0,0} };
@@ -407,8 +413,10 @@ vms_define( const char *log_name, const char *trans_val )
&& (trans_val[len] == '\0' || trans_val[len] == ':'))
return 0;
- log_dsc.adr = (char *)log_name;
- log_dsc.len = len;
+ log_dsc.dsc$a_pointer = (char *)log_name;
+ log_dsc.dsc$w_length = len;
+ log_dsc.dsc$b_dtype = DSC$K_DTYPE_T;
+ log_dsc.dsc$b_class = DSC$K_CLASS_S;
itemlist[0].buffer = (char *)trans_val;
itemlist[0].len = strlen(trans_val);
return SYS$CRELNM(&attr, &lnmtable, &log_dsc, &acmode, itemlist);
diff --git a/vms/vms_cli.c b/vms/vms_cli.c
index 08e2d14..13c7979 100644
--- a/vms/vms_cli.c
+++ b/vms/vms_cli.c
@@ -15,7 +15,7 @@
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
-
+
/*
* vms_cli.c - command line interface routines.
@@ -29,11 +29,12 @@
#include <string.h>
#endif
-extern U_Long CLI$PRESENT(const Dsc *);
-extern U_Long CLI$GET_VALUE(const Dsc *, Dsc *, short *);
-extern U_Long CLI$DCL_PARSE(const Dsc *, const void *, ...);
+extern U_Long CLI$PRESENT(const struct dsc$descriptor_s *);
+extern U_Long CLI$GET_VALUE(const struct dsc$descriptor_s *,
+ struct dsc$descriptor_s *, short *);
+extern U_Long CLI$DCL_PARSE(const struct dsc$descriptor_s *, const void *,
...);
extern U_Long SYS$CLI(void *, ...);
-extern U_Long SYS$FILESCAN(const Dsc *, void *, long *);
+extern U_Long SYS$FILESCAN(const struct dsc$descriptor_s *, void *, long *);
extern void *LIB$ESTABLISH(U_Long (*handler)(void *, void *));
extern U_Long LIB$SIG_TO_RET(void *, void *); /* condition handler */
@@ -42,10 +43,12 @@ extern U_Long LIB$SIG_TO_RET(void *, void *); /*
condition handler */
U_Long
Cli_Present( const char *item )
{
- Dsc item_dsc;
+ struct dsc$descriptor_s item_dsc;
(void)LIB$ESTABLISH(LIB$SIG_TO_RET);
- item_dsc.len = strlen(item_dsc.adr = (char *)item);
+ item_dsc.dsc$w_length = strlen(item_dsc.dsc$a_pointer = (char *)item);
+ item_dsc.dsc$b_dtype = DSC$K_DTYPE_T;
+ item_dsc.dsc$b_class = DSC$K_CLASS_S;
return CLI$PRESENT(&item_dsc);
}
@@ -54,13 +57,18 @@ Cli_Present( const char *item )
U_Long
Cli_Get_Value( const char *item, char *result, int size )
{
- Dsc item_dsc, res_dsc;
+ struct dsc$descriptor_s item_dsc, res_dsc;
U_Long sts;
short len = 0;
(void)LIB$ESTABLISH(LIB$SIG_TO_RET);
- item_dsc.len = strlen(item_dsc.adr = (char *)item);
- res_dsc.len = size, res_dsc.adr = result;
+ item_dsc.dsc$w_length = strlen(item_dsc.dsc$a_pointer = (char *)item);
+ item_dsc.dsc$b_dtype = DSC$K_DTYPE_T;
+ item_dsc.dsc$b_class = DSC$K_CLASS_S;
+ res_dsc.dsc$w_length = size;
+ res_dsc.dsc$a_pointer = result;
+ res_dsc.dsc$b_dtype = DSC$K_DTYPE_T;
+ res_dsc.dsc$b_class = DSC$K_CLASS_S;
sts = CLI$GET_VALUE(&item_dsc, &res_dsc, &len);
result[len] = '\0';
return sts;
@@ -75,7 +83,8 @@ Cli_Parse_Command( const void *cmd_tables, const char
*cmd_verb )
{
struct { short len, code; void *adr; } fscn[2];
struct { char rqtype, rqindx, rqflags, rqstat; unsigned :32;
- Dsc rdesc; unsigned :32; unsigned :32; unsigned :32; } cmd;
+ struct dsc$descriptor_s rdesc;
+ unsigned :32; unsigned :32; unsigned :32; } cmd;
U_Long sts;
int ltmp;
char longbuf[8200];
@@ -93,15 +102,16 @@ Cli_Parse_Command( const void *cmd_tables, const char
*cmd_verb )
memset(fscn, 0, sizeof fscn);
fscn[0].code = FSCN$_FILESPEC; /* full file specification */
(void)SYS$FILESCAN(&cmd.rdesc, fscn, (long *)0);
- cmd.rdesc.len -= fscn[0].len; /* shrink size */
- cmd.rdesc.adr += fscn[0].len; /* advance ptr */
+ cmd.rdesc.dsc$w_length -= fscn[0].len; /* shrink size */
+ cmd.rdesc.dsc$a_pointer += fscn[0].len; /* advance ptr */
}
/* prepend verb and then parse the command line */
strcat(strcpy(longbuf, cmd_verb), " "), ltmp = strlen(longbuf);
- if (cmd.rdesc.len + ltmp > sizeof longbuf)
- cmd.rdesc.len = sizeof longbuf - ltmp;
- strncpy(&longbuf[ltmp], cmd.rdesc.adr, cmd.rdesc.len);
- cmd.rdesc.len += ltmp, cmd.rdesc.adr = longbuf;
+ if (cmd.rdesc.dsc$w_length + ltmp > sizeof longbuf)
+ cmd.rdesc.dsc$w_length = sizeof longbuf - ltmp;
+ strncpy(&longbuf[ltmp],
+ cmd.rdesc.dsc$a_pointer, cmd.rdesc.dsc$w_length);
+ cmd.rdesc.dsc$w_length += ltmp, cmd.rdesc.dsc$a_pointer = longbuf;
sts = CLI$DCL_PARSE(&cmd.rdesc, cmd_tables);
}
diff --git a/vms/vms_fwrite.c b/vms/vms_fwrite.c
index f29ec83..76eec6b 100644
--- a/vms/vms_fwrite.c
+++ b/vms/vms_fwrite.c
@@ -78,12 +78,16 @@ tty_fwrite( const void *buf, size_t size, size_t number,
FILE *file )
if (chan == 0) { /* if not initialized, need to assign a channel */
if (isatty(file_num) > 0 /* isatty: 1=yes, 0=no, -1=problem */
&& ! do_debug) {
- Dsc device;
+ struct dsc$descriptor_s device;
char devnam[255+1];
fgetname(file, devnam); /* get 'file's name */
- device.len = strlen(device.adr = devnam); /* create descriptor */
- if (vmswork(SYS$ASSIGN(&device, &chan, 0, (Dsc *)0))) {
+ /* create descriptor */
+ device.dsc$w_length = strlen(device.dsc$a_pointer = devnam);
+ device.dsc$b_dtype = DSC$K_DTYPE_T;
+ device.dsc$b_class = DSC$K_CLASS_S;
+ if (vmswork(SYS$ASSIGN(&device, &chan, 0,
+ (struct dsc$descriptor_s *)0))) {
/* get an event flag; use #0 if problem */
if (evfn == -1 && vmsfail(LIB$GET_EF(&evfn))) evfn = 0;
} else chan = 0; /* $ASSIGN failed */
diff --git a/vms/vms_misc.c b/vms/vms_misc.c
index 82c2f8a..e561af5 100644
--- a/vms/vms_misc.c
+++ b/vms/vms_misc.c
@@ -120,7 +120,7 @@ vms_open( const char *name, int mode, ... )
struct stat stb;
int stat_result;
const char *mbc, *shr = "shr=get", *ctx = "ctx=stm";
-
+
stat_result = stat((char *)name, &stb);
if ( stat_result < 0) { /* assume DECnet */
mbc = "mbc=8";
@@ -187,7 +187,9 @@ vms_gettimeofday(struct timeval *tv, void
*timezone__not_used)
/*
Emulate unix's gettimeofday call; timezone argument is ignored.
*/
- static const Dsc epoch_dsc = { sizeof UNIX_EPOCH - sizeof "", UNIX_EPOCH };
+ static const struct dsc$descriptor_s epoch_dsc =
+ { sizeof UNIX_EPOCH - sizeof "",
+ DSC$K_DTYPE_T, DSC$K_CLASS_S, UNIX_EPOCH };
static long epoch[2] = {0L,0L}; /* needs one time initialization */
const long thunk = VMS_UNITS_PER_SECOND;
long now[2], quad[2];
diff --git a/vms/vms_popen.c b/vms/vms_popen.c
index 23482df..e6238bf 100644
--- a/vms/vms_popen.c
+++ b/vms/vms_popen.c
@@ -71,8 +71,8 @@ extern char *mktemp(char *);
static void push_logicals(void);
static void pop_logicals(void);
-static Itm *save_translation(const Dsc *);
-static void restore_translation(const Dsc *, const Itm *);
+static Itm *save_translation(const struct dsc$descriptor_s *);
+static void restore_translation(const struct dsc$descriptor_s *, const Itm *);
typedef enum { unopened = 0, reading, writing } pipemode;
typedef struct pipe_info {
@@ -159,22 +159,30 @@ pclose( FILE *current )
int
vms_execute( const char *command, const char *input, const char *output )
{
- Dsc cmd, in, out, *in_p, *out_p;
+ struct dsc$descriptor_s cmd, in, out, *in_p, *out_p;
U_Long sts, cmpltn_sts;
- cmd.len = strlen(cmd.adr = (char *)command);
- if (input)
- in.len = strlen(in.adr = (char *)input), in_p = ∈
- else
+ cmd.dsc$w_length = strlen(cmd.dsc$a_pointer = (char *)command);
+ cmd.dsc$b_dtype = DSC$K_DTYPE_T;
+ cmd.dsc$b_class = DSC$K_CLASS_S;
+ if (input) {
+ in.dsc$w_length = strlen(in.dsc$a_pointer = (char *)input);
+ in_p = ∈
+ in.dsc$b_dtype = DSC$K_DTYPE_T;
+ in.dsc$b_class = DSC$K_CLASS_S;
+ } else
in_p = 0;
- if (output)
- out.len = strlen(out.adr = (char *)output), out_p = &out;
- else
+ if (output) {
+ out.dsc$w_length = strlen(out.dsc$a_pointer = (char *)output);
+ out_p = &out;
+ out.dsc$b_dtype = DSC$K_DTYPE_T;
+ out.dsc$b_class = DSC$K_CLASS_S;
+ } else
out_p = 0;
push_logicals(); /* guard against user-mode definitions of sys$Xput */
sts = LIB$SPAWN(&cmd, in_p, out_p, (U_Long *)0,
- (Dsc *)0, (U_Long *)0, &cmpltn_sts);
+ (struct dsc$descriptor_s *)0, (U_Long *)0, &cmpltn_sts);
pop_logicals(); /* restore environment */
if (vmswork(sts) && vmsfail(cmpltn_sts)) sts = cmpltn_sts;
@@ -255,7 +263,7 @@ pop_logicals( void ) /* redefine sys$input
and/or sys$output */
}
static Itm *
-save_translation( const Dsc *logname )
+save_translation( const struct dsc$descriptor_s *logname )
{
Itm trans[4], *itmlst;
long trans_attr, max_trans_indx; /* 0-based translation index count */
@@ -318,9 +326,10 @@ save_translation( const Dsc *logname )
}
static void
-restore_translation( const Dsc *logname, const Itm *itemlist )
+restore_translation( const struct dsc$descriptor_s *logname,
+ const Itm *itemlist )
{
- Dsc trans_val;
+ struct dsc$descriptor_s trans_val;
U_Long *attr_p;
# define LOG_PROCESS_TABLE 2 /* <obsolete> */
# define LOG_USERMODE PSL$C_USER
@@ -332,8 +341,10 @@ restore_translation( const Dsc *logname, const Itm
*itemlist )
so it'll be the first string entry in the itemlist.
*/
/* assert( itemlist[2].code == LNM$_STRING ); */
- trans_val.adr = itemlist[2].buffer;
- trans_val.len = itemlist[2].len;
+ trans_val.dsc$a_pointer = itemlist[2].buffer;
+ trans_val.dsc$w_length = itemlist[2].len;
+ trans_val.dsc$b_dtype = DSC$K_DTYPE_T;
+ trans_val.dsc$b_class = DSC$K_CLASS_S;
(void) SYS$CRELOG(LOG_PROCESS_TABLE, logname, &trans_val, LOG_USERMODE);
} else {
/* $crelnm definition; itemlist could specify multiple translations,
-----------------------------------------------------------------------
Summary of changes:
vms/ChangeLog | 5 +++-
vms/vms.h | 73 ++++++++++++++++++++++++++++++++++++++---------------
vms/vms_args.c | 20 ++++++++++----
vms/vms_cli.c | 44 ++++++++++++++++++++------------
vms/vms_fwrite.c | 10 +++++--
vms/vms_misc.c | 6 +++-
vms/vms_popen.c | 43 ++++++++++++++++++++------------
7 files changed, 135 insertions(+), 66 deletions(-)
hooks/post-receive
--
gawk
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [gawk-diffs] [SCM] gawk branch, gawk-4.1-stable, updated. gawk-4.1.0-811-gafe5657,
John Malmberg <=