From efa61e1e3cbae8c4ad6d943c8774c487fc2deaac Mon Sep 17 00:00:00 2001
From: Cojocaru Alexandru <xojoc@gmx.com>
Date: Fri, 26 Apr 2013 22:39:36 +0000
Subject: [PATCH] cut: `next_field' new function

Increment both `field_idx' and `current_rp',
checking at the same time for array boundaries.
---
 src/cut.c | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/src/cut.c b/src/cut.c
index b42b405..753512e 100644
--- a/src/cut.c
+++ b/src/cut.c
@@ -496,6 +496,15 @@ cut_bytes (FILE *stream)
     }
 }
 
+/* Add one to `field_idx' and increment `current_rp'. */
+static void
+next_field (size_t *field_idx)
+{
+	++*field_idx;
+    if ((*field_idx > current_rp->hi) && (current_rp < rp + n_rp - 1))
+            ++current_rp;
+}
+
 /* Read from stream STREAM, printing to standard output any selected fields.  */
 
 static void
@@ -573,7 +582,7 @@ cut_fields (FILE *stream)
               fwrite (field_1_buffer, sizeof (char), n_bytes - 1, stdout);
               found_any_selected_field = true;
             }
-          field_idx++;
+          next_field (&field_idx);
         }
 
       int prev_c = c;
@@ -616,11 +625,7 @@ cut_fields (FILE *stream)
           found_any_selected_field = false;
         }
       else if (c == delim)
-        {
-          field_idx++;
-          if ((field_idx > current_rp->hi) && (current_rp < rp + n_rp - 1))
-            current_rp++;
-        }
+        next_field (&field_idx);
     }
 }
 
-- 
1.8.2.1

