diff options
-rw-r--r-- | tests/commands.sh | 1 | ||||
-rw-r--r-- | tests/expected/hexdump/empty-format | 1 | ||||
-rwxr-xr-x | tests/ts/hexdump/empty-format | 26 | ||||
-rw-r--r-- | text-utils/parse.c | 16 |
4 files changed, 37 insertions, 7 deletions
diff --git a/tests/commands.sh b/tests/commands.sh index db1d4ac6b..367209548 100644 --- a/tests/commands.sh +++ b/tests/commands.sh @@ -62,3 +62,4 @@ TS_CMD_FINDMNT=${TS_CMD_FINDMNT-"$top_builddir/findmnt"} TS_CMD_FDISK=${TS_CMD_FDISK-"$top_builddir/fdisk"} +TS_CMD_HEXDUMP=${TS_CMD_HEXDUMP-"$top_builddir/hexdump"} diff --git a/tests/expected/hexdump/empty-format b/tests/expected/hexdump/empty-format new file mode 100644 index 000000000..9d607966b --- /dev/null +++ b/tests/expected/hexdump/empty-format @@ -0,0 +1 @@ +11
\ No newline at end of file diff --git a/tests/ts/hexdump/empty-format b/tests/ts/hexdump/empty-format new file mode 100755 index 000000000..4a3e528cf --- /dev/null +++ b/tests/ts/hexdump/empty-format @@ -0,0 +1,26 @@ +#!/bin/bash + +# This file is part of util-linux. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This file is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +TS_TOPDIR="$(dirname $0)/../.." +TS_DESC="format-strings" + +. $TS_TOPDIR/functions.sh +ts_init "$*" + +INPUT=$(printf \\1) +$TS_CMD_HEXDUMP -n1 -ve '2 "" "%x"' <<< $INPUT 2>&1 >> $TS_OUTPUT + +$TS_CMD_HEXDUMP -n1 -ve '4 "%x"' -e '2 ""' <<< $INPUT 2>&1 >> $TS_OUTPUT + +ts_finalize diff --git a/text-utils/parse.c b/text-utils/parse.c index 5f1e2bda7..bd9696108 100644 --- a/text-utils/parse.c +++ b/text-utils/parse.c @@ -421,13 +421,15 @@ isint2: switch(fu->bcnt) { !(fu->flags&F_SETREP) && fu->bcnt) fu->reps += (blocksize - fs->bcnt) / fu->bcnt; if (fu->reps > 1) { - for (pr = fu->nextpr;; pr = pr->nextpr) - if (!pr->nextpr) - break; - for (p1 = pr->fmt, p2 = NULL; *p1; ++p1) - p2 = isspace((unsigned char)*p1) ? p1 : NULL; - if (p2) - pr->nospace = p2; + if (fu->nextpr) { + for (pr = fu->nextpr; ; pr = pr->nextpr) + if (!pr->nextpr) + break; + for (p1 = pr->fmt, p2 = NULL; *p1; ++p1) + p2 = isspace((unsigned char)*p1) ? p1 : NULL; + if (p2) + pr->nospace = p2; + } } } } |