Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.bin/sed PR/49109: Jeremie Le Hen: fix sed relative addre...



details:   https://anonhg.NetBSD.org/src/rev/cc23c581a08c
branches:  trunk
changeset: 331513:cc23c581a08c
user:      christos <christos%NetBSD.org@localhost>
date:      Wed Aug 13 11:35:34 2014 +0000

description:
PR/49109: Jeremie Le Hen: fix sed relative addressin (1,+N)
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=192108
http://svnweb.freebsd.org/base?view=revision&revision=269302
XXX: pullup 7.

diffstat:

 usr.bin/sed/process.c |  48 ++++++++++++++++++++++++++++--------------------
 1 files changed, 28 insertions(+), 20 deletions(-)

diffs (69 lines):

diff -r 6740fe59afa0 -r cc23c581a08c usr.bin/sed/process.c
--- a/usr.bin/sed/process.c     Wed Aug 13 10:56:35 2014 +0000
+++ b/usr.bin/sed/process.c     Wed Aug 13 11:35:34 2014 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: process.c,v 1.45 2014/06/26 02:14:32 christos Exp $    */
+/*     $NetBSD: process.c,v 1.46 2014/08/13 11:35:34 christos Exp $    */
 
 /*-
  * Copyright (c) 1992 Diomidis Spinellis.
@@ -38,7 +38,7 @@
 #endif
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: process.c,v 1.45 2014/06/26 02:14:32 christos Exp $");
+__RCSID("$NetBSD: process.c,v 1.46 2014/08/13 11:35:34 christos Exp $");
 #ifdef __FBSDID
 __FBSDID("$FreeBSD: head/usr.bin/sed/process.c 192732 2009-05-25 06:45:33Z brian $");
 #endif
@@ -295,24 +295,32 @@
                r = 1;
        else if (cp->a2)
                if (cp->startline > 0) {
-                       if (MATCH(cp->a2)) {
-                               cp->startline = 0;
-                               lastaddr = 1;
-                               r = 1;
-                       } else if (linenum - cp->startline <= cp->a2->u.l)
-                               r = 1;
-                       else if ((cp->a2->type == AT_LINE &&
-                                  linenum > cp->a2->u.l) ||
-                                  (cp->a2->type == AT_RELLINE &&
-                                  linenum - cp->startline > cp->a2->u.l)) {
-                               /*
-                                * We missed the 2nd address due to a branch,
-                                * so just close the range and return false.
-                                */
-                               cp->startline = 0;
-                               r = 0;
-                       } else
-                               r = 1;
+                       switch (cp->a2->type) {
+                       case AT_RELLINE:
+                               if (linenum - cp->startline <= cp->a2->u.l)
+                                       r = 1;
+                               else {
+                                       cp->startline = 0;
+                                       r = 0;
+                               }
+                               break;
+                       default:
+                               if (MATCH(cp->a2)) {
+                                       cp->startline = 0;
+                                       lastaddr = 1;
+                                       r = 1;
+                               } else if (cp->a2->type == AT_LINE &&
+                                   linenum > cp->a2->u.l) {
+                                       /*
+                                        * We missed the 2nd address due to a
+                                        * branch, so just close the range and
+                                        * return false.
+                                        */
+                                       cp->startline = 0;
+                                       r = 0;
+                               } else
+                                       r = 1;
+                       }
                } else if (cp->a1 && MATCH(cp->a1)) {
                        /*
                         * If the second address is a number less than or



Home | Main Index | Thread Index | Old Index