]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
lxc_clone.c: Allow size subfixes for -L parameter
authorzoolook <nbensa+lxcusers@gmail.com>
Thu, 11 Jul 2013 23:38:02 +0000 (20:38 -0300)
committerSerge Hallyn <serge.hallyn@ubuntu.com>
Fri, 12 Jul 2013 15:48:29 +0000 (10:48 -0500)
lxc-clone ignores size subfixes (K, M, G) when using -L parameter. The
following is a quick patch to allow, for example, lxc-clone -L 10G.

Signed-off-by: Norberto Bensa <nbensa@gmail.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
src/lxc/lxc_clone.c

index b29b6217d998b43887918ca8d65abebaec439d0c..75ef1bd325611471b1d98bf545866bdf6f1e2c0e 100644 (file)
@@ -6,6 +6,7 @@
 #include <sys/wait.h>
 #include <stdlib.h>
 #include <errno.h>
+#include <ctype.h>
 
 #include "log.h"
 #include "config.h"
 
 lxc_log_define(lxc_clone, lxc);
 
+static unsigned long get_fssize(char *s)
+{
+       unsigned long ret;
+       char *end;
+
+       ret = strtoul(s, &end, 0);
+       if (end == s)
+               return 0;
+       while (isblank(*end))
+               end++;
+       if (!(*end))
+               return ret;
+       if (*end == 'g' || *end == 'G')
+               ret *= 1000000000;
+       else if (*end == 'm' || *end == 'M')
+               ret *= 1000000;
+       else if (*end == 'k' || *end == 'K')
+               ret *= 1000;
+       return ret;
+}
+
 void usage(const char *me)
 {
        printf("Usage: %s [-s] [-B backingstore] [-L size] [-K] [-M] [-H]\n", me);
@@ -73,7 +95,7 @@ int main(int argc, char *argv[])
                switch (c) {
                case 's': snapshot = 1; break;
                case 'B': bdevtype = optarg; break;
-               case 'L': newsize = atol(optarg); break;
+               case 'L': newsize = get_fssize(optarg); break;
                case 'o': orig = optarg; break;
                case 'n': new = optarg; break;
                case 'v': vgname = optarg; break;