0129-kern-parser-Introduce-terminate_arg-helper.patch 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. From 3d157bbd06506b170fde5ec23980c4bf9f7660e2 Mon Sep 17 00:00:00 2001
  2. From: Chris Coulson <chris.coulson@canonical.com>
  3. Date: Thu, 7 Jan 2021 19:53:55 +0000
  4. Subject: [PATCH] kern/parser: Introduce terminate_arg() helper
  5. process_char() and grub_parser_split_cmdline() use similar code for
  6. terminating the most recent argument. Add a helper function for this.
  7. Signed-off-by: Chris Coulson <chris.coulson@canonical.com>
  8. Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
  9. Signed-off-by: Stefan Sørensen <stefan.sorensen@spectralink.com>
  10. ---
  11. grub-core/kern/parser.c | 23 +++++++++++++----------
  12. 1 file changed, 13 insertions(+), 10 deletions(-)
  13. diff --git a/grub-core/kern/parser.c b/grub-core/kern/parser.c
  14. index 0d3582b..572c670 100644
  15. --- a/grub-core/kern/parser.c
  16. +++ b/grub-core/kern/parser.c
  17. @@ -129,6 +129,16 @@ add_var (char *varname, char **bp, char **vp,
  18. *((*bp)++) = *val;
  19. }
  20. +static void
  21. +terminate_arg (char *buffer, char **bp, int *argc)
  22. +{
  23. + if (*bp != buffer && *((*bp) - 1) != '\0')
  24. + {
  25. + *((*bp)++) = '\0';
  26. + (*argc)++;
  27. + }
  28. +}
  29. +
  30. static grub_err_t
  31. process_char (char c, char *buffer, char **bp, char *varname, char **vp,
  32. grub_parser_state_t state, int *argc,
  33. @@ -157,11 +167,7 @@ process_char (char c, char *buffer, char **bp, char *varname, char **vp,
  34. * Don't add more than one argument if multiple
  35. * spaces are used.
  36. */
  37. - if (*bp != buffer && *((*bp) - 1) != '\0')
  38. - {
  39. - *((*bp)++) = '\0';
  40. - (*argc)++;
  41. - }
  42. + terminate_arg (buffer, bp, argc);
  43. }
  44. else if (use)
  45. *((*bp)++) = use;
  46. @@ -232,11 +238,8 @@ grub_parser_split_cmdline (const char *cmdline,
  47. variable. */
  48. add_var (varname, &bp, &vp, state, GRUB_PARSER_STATE_TEXT);
  49. - if (bp != buffer && *(bp - 1))
  50. - {
  51. - *(bp++) = '\0';
  52. - (*argc)++;
  53. - }
  54. + /* Ensure that the last argument is terminated. */
  55. + terminate_arg (buffer, &bp, argc);
  56. /* If there are no args, then we're done. */
  57. if (!*argc)
  58. --
  59. 2.14.2