Message ID | 1655761411-11698-1-git-send-email-sandeen@redhat.com (mailing list archive) |
---|---|
State | Deferred, archived |
Headers | show |
Series | xfs/122: escape %zu in printf with %% not \\% | expand |
On Mon, Jun 20, 2022 at 04:43:31PM -0500, Eric Sandeen wrote: > The standard way to escape % in a printf is with %%; although \\%zu > seems to have worked in awk until recently, an upgrade on Fedora 36 > has started failing: > > awk: cmd. line:1: (FILENAME=- FNR=1) fatal: not enough arguments to satisfy format string > 'printf("sizeof(%s) = \%zu\n", sizeof(%s)); > ' > ^ ran out for this one > Switching the escape to "%%" fixes this for me, and also works > on my very old RHEL7 mcahine. > > Signed-off-by: Eric Sandeen <sandeen@redhat.com> > --- Make sense, thanks for fixing this. Reviewed-by: Zorro Lang <zlang@redhat.com> > tests/xfs/122 | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/tests/xfs/122 b/tests/xfs/122 > index 5200615..18748e6 100755 > --- a/tests/xfs/122 > +++ b/tests/xfs/122 > @@ -186,7 +186,7 @@ egrep '(} *xfs_.*_t|^struct xfs_[a-z0-9_]*$)' |\ > egrep -v -f $tmp.ignore |\ > sed -e 's/^.*}[[:space:]]*//g' -e 's/;.*$//g' -e 's/_t, /_t\n/g' |\ > sort | uniq |\ > -awk '{printf("printf(\"sizeof(%s) = \\%zu\\n\", sizeof(%s));\n", $0, $0);}' |\ > +awk '{printf("printf(\"sizeof(%s) = %%zu\\n\", sizeof(%s));\n", $0, $0);}' |\ > cat >> $cprog > > # > @@ -199,7 +199,7 @@ awk ' > /typedef struct xfs_sb/ { structon = 1; next } > structon && $2 ~ /^sb_/ { sub(/[;,]/,"",$2) > sub(/XFSLABEL_MAX/,"12",$2) > - printf("printf(\"offsetof(xfs_sb_t, %s) = \\%zu\\n\", offsetof(xfs_sb_t, %s));", $2, $2); next} > + printf("printf(\"offsetof(xfs_sb_t, %s) = %%zu\\n\", offsetof(xfs_sb_t, %s));", $2, $2); next} > structon && /}/ { structon = 0; next} > '>>$cprog > > -- > 1.8.3.1 >
diff --git a/tests/xfs/122 b/tests/xfs/122 index 5200615..18748e6 100755 --- a/tests/xfs/122 +++ b/tests/xfs/122 @@ -186,7 +186,7 @@ egrep '(} *xfs_.*_t|^struct xfs_[a-z0-9_]*$)' |\ egrep -v -f $tmp.ignore |\ sed -e 's/^.*}[[:space:]]*//g' -e 's/;.*$//g' -e 's/_t, /_t\n/g' |\ sort | uniq |\ -awk '{printf("printf(\"sizeof(%s) = \\%zu\\n\", sizeof(%s));\n", $0, $0);}' |\ +awk '{printf("printf(\"sizeof(%s) = %%zu\\n\", sizeof(%s));\n", $0, $0);}' |\ cat >> $cprog # @@ -199,7 +199,7 @@ awk ' /typedef struct xfs_sb/ { structon = 1; next } structon && $2 ~ /^sb_/ { sub(/[;,]/,"",$2) sub(/XFSLABEL_MAX/,"12",$2) - printf("printf(\"offsetof(xfs_sb_t, %s) = \\%zu\\n\", offsetof(xfs_sb_t, %s));", $2, $2); next} + printf("printf(\"offsetof(xfs_sb_t, %s) = %%zu\\n\", offsetof(xfs_sb_t, %s));", $2, $2); next} structon && /}/ { structon = 0; next} '>>$cprog
The standard way to escape % in a printf is with %%; although \\%zu seems to have worked in awk until recently, an upgrade on Fedora 36 has started failing: awk: cmd. line:1: (FILENAME=- FNR=1) fatal: not enough arguments to satisfy format string 'printf("sizeof(%s) = \%zu\n", sizeof(%s)); ' ^ ran out for this one Switching the escape to "%%" fixes this for me, and also works on my very old RHEL7 mcahine. Signed-off-by: Eric Sandeen <sandeen@redhat.com> --- tests/xfs/122 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)