summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Youngman <jay@gnu.org>2011-06-25 18:13:26 +0100
committerJames Youngman <jay@gnu.org>2011-06-29 09:50:25 +0100
commitffd4980a0de2c6791dfe50b4e8b6229e29f27d32 (patch)
tree509cb1e5a6adef26b95badeaa41aa795db41504d
parentfa84607eb8e1c29ca9de7c3f46e7e2e57f7c5985 (diff)
downloadfindutils-ffd4980a0de2c6791dfe50b4e8b6229e29f27d32.tar.gz
Separate out the handling of \c.
* find/print.c (insert_fprintf): Deal with \c as a special case.
-rw-r--r--ChangeLog3
-rw-r--r--find/print.c27
2 files changed, 19 insertions, 11 deletions
diff --git a/ChangeLog b/ChangeLog
index bbec4355..bd4b7e7e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
2011-06-25 James Youngman <jay@gnu.org>
+ Separate out the handling of \c.
+ * find/print.c (insert_fprintf): Deal with \c as a special case.
+
Remove some redundant continue statements.
* find/print.c (insert_fprintf): Remove a pair of redundant
'continue' statements.
diff --git a/find/print.c b/find/print.c
index 7270b94f..0d53bac6 100644
--- a/find/print.c
+++ b/find/print.c
@@ -239,13 +239,22 @@ insert_fprintf (struct format_val *vec,
for (fmt_editpos = segstart; *fmt_editpos; fmt_editpos++)
{
- if (*fmt_editpos == '\\')
+ if (fmt_editpos[0] == '\\' && fmt_editpos[1] == 'c')
{
- fmt_inpos = fmt_editpos + 1;
- if (*fmt_inpos >= '0' && *fmt_inpos <= '7')
+ make_segment (segmentp, segstart, fmt_editpos - segstart,
+ KIND_STOP, 0, 0,
+ our_pred);
+ if (our_pred->need_stat && (our_pred->p_cost < NeedsStatInfo))
+ our_pred->p_cost = NeedsStatInfo;
+ return true;
+ }
+ else if (*fmt_editpos == '\\')
+ {
+ if (fmt_editpos[1] >= '0' && fmt_editpos[1] <= '7')
{
register int n, i;
+ fmt_inpos = fmt_editpos + 1;
for (i = n = 0; i < 3 && (*fmt_inpos >= '0' && *fmt_inpos <= '7');
i++, fmt_inpos++)
n = 8 * n + *fmt_inpos - '0';
@@ -254,21 +263,15 @@ insert_fprintf (struct format_val *vec,
}
else
{
+ fmt_inpos = fmt_editpos + 1;
switch (*fmt_inpos)
{
case 'a':
- *fmt_editpos = 7;
+ *fmt_editpos = '\a';
break;
case 'b':
*fmt_editpos = '\b';
break;
- case 'c':
- make_segment (segmentp, segstart, fmt_editpos - segstart,
- KIND_STOP, 0, 0,
- our_pred);
- if (our_pred->need_stat && (our_pred->p_cost < NeedsStatInfo))
- our_pred->p_cost = NeedsStatInfo;
- return true;
case 'f':
*fmt_editpos = '\f';
break;
@@ -290,6 +293,7 @@ insert_fprintf (struct format_val *vec,
default:
error (0, 0,
_("warning: unrecognized escape `\\%c'"), *fmt_inpos);
+
fmt_editpos++;
continue;
}
@@ -1175,6 +1179,7 @@ do_fprintf (struct format_val *dest,
}
break;
+ case 0:
case '%':
checked_fprintf (dest, segment->text);
break;