Blame SOURCES/0183-grub-core-script-execute.c-gettext_append-Remove-nes.patch

f96e0b
From fd9da4fd011c2df3b6c78795fe3ffe023e571db9 Mon Sep 17 00:00:00 2001
f96e0b
From: Vladimir 'phcoder' Serbinenko <phcoder@gmail.com>
f96e0b
Date: Sat, 2 Mar 2013 12:17:52 +0100
f96e0b
Subject: [PATCH 183/482] 	* grub-core/script/execute.c (gettext_append):
f96e0b
 Remove nested functions.
f96e0b
f96e0b
---
f96e0b
 ChangeLog                  |   9 +++
f96e0b
 grub-core/script/execute.c | 180 ++++++++++++++++++++++++---------------------
f96e0b
 2 files changed, 107 insertions(+), 82 deletions(-)
f96e0b
f96e0b
diff --git a/ChangeLog b/ChangeLog
f96e0b
index ddd903a..07318d8 100644
f96e0b
--- a/ChangeLog
f96e0b
+++ b/ChangeLog
f96e0b
@@ -1,5 +1,14 @@
f96e0b
 2013-03-02  Vladimir Serbinenko  <phcoder@gmail.com>
f96e0b
 
f96e0b
+	* grub-core/script/execute.c (gettext_append): Remove nested functions.
f96e0b
+
f96e0b
+2013-03-02  Vladimir Serbinenko  <phcoder@gmail.com>
f96e0b
+
f96e0b
+	* grub-core/normal/charset.c (grub_bidi_logical_to_visual): Add
f96e0b
+	hook pass-through parameter. All users updated and unnested.
f96e0b
+
f96e0b
+2013-03-02  Vladimir Serbinenko  <phcoder@gmail.com>
f96e0b
+
f96e0b
 	* grub-core/commands/loadenv.c (grub_cmd_list_env): Move print_var
f96e0b
 	out of its parent.
f96e0b
 
f96e0b
diff --git a/grub-core/script/execute.c b/grub-core/script/execute.c
f96e0b
index 6619c2e..d6a2c78 100644
f96e0b
--- a/grub-core/script/execute.c
f96e0b
+++ b/grub-core/script/execute.c
f96e0b
@@ -372,10 +372,19 @@ grub_script_env_set (const char *name, const char *val)
f96e0b
   return grub_env_set (name, val);
f96e0b
 }
f96e0b
 
f96e0b
+struct gettext_context
f96e0b
+{
f96e0b
+  char **allowed_strings;
f96e0b
+  grub_size_t nallowed_strings;
f96e0b
+  grub_size_t additional_len;
f96e0b
+};
f96e0b
+
f96e0b
 static int
f96e0b
 parse_string (const char *str,
f96e0b
-	      int (*hook) (const char *var, grub_size_t varlen),
f96e0b
-	      char **put)
f96e0b
+	      int (*hook) (const char *var, grub_size_t varlen,
f96e0b
+			   char **ptr, struct gettext_context *ctx),
f96e0b
+	      struct gettext_context *ctx,
f96e0b
+	      char *put)
f96e0b
 {
f96e0b
   const char *ptr;
f96e0b
   int escaped = 0;
f96e0b
@@ -387,7 +396,7 @@ parse_string (const char *str,
f96e0b
       case '\\':
f96e0b
 	escaped = !escaped;
f96e0b
 	if (!escaped && put)
f96e0b
-	  *((*put)++) = '\\';
f96e0b
+	  *(put++) = '\\';
f96e0b
 	ptr++;
f96e0b
 	break;
f96e0b
       case '$':
f96e0b
@@ -395,7 +404,7 @@ parse_string (const char *str,
f96e0b
 	  {
f96e0b
 	    escaped = 0;
f96e0b
 	    if (put)
f96e0b
-	      *((*put)++) = *ptr;
f96e0b
+	      *(put++) = *ptr;
f96e0b
 	    ptr++;
f96e0b
 	    break;
f96e0b
 	  }
f96e0b
@@ -409,7 +418,7 @@ parse_string (const char *str,
f96e0b
 	      ptr = grub_strchr (optr, '}');
f96e0b
 	      if (!ptr)
f96e0b
 		break;
f96e0b
-	      if (hook (optr, ptr - optr))
f96e0b
+	      if (hook (optr, ptr - optr, &put, ctx))
f96e0b
 		return 1;
f96e0b
 	      ptr++;
f96e0b
 	      break;
f96e0b
@@ -418,7 +427,7 @@ parse_string (const char *str,
f96e0b
 	    optr = ptr;
f96e0b
 	    while (*ptr >= '0' && *ptr <= '9')
f96e0b
 	      ptr++;
f96e0b
-	    if (hook (optr, ptr - optr))
f96e0b
+	    if (hook (optr, ptr - optr, &put, ctx))
f96e0b
 	      return 1;
f96e0b
 	    break;
f96e0b
 	  case 'a' ... 'z':
f96e0b
@@ -430,129 +439,136 @@ parse_string (const char *str,
f96e0b
 		   || (*ptr >= 'A' && *ptr <= 'Z')
f96e0b
 		   || *ptr == '_')
f96e0b
 	      ptr++;
f96e0b
-	    if (hook (optr, ptr - optr))
f96e0b
+	    if (hook (optr, ptr - optr, &put, ctx))
f96e0b
 	      return 1;
f96e0b
 	    break;
f96e0b
 	  case '?':
f96e0b
 	  case '#':
f96e0b
-	    if (hook (ptr, 1))
f96e0b
+	    if (hook (ptr, 1, &put, ctx))
f96e0b
 	      return 1;
f96e0b
 	    ptr++;
f96e0b
 	    break;
f96e0b
 	  default:
f96e0b
 	    if (put)
f96e0b
-	      *((*put)++) = '$';
f96e0b
+	      *(put++) = '$';
f96e0b
 	  }
f96e0b
 	break;
f96e0b
       default:
f96e0b
 	if (escaped && put)
f96e0b
-	  *((*put)++) = '\\';
f96e0b
+	  *(put++) = '\\';
f96e0b
 	escaped = 0;
f96e0b
 	if (put)
f96e0b
-	  *((*put)++) = *ptr;
f96e0b
+	  *(put++) = *ptr;
f96e0b
 	ptr++;
f96e0b
 	break;
f96e0b
       }
f96e0b
+  if (put)
f96e0b
+    *(put++) = 0;
f96e0b
   return 0;
f96e0b
 }
f96e0b
 
f96e0b
 static int
f96e0b
-gettext_append (struct grub_script_argv *result, const char *orig_str)
f96e0b
+gettext_putvar (const char *str, grub_size_t len,
f96e0b
+		char **ptr, struct gettext_context *ctx)
f96e0b
 {
f96e0b
-  const char *template;
f96e0b
-  char *res = 0, *ptr;
f96e0b
-  char **allowed_strings;
f96e0b
-  grub_size_t nallowed_strings = 0;
f96e0b
-  grub_size_t additional_len = 1;
f96e0b
-  int rval = 1;
f96e0b
-  const char *iptr;
f96e0b
+  const char *var;
f96e0b
+  grub_size_t i;
f96e0b
 
f96e0b
-  auto int save_allow (const char *str, grub_size_t len);
f96e0b
-  int save_allow (const char *str, grub_size_t len)
f96e0b
-  {
f96e0b
-    allowed_strings[nallowed_strings++] = grub_strndup (str, len);
f96e0b
-    if (!allowed_strings[nallowed_strings - 1])
f96e0b
-      return 1;
f96e0b
+  for (i = 0; i < ctx->nallowed_strings; i++)
f96e0b
+    if (grub_strncmp (ctx->allowed_strings[i], str, len) == 0
f96e0b
+	&& ctx->allowed_strings[i][len] == 0)
f96e0b
+      {
f96e0b
+	break;
f96e0b
+      }
f96e0b
+  if (i == ctx->nallowed_strings)
f96e0b
     return 0;
f96e0b
-  }
f96e0b
-
f96e0b
-  auto int getlen (const char *str, grub_size_t len);
f96e0b
-  int getlen (const char *str, grub_size_t len)
f96e0b
-  {
f96e0b
-    const char *var;
f96e0b
-    grub_size_t i;
f96e0b
 
f96e0b
-    for (i = 0; i < nallowed_strings; i++)
f96e0b
-      if (grub_strncmp (allowed_strings[i], str, len) == 0
f96e0b
-	  && allowed_strings[i][len] == 0)
f96e0b
-	break;
f96e0b
-    if (i == nallowed_strings)
f96e0b
+  /* Enough for any number.  */
f96e0b
+  if (len == 1 && str[0] == '#')
f96e0b
+    {
f96e0b
+      grub_snprintf (*ptr, 30, "%u", scope->argv.argc);
f96e0b
+      *ptr += grub_strlen (*ptr);
f96e0b
       return 0;
f96e0b
+    }
f96e0b
+  var = grub_env_get (ctx->allowed_strings[i]);
f96e0b
+  if (var)
f96e0b
+    *ptr = grub_stpcpy (*ptr, var);
f96e0b
+  return 0;
f96e0b
+}
f96e0b
 
f96e0b
-    /* Enough for any number.  */
f96e0b
-    if (len == 1 && str[0] == '#')
f96e0b
-      {
f96e0b
-	additional_len += 30;
f96e0b
-	return 0;
f96e0b
-      }
f96e0b
-    var = grub_env_get (allowed_strings[i]);
f96e0b
-    if (var)
f96e0b
-      additional_len += grub_strlen (var);
f96e0b
-    return 0;
f96e0b
-  }
f96e0b
+static int
f96e0b
+gettext_save_allow (const char *str, grub_size_t len,
f96e0b
+		    char **ptr __attribute__ ((unused)),
f96e0b
+		    struct gettext_context *ctx)
f96e0b
+{
f96e0b
+  ctx->allowed_strings[ctx->nallowed_strings++] = grub_strndup (str, len);
f96e0b
+  if (!ctx->allowed_strings[ctx->nallowed_strings - 1])
f96e0b
+    return 1;
f96e0b
+  return 0;
f96e0b
+}
f96e0b
 
f96e0b
-  auto int putvar (const char *str, grub_size_t len);
f96e0b
-  int putvar (const char *str, grub_size_t len)
f96e0b
-  {
f96e0b
-    const char *var;
f96e0b
-    grub_size_t i;
f96e0b
+static int
f96e0b
+gettext_getlen (const char *str, grub_size_t len,
f96e0b
+		char **ptr __attribute__ ((unused)),
f96e0b
+		struct gettext_context *ctx)
f96e0b
+{
f96e0b
+  const char *var;
f96e0b
+  grub_size_t i;
f96e0b
 
f96e0b
-    for (i = 0; i < nallowed_strings; i++)
f96e0b
-      if (grub_strncmp (allowed_strings[i], str, len) == 0
f96e0b
-	  && allowed_strings[i][len] == 0)
f96e0b
-       	{
f96e0b
-	  break;
f96e0b
-	}
f96e0b
-    if (i == nallowed_strings)
f96e0b
+  for (i = 0; i < ctx->nallowed_strings; i++)
f96e0b
+    if (grub_strncmp (ctx->allowed_strings[i], str, len) == 0
f96e0b
+	&& ctx->allowed_strings[i][len] == 0)
f96e0b
+      break;
f96e0b
+  if (i == ctx->nallowed_strings)
f96e0b
+    return 0;
f96e0b
+
f96e0b
+  /* Enough for any number.  */
f96e0b
+  if (len == 1 && str[0] == '#')
f96e0b
+    {
f96e0b
+      ctx->additional_len += 30;
f96e0b
       return 0;
f96e0b
+    }
f96e0b
+  var = grub_env_get (ctx->allowed_strings[i]);
f96e0b
+  if (var)
f96e0b
+    ctx->additional_len += grub_strlen (var);
f96e0b
+  return 0;
f96e0b
+}
f96e0b
 
f96e0b
-    /* Enough for any number.  */
f96e0b
-    if (len == 1 && str[0] == '#')
f96e0b
-      {
f96e0b
-	grub_snprintf (ptr, 30, "%u", scope->argv.argc);
f96e0b
-	ptr += grub_strlen (ptr);
f96e0b
-	return 0;
f96e0b
-      }
f96e0b
-    var = grub_env_get (allowed_strings[i]);
f96e0b
-    if (var)
f96e0b
-      ptr = grub_stpcpy (ptr, var);
f96e0b
-    return 0;
f96e0b
-  }
f96e0b
+static int
f96e0b
+gettext_append (struct grub_script_argv *result, const char *orig_str)
f96e0b
+{
f96e0b
+  const char *template;
f96e0b
+  char *res = 0;
f96e0b
+  struct gettext_context ctx = {
f96e0b
+    .allowed_strings = 0,
f96e0b
+    .nallowed_strings = 0,
f96e0b
+    .additional_len = 1
f96e0b
+  };
f96e0b
+  int rval = 1;
f96e0b
+  const char *iptr;
f96e0b
 
f96e0b
   grub_size_t dollar_cnt = 0;
f96e0b
 
f96e0b
   for (iptr = orig_str; *iptr; iptr++)
f96e0b
     if (*iptr == '$')
f96e0b
       dollar_cnt++;
f96e0b
-  allowed_strings = grub_malloc (sizeof (allowed_strings[0]) * dollar_cnt);
f96e0b
+  ctx.allowed_strings = grub_malloc (sizeof (ctx.allowed_strings[0]) * dollar_cnt);
f96e0b
 
f96e0b
-  if (parse_string (orig_str, save_allow, 0))
f96e0b
+  if (parse_string (orig_str, gettext_save_allow, &ctx, 0))
f96e0b
     goto fail;
f96e0b
 
f96e0b
   template = _(orig_str);
f96e0b
 
f96e0b
-  if (parse_string (template, getlen, 0))
f96e0b
+  if (parse_string (template, gettext_getlen, &ctx, 0))
f96e0b
     goto fail;
f96e0b
 
f96e0b
-  res = grub_malloc (grub_strlen (template) + additional_len);
f96e0b
+  res = grub_malloc (grub_strlen (template) + ctx.additional_len);
f96e0b
   if (!res)
f96e0b
     goto fail;
f96e0b
-  ptr = res;
f96e0b
 
f96e0b
-  if (parse_string (template, putvar, &ptr))
f96e0b
+  if (parse_string (template, gettext_putvar, &ctx, res))
f96e0b
     goto fail;
f96e0b
 
f96e0b
-  *ptr = 0;
f96e0b
   char *escaped = 0;
f96e0b
   escaped = wildcard_escape (res);
f96e0b
   if (grub_script_argv_append (result, escaped, grub_strlen (escaped)))
f96e0b
@@ -567,10 +583,10 @@ gettext_append (struct grub_script_argv *result, const char *orig_str)
f96e0b
   grub_free (res);
f96e0b
   {
f96e0b
     grub_size_t i;
f96e0b
-    for (i = 0; i < nallowed_strings; i++)
f96e0b
-      grub_free (allowed_strings[i]);
f96e0b
+    for (i = 0; i < ctx.nallowed_strings; i++)
f96e0b
+      grub_free (ctx.allowed_strings[i]);
f96e0b
   }
f96e0b
-  grub_free (allowed_strings);
f96e0b
+  grub_free (ctx.allowed_strings);
f96e0b
   return rval;
f96e0b
 }
f96e0b
 
f96e0b
-- 
f96e0b
1.8.2.1
f96e0b