From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from math.gatech.edu (euclid.skiles.gatech.edu [130.207.146.50]) by werple.net.au (8.7/8.7.1) with SMTP id UAA20114 for ; Fri, 3 Nov 1995 20:19:24 +1100 (EST) Received: by math.gatech.edu (SMI-8.6/SMI-SVR4) id DAA00771; Fri, 3 Nov 1995 03:57:48 -0500 Resent-Date: Fri, 3 Nov 1995 03:57:48 -0500 Old-Return-Path: From: pws@ifh.de (Peter William Stephenson) Message-Id: <9511030901.AA21400@sgi.ifh.de> Subject: Octal interpretation To: zsh-workers@math.gatech.edu (Zsh hackers list) Date: Fri, 3 Nov 1995 10:01:46 +0100 (MET) X-Mailer: ELM [version 2.4 PL24] Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Resent-Message-ID: <"3whVB1.0.zB.BcTcm"@euclid> Resent-From: zsh-workers@math.gatech.edu X-Mailing-List: archive/latest/519 X-Loop: zsh-workers@math.gatech.edu Precedence: list Resent-Sender: zsh-workers-request@math.gatech.edu I am heartily sick of being told my stack is unbalanced because the time happens to be 12:08. Based on the following two facts, 1) No valid octal number ever starts 08 or 09 2) 08 and 09 are the only two digit numbers evaluated incorrectly I would like to propose that zstrtol explicitly checks for an 8 or a 9 following the 0 and if there is one evaluates it in decimal. This will mean times can be handled properly --- what I mainly use arithmetic in zsh for anyway --- while real octal numbers won't be affected. Anybody writing scripts for users where this may matter should in any case be stripping leading 0's as a matter of course. If that's a big problem, we should simply remove octal handling. (What's wrong with 8#77 etc. anyway? Isn't this just why ksh introduced that syntax?) *** Src/utils.c.oct Wed Nov 1 11:12:11 1995 --- Src/utils.c Fri Nov 3 09:45:49 1995 *************** *** 1104,1112 **** base = 10; else if (*++s == 'x' || *s == 'X') base = 16, s++; else base = 8; ! if (base <= 10) for (; *s >= '0' && *s < ('0' + base); s++) ret = ret * base + *s - '0'; --- 1104,1114 ---- base = 10; else if (*++s == 'x' || *s == 'X') base = 16, s++; + else if (*s == '8' || *s == '9') + base = 10; else base = 8; ! if (base <= 10) for (; *s >= '0' && *s < ('0' + base); s++) ret = ret * base + *s - '0'; *** Doc/zshmisc.1.oct Sun Oct 29 11:52:06 1995 --- Doc/zshmisc.1 Fri Nov 3 09:46:30 1995 *************** *** 732,739 **** .BR let . Evaluations are performed using .I long ! arithmetic. Constants with a leading 0 are interpreted as octal numbers. ! A leading \fI0x\fP or \fI0X\fP denotes hexadecimal. Otherwise, numbers are of the form [\fIbase\fB#\^\fR]\fIn\^\fP where --- 732,741 ---- .BR let . Evaluations are performed using .I long ! arithmetic. Constants with a leading 0 are interpreted as octal ! numbers, except in the special case that the 0 is immediately followed ! by an 8 or 9 (this allows processing of sections of time strings such ! as "12:08"). A leading \fI0x\fP or \fI0X\fP denotes hexadecimal. Otherwise, numbers are of the form [\fIbase\fB#\^\fR]\fIn\^\fP where -- Peter Stephenson Tel: +49 33762 77366 WWW: http://www.ifh.de/~pws/ Fax: +49 33762 77330 Deutches Electronen-Synchrotron --- Institut fuer Hochenergiephysik Zeuthen DESY-IfH, 15735 Zeuthen, Germany.