diff mbox series

xfs/122: escape %zu in printf with %% not \\%

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

Commit Message

Eric Sandeen June 20, 2022, 9:43 p.m. UTC
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(-)

Comments

Zorro Lang June 21, 2022, 4:27 a.m. UTC | #1
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 mbox series

Patch

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