Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 5 Jul 2013 17:17:42 GMT
From:      Steffen <sdaoden@gmail.com>
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   bin/180328: awk(1) fails to treat var as integer
Message-ID:  <201307051717.r65HHgLu020241@oldred.freebsd.org>
Resent-Message-ID: <201307051720.r65HK1KM020089@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         180328
>Category:       bin
>Synopsis:       awk(1) fails to treat var as integer
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Fri Jul 05 17:20:01 UTC 2013
>Closed-Date:
>Last-Modified:
>Originator:     Steffen
>Release:        10
>Organization:
>Environment:
FreeBSD fbsd10 10.0-CURRENT FreeBSD 10.0-CURRENT #0: Sun Jun 23 02:55:37 UTC 2013     root@snap.freebsd.org:/usr/obj/usr/src/sys/GENERIC  amd64
>Description:
Note first that this problem also occurs for Mac OS X Snow Leopard and NetBSD current.  I have not yet tested GNU awk.
I use awk(1) to generate test data from Unicode text files.
. i think the best is i show it:

## Input producers

io_unicode_data() {
   < unicode/UnicodeData.txt ${TAWK} '
      BEGIN {FS = ";" ; OFS = ";"}
      # There are no comments in this, but..
      /^[[:space:]]*[^#]+$/ {
         i = $2
         # Ranges must become unrolled, otherwise step on
         if (i !~ /, First>/) {
            $2 = ""
            print
            next
         }

         r1 = sprintf("%d", "0x" $1)
         getline
         r2 = sprintf("%d", "0x" $1)
         $2 = ""
         # This gets around a bug in at least "awk version 20070501" as found
         # on Slow Leopard: there the range F0000-FFFFD, and only that one,
         # will *not* be evaluated unless we do this (once property test came)
         # XXX presumably the type system is a bit weird; check other AWKs!
         sprintf("%X %X", r1, r2)
[
this is it; UnicodeData.txt contains multiple ranges, but only this one will be "omitted" without sprintf(), the while() will simply not execute otherwise.
]
         while (r1 <= r2) {
            $1 = sprintf("%X", r1)
            printf "%s\n", $0
            ++r1
         }
      }
   '
}

>How-To-Repeat:
well..; git clone my S-CText and run `make ucd' with and without the line `sprintf("%X %X", r1, r2)', compare the resulting `test/sa/t_props.dat' files.
>Fix:


>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201307051717.r65HHgLu020241>