[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[2400] 2009-07-07 Pavel Roskin <address@hidden>
From: |
Pavel Roskin |
Subject: |
[2400] 2009-07-07 Pavel Roskin <address@hidden> |
Date: |
Tue, 07 Jul 2009 19:54:19 +0000 |
Revision: 2400
http://svn.sv.gnu.org/viewvc/?view=rev&root=grub&revision=2400
Author: proski
Date: 2009-07-07 19:54:19 +0000 (Tue, 07 Jul 2009)
Log Message:
-----------
2009-07-07 Pavel Roskin <address@hidden>
* lib/arg.c (find_long_option): Remove.
(find_long): Add `len' argument, make `s' const char *.
(grub_arg_parse): Parse long options in place, not in a
temporary buffer.
Modified Paths:
--------------
trunk/grub2/ChangeLog
trunk/grub2/lib/arg.c
Modified: trunk/grub2/ChangeLog
===================================================================
--- trunk/grub2/ChangeLog 2009-07-07 03:05:01 UTC (rev 2399)
+++ trunk/grub2/ChangeLog 2009-07-07 19:54:19 UTC (rev 2400)
@@ -1,3 +1,10 @@
+2009-07-07 Pavel Roskin <address@hidden>
+
+ * lib/arg.c (find_long_option): Remove.
+ (find_long): Add `len' argument, make `s' const char *.
+ (grub_arg_parse): Parse long options in place, not in a
+ temporary buffer.
+
2009-07-06 Pavel Roskin <address@hidden>
* commands/search.c (search_fs): Fix potential NULL pointer
Modified: trunk/grub2/lib/arg.c
===================================================================
--- trunk/grub2/lib/arg.c 2009-07-07 03:05:01 UTC (rev 2399)
+++ trunk/grub2/lib/arg.c 2009-07-07 19:54:19 UTC (rev 2400)
@@ -76,21 +76,8 @@
return found;
}
-static char *
-find_long_option (char *s)
-{
- char *argpos = grub_strchr (s, '=');
-
- if (argpos)
- {
- *argpos = '\0';
- return ++argpos;
- }
- return 0;
-}
-
static struct grub_arg_option *
-find_long (const struct grub_arg_option *options, char *s)
+find_long (const struct grub_arg_option *options, const char *s, int len)
{
struct grub_arg_option *found = 0;
auto struct grub_arg_option *fnd_long (const struct grub_arg_option *opt);
@@ -99,7 +86,8 @@
{
while (opt->doc)
{
- if (opt->longarg && ! grub_strcmp (opt->longarg, s))
+ if (opt->longarg && ! grub_strncmp (opt->longarg, s, len) &&
+ opt->longarg[len] == '\0')
return (struct grub_arg_option *) opt;
opt++;
}
@@ -244,7 +232,7 @@
struct grub_arg_list *usr, char ***args, int *argnum)
{
int curarg;
- char *longarg = 0;
+ int arglen;
int complete = 0;
char **argl = 0;
int num = 0;
@@ -328,14 +316,14 @@
break;
}
- longarg = (char *) grub_strdup (arg);
- if (! longarg)
- goto fail;
+ option = grub_strchr (arg, '=');
+ if (option) {
+ arglen = option - arg - 2;
+ option++;
+ } else
+ arglen = grub_strlen (arg) - 2;
- option = find_long_option (longarg);
- arg = longarg;
-
- opt = find_long (cmd->options, arg + 2);
+ opt = find_long (cmd->options, arg + 2, arglen);
if (! opt)
{
grub_error (GRUB_ERR_BAD_ARGUMENT, "Unknown argument `%s'\n",
arg);
@@ -402,8 +390,6 @@
if (parse_option (cmd, opt->shortarg, 0, usr) || grub_errno)
goto fail;
}
- grub_free (longarg);
- longarg = 0;
}
complete = 1;
@@ -412,7 +398,5 @@
*argnum = num;
fail:
- grub_free (longarg);
-
return complete;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [2400] 2009-07-07 Pavel Roskin <address@hidden>,
Pavel Roskin <=