summaryrefslogtreecommitdiff
path: root/src/shuf.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/shuf.c')
-rw-r--r--src/shuf.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/shuf.c b/src/shuf.c
index ac1d469c9..4d215ee67 100644
--- a/src/shuf.c
+++ b/src/shuf.c
@@ -129,6 +129,16 @@ input_from_argv (char **operand, int n_operands, char eolbyte)
operand[n_operands] = p;
}
+/* Return the start of the next line after LINE. The current line
+ ends in EOLBYTE, and is guaranteed to end before LINE + N. */
+
+static char *
+next_line (char *line, char eolbyte, size_t n)
+{
+ char *p = memchr (line, eolbyte, n);
+ return p + 1;
+}
+
/* Read data from file IN. Input lines are delimited by EOLBYTE;
silently append a trailing EOLBYTE if the file ends in some other
byte. Store a pointer to the resulting array of lines into *PLINE.
@@ -193,14 +203,14 @@ read_input (FILE *in, char eolbyte, char ***pline)
lim = buf + used;
n_lines = 0;
- for (p = buf; p < lim; p = memchr (p, eolbyte, lim - p) + 1)
+ for (p = buf; p < lim; p = next_line (p, eolbyte, lim - p))
n_lines++;
*pline = line = xnmalloc (n_lines + 1, sizeof *line);
line[0] = p = buf;
for (i = 1; i <= n_lines; i++)
- line[i] = p = memchr (p, eolbyte, lim - p) + 1;
+ line[i] = p = next_line (p, eolbyte, lim - p);
errno = fread_errno;
return n_lines;