zsh-workers
 help / color / mirror / code / Atom feed
From: Oliver Kiddle <okiddle@yahoo.co.uk>
To: zsh-workers@sunsite.dk
Subject: Re: PATCH: arithmetic evaluation for printf
Date: Tue, 16 Oct 2001 12:09:55 +0100	[thread overview]
Message-ID: <3BCC1583.9AA92F2F@yahoo.co.uk> (raw)
In-Reply-To: <3BCAC666.9DC9EF09@yahoo.co.uk>

I wrote:
> 
> I've only been able to test it where a zlong is a long long.

It is fine where zlong is a long and where long is 64 bits such as the
alpha on sourceforge. Problems might arise if the 64 bit type is
anything else but I can't see anything in zshconfig.ac to indicate that
that is yet the case anywhere (it only tries long and long long).

> And don't bother pointing out the resulting test failure in B03 - I
> forgot the changed test file when I put this on a floppy at home
> yesterday.

The changed test file is below. I also forgot to make it return 1 after
math errors so that fix is also below. The comment above bslashquote()
in utils.c was incomplete so even though I'm ditching the changes to
that function, I'll bring the comment up-to-date.

Oliver

Index: Src/builtin.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/builtin.c,v
retrieving revision 1.58
diff -u -r1.58 builtin.c
--- Src/builtin.c	2001/10/15 11:34:27	1.58
+++ Src/builtin.c	2001/10/16 11:05:32
@@ -3125,6 +3125,10 @@
 
 	    if (*c == '*') {
 		if (*args) width = (int)mathevali(*args++);
+		if (errflag) {
+	    	    errflag = 0;
+		    ret = 1;
+		}
 		c++;
 	    } else if (idigit(*c)) {
 		width = strtoul(c, &endptr, 0);
@@ -3136,6 +3140,10 @@
 		c++;
 		if (*c == '*') {
 		    prec = (*args) ? (int)mathevali(*args++) : 0;
+		    if (errflag) {
+	    	    	errflag = 0;
+			ret = 1;
+		    }
 		    c++;
 		} else if (idigit(*c)) {
 		    prec = strtoul(c, &endptr, 0);
@@ -3147,7 +3155,6 @@
 	    /* ignore any size modifier */
 	    if (*c == 'l' || *c == 'L' || *c == 'h') c++;
 
-	    errflag = 0;
 	    d[1] = '\0';
 	    switch (*d = *c) {
 	    case 'c':
@@ -3226,6 +3233,7 @@
 			if (errflag) {
 			    zlongval = 0;
 			    errflag = 0;
+			    ret = 1;
 			}
 			print_val(zlongval)
 			break;
@@ -3238,11 +3246,12 @@
 			if (errflag) {
 			    doubleval = 0;
 			    errflag = 0;
+			    ret = 1;
 			}
 			print_val(doubleval)
 			break;
 		    case 3:
-#ifdef ZSH_64_BIT_TYPE
+#ifdef ZSH_64_BIT_UTYPE
  		    	*d++ = 'l';
 #endif
 		    	*d++ = 'l', *d++ = *c, *d = '\0';
@@ -3250,6 +3259,7 @@
 			if (errflag) {
 			    doubleval = 0;
 			    errflag = 0;
+			    ret = 1;
 			}
 			print_val(zulongval)
 		    }
Index: Src/utils.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/utils.c,v
retrieving revision 1.35
diff -u -r1.35 utils.c
--- Src/utils.c	2001/06/15 23:55:08	1.35
+++ Src/utils.c	2001/10/16 11:05:32
@@ -2929,8 +2929,9 @@
  * pointer it points to may point to a position in s and in e the position  *
  * of the corresponding character in the quoted string is returned.         *
  * The last argument should be zero if this is to be used outside a string, *
- * one if it is to be quoted for the inside of a single quoted string, and  *
- * two if it is for the inside of  double quoted string.                    *
+ * one if it is to be quoted for the inside of a single quoted string,      *
+ * two if it is for the inside of a double quoted string, and               *
+ * three if it is for the inside of a posix quoted string.                  *
  * The string may be metafied and contain tokens.                           */
 
 /**/
Index: Test/B03print.ztst
===================================================================
RCS file: /cvsroot/zsh/zsh/Test/B03print.ztst,v
retrieving revision 1.1
diff -u -r1.1 B03print.ztst
--- Test/B03print.ztst	2001/10/08 10:47:47	1.1
+++ Test/B03print.ztst	2001/10/16 11:05:32
@@ -78,6 +78,10 @@
 0:initial quote to get numeric value of character with double
 >6.6E+01
 
+ printf '%x\n' $(printf '"\xf0')
+0:numeric value of high numbered character
+>f0
+
 # code will probably be changed to print the literal `%s' in this case
  printf '\x25s\n' arg
 0:using \x25 to introduce a format specifier
@@ -95,24 +99,15 @@
 0:width/precision specified in arguments
 > 10.20
 
- printf '%d\n' 3000000000
-1d:out of range numeric result
-?(eval):printf:1: `3000000000' arithmetic overflow
-
- printf '%G\n' letters
-1:non numeric argument
-?(eval):printf:1: `letters' expected numeric value
->0
-
- print -f '%d\n' 2e4
-1:letters in numeric argument
-?(eval):print:1: `2e4' not completely converted
->2
-
  printf '%z'
-1:test invalid directive
+1:use of invalid directive
 ?(eval):printf:1: %z: invalid directive
 
+ printf '%d\n' 3a
+1:bad arithmetic expression
+?(eval):1: bad math expression: operator expected at `a'
+>0
+
  print -m -f 'format - %s.\n' 'z' a b c
 0:format not printed if no arguments left after -m removal
 
@@ -133,3 +128,15 @@
 >one	a:0x1%
 >two	b:0x2%
 >three	c:0x3%
+
+ printf '%0+- #-08.5dx\n' 123
+0:maximal length format specification
+>+00123  x
+
+ printf '%*smorning\n' -5 good
+0:negative width specified
+>good morning
+
+ printf '%.*g\n' -1 .1
+0:negative precision specified
+>0.1

_____________________________________________________________________
This message has been checked for all known viruses by the 
MessageLabs Virus Scanning Service. For further information visit
http://www.messagelabs.com/stats.asp


      reply	other threads:[~2001-10-16 11:11 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-10-15 11:20 Oliver Kiddle
2001-10-16 11:09 ` Oliver Kiddle [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3BCC1583.9AA92F2F@yahoo.co.uk \
    --to=okiddle@yahoo.co.uk \
    --cc=zsh-workers@sunsite.dk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).