summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Teigland <teigland@redhat.com>2015-06-05 15:15:45 -0500
committerDavid Teigland <teigland@redhat.com>2015-06-15 16:50:56 -0500
commit46af858bd8236cb926c3b3cdc15e0ecd3350626c (patch)
treea6f1e4eea5205ff98b52d32dd6ec36d336f88be5
parentb7287ea3642f26098aaafcf8ff7b251ba39ae2c1 (diff)
downloadlvm2-46af858bd8236cb926c3b3cdc15e0ecd3350626c.tar.gz
new dehyphenation
avoid malloc/free entirely
-rw-r--r--tools/lvm.c73
1 files changed, 20 insertions, 53 deletions
diff --git a/tools/lvm.c b/tools/lvm.c
index 1700683c2..00cd16f6a 100644
--- a/tools/lvm.c
+++ b/tools/lvm.c
@@ -16,66 +16,33 @@
#include "tools.h"
#include "lvm2cmdline.h"
-#if 0
-static char *str_dup_no_mid_hyphen(char *arg)
-{
- size_t len = strlen(arg) + 1;
- char *arg_new;
- int i, i_new;
-
- if (arg[0] == '-' && arg[1] == '-') {
- if (!(arg_new = dm_zalloc(len)))
- return arg;
-
- arg_new[0] = '-';
- arg_new[1] = '-';
-
- for (i = 2, i_new = 2; i < len; i++) {
- if (arg[i] == '-')
- continue;
- arg_new[i_new] = arg[i];
- i_new++;
- }
-
- return arg_new;
- } else {
- return arg;
- }
-}
-
-/* If allocation fails, just use the args provided in the original argv. */
+#define MAX_ARG_LEN 64
int main(int argc, char **argv)
{
- char **argv_new;
- int ret;
- int i;
-
- if (!(argv_new = dm_zalloc((argc + 1) * sizeof(char *)))) {
- argv_new = argv;
- goto run;
- }
-
- argv_new[0] = argv[0];
-
- for (i = 1; i < argc; i++)
- argv_new[i] = str_dup_no_mid_hyphen(argv[i]);
-run:
- ret = lvm2_main(argc, argv_new);
+ char arg_new[MAX_ARG_LEN];
+ char *arg;
+ int i, j, j_new;
for (i = 1; i < argc; i++) {
- if (argv_new[i] != argv[i])
- dm_free(argv_new[i]);
- }
- if (argv_new != argv)
- dm_free(argv_new);
+ arg = argv[i];
+
+ if (arg[0] == '-' && arg[1] == '-' && strlen(arg) < MAX_ARG_LEN) {
+ memset(arg_new, 0, sizeof(arg_new));
+ arg_new[0] = '-';
+ arg_new[1] = '-';
+
+ for (j = 2, j_new = 2; j < strlen(arg) + 1; j++) {
+ if (arg[j] == '-')
+ continue;
+ arg_new[j_new] = arg[j];
+ j_new++;
+ }
- return ret;
-}
-#endif
+ memcpy(argv[i], arg_new, strlen(arg_new) + 1);
+ }
+ }
-int main(int argc, char **argv)
-{
return lvm2_main(argc, argv);
}