tGuess what?  More anonymous unions! - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 1a84af59e08c39200775a68b6af7175a6bcd044e
 (DIR) parent 285b4f85c0dff0aa5019ee93c17d1f8c734eb030
 (HTM) Author: rsc <devnull@localhost>
       Date:   Thu, 25 Mar 2004 23:25:45 +0000
       
       Guess what?  More anonymous unions!
       
       Diffstat:
         M src/cmd/grep/grep.h                 |       4 ++--
         M src/cmd/grep/main.c                 |      18 +++++++++---------
       
       2 files changed, 11 insertions(+), 11 deletions(-)
       ---
 (DIR) diff --git a/src/cmd/grep/grep.h b/src/cmd/grep/grep.h
       t@@ -76,12 +76,12 @@ EXTERN        union
                         * if a line requires multiple reads, we keep shifting
                         * buf down into pre and then do another read into
                         * buf.  so you'll get the last 16-32k of the matching line.
       -                 * if pre were smaller than buf you'd get a suffix of the
       +                 * if h were smaller than buf you'd get a suffix of the
                         * line with a hole cut out.
                         */
                        uchar        pre[16*1024];        /* to save to previous '\n' */
                        uchar        buf[16*1024];        /* input buffer */
       -        };
       +        } u;
        } u;
        
        EXTERN        char        *filename;
 (DIR) diff --git a/src/cmd/grep/main.c b/src/cmd/grep/main.c
       t@@ -115,27 +115,27 @@ search(char *file, int flag)
                eof = 0;
                empty = 1;
                nl = 0;
       -        lp = u.buf;
       +        lp = u.u.buf;
                bol = lp;
        
        loop0:
                n = lp-bol;
       -        if(n > sizeof(u.pre))
       -                n = sizeof(u.pre);
       -        memmove(u.buf-n, bol, n);
       -        bol = u.buf-n;
       -        n = read(fid, u.buf, sizeof(u.buf));
       +        if(n > sizeof(u.u.pre))
       +                n = sizeof(u.u.pre);
       +        memmove(u.u.buf-n, bol, n);
       +        bol = u.u.buf-n;
       +        n = read(fid, u.u.buf, sizeof(u.u.buf));
                /* if file has no final newline, simulate one to emit matches to last line */
                if(n > 0) {
                        empty = 0;
       -                nl = u.buf[n-1]=='\n';
       +                nl = u.u.buf[n-1]=='\n';
                } else {
                        if(n < 0){
                                fprint(2, "grep: read error on %s: %r\n", file);
                                return count != 0;
                        }
                        if(!eof && !nl && !empty) {
       -                        u.buf[0] = '\n';
       +                        u.u.buf[0] = '\n';
                                n = 1;
                                eof = 1;
                        }
       t@@ -152,7 +152,7 @@ loop0:
                        Bflush(&bout);
                        return count != 0;
                }
       -        lp = u.buf;
       +        lp = u.u.buf;
                elp = lp+n;
                if(flag & Iflag)
                        goto loopi;