]> sourceware.org Git - lvm2.git/commitdiff
Handle decimal digits with --units instead of ignoring them silently.
authorAlasdair Kergon <agk@redhat.com>
Fri, 18 Feb 2011 23:09:55 +0000 (23:09 +0000)
committerAlasdair Kergon <agk@redhat.com>
Fri, 18 Feb 2011 23:09:55 +0000 (23:09 +0000)
Fix remaining warnings and compile with -Wpointer-arith.

WHATS_NEW
lib/device/dev-io.c
lib/device/device.h
lib/display/display.c
libdm/ioctl/libdm-iface.c
libdm/libdm-report.c
make.tmpl.in

index 867f3878174a4f06fd5ff0fd7c1399b896eb8d04..962c37ae828bcf9259422350a4471bff4b543f0c 100644 (file)
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,7 @@
 Version 2.02.85 - 
 ===================================
+  Handle decimal digits with --units instead of ignoring them silently.
+  Fix remaining warnings and compile with -Wpointer-arith.
   Fix gcc warnings for unused variables.
   Add stack backtraces for error paths in process_each_lv().
   Fixing some const cast gcc warnings in the code.
index f4f8578a41491160bd4bf8a7e39d10da568b2c56..887d732cc39309dc9c9ed2219840defc835f0234 100644 (file)
@@ -57,7 +57,7 @@ static DM_LIST_INIT(_open_devices);
  * The standard io loop that keeps submitting an io until it's
  * all gone.
  *---------------------------------------------------------------*/
-static int _io(struct device_area *where, void *buffer, int should_write)
+static int _io(struct device_area *where, char *buffer, int should_write)
 {
        int fd = dev_fd(where->dev);
        ssize_t n = 0;
@@ -161,10 +161,10 @@ static void _widen_region(unsigned int block_size, struct device_area *region,
                result->size += block_size - delta;
 }
 
-static int _aligned_io(struct device_area *where, void *buffer,
+static int _aligned_io(struct device_area *where, char *buffer,
                       int should_write)
 {
-       void *bounce, *bounce_buf;
+       char *bounce, *bounce_buf;
        unsigned int block_size = 0;
        uintptr_t mask;
        struct device_area widened;
@@ -195,7 +195,7 @@ static int _aligned_io(struct device_area *where, void *buffer,
         * Realign start of bounce buffer (using the extra sector)
         */
        if (((uintptr_t) bounce) & mask)
-               bounce = (void *) ((((uintptr_t) bounce) + mask) & ~mask);
+               bounce = (char *) ((((uintptr_t) bounce) + mask) & ~mask);
 
        /* channel the io through the bounce buffer */
        if (!_io(&widened, bounce, 0)) {
@@ -645,7 +645,7 @@ int dev_read(struct device *dev, uint64_t offset, size_t len, void *buffer)
  * 'buf' should be len+len2.
  */
 int dev_read_circular(struct device *dev, uint64_t offset, size_t len,
-                     uint64_t offset2, size_t len2, void *buf)
+                     uint64_t offset2, size_t len2, char *buf)
 {
        if (!dev_read(dev, offset, len, buf)) {
                log_error("Read from %s failed", dev_name(dev));
@@ -673,7 +673,7 @@ int dev_read_circular(struct device *dev, uint64_t offset, size_t len,
  */
 
 /* FIXME pre-extend the file */
-int dev_append(struct device *dev, size_t len, void *buffer)
+int dev_append(struct device *dev, size_t len, char *buffer)
 {
        int r;
 
index 694f503f58e61d7c495d8c77341ca46f3356c79c..251a2017da987f50c9669b4db94aa56e15bad393 100644 (file)
@@ -83,9 +83,9 @@ const char *dev_name(const struct device *dev);
 
 int dev_read(struct device *dev, uint64_t offset, size_t len, void *buffer);
 int dev_read_circular(struct device *dev, uint64_t offset, size_t len,
-                     uint64_t offset2, size_t len2, void *buf);
+                     uint64_t offset2, size_t len2, char *buf);
 int dev_write(struct device *dev, uint64_t offset, size_t len, void *buffer);
-int dev_append(struct device *dev, size_t len, void *buffer);
+int dev_append(struct device *dev, size_t len, char *buffer);
 int dev_set(struct device *dev, uint64_t offset, size_t len, int value);
 void dev_flush(struct device *dev);
 
index aae660a984e5d0f3434a4534d2f3d38019364e5d..5be048ef080eef5617074ca70cfc8754f2e7c8f9 100644 (file)
@@ -44,15 +44,24 @@ uint64_t units_to_bytes(const char *units, char *unit_type)
 {
        char *ptr = NULL;
        uint64_t v;
+       double custom_value = 0;
+       uint64_t multiplier;
 
        if (isdigit(*units)) {
-               v = (uint64_t) strtod(units, &ptr);
+               custom_value = strtod(units, &ptr);
                if (ptr == units)
                        return 0;
+               v = (uint64_t) strtoull(units, NULL, 10);
+               if ((double) v == custom_value)
+                       custom_value = 0;       /* Use integer arithmetic */
                units = ptr;
        } else
                v = 1;
 
+       /* Only one units char permitted. */
+       if (*(units + 1))
+               return 0;
+
        if (v == 1)
                *unit_type = *units;
        else
@@ -61,65 +70,65 @@ uint64_t units_to_bytes(const char *units, char *unit_type)
        switch (*units) {
        case 'h':
        case 'H':
-               v = UINT64_C(1);
+               multiplier = v = UINT64_C(1);
                *unit_type = *units;
                break;
        case 'b':
        case 'B':
-               v *= UINT64_C(1);
+               multiplier = UINT64_C(1);
                break;
 #define KILO UINT64_C(1024)
        case 's':
        case 'S':
-               v *= (KILO/2);
+               multiplier = (KILO/2);
                break;
        case 'k':
-               v *= KILO;
+               multiplier = KILO;
                break;
        case 'm':
-               v *= KILO * KILO;
+               multiplier = KILO * KILO;
                break;
        case 'g':
-               v *= KILO * KILO * KILO;
+               multiplier = KILO * KILO * KILO;
                break;
        case 't':
-               v *= KILO * KILO * KILO * KILO;
+               multiplier = KILO * KILO * KILO * KILO;
                break;
        case 'p':
-               v *= KILO * KILO * KILO * KILO * KILO;
+               multiplier = KILO * KILO * KILO * KILO * KILO;
                break;
        case 'e':
-               v *= KILO * KILO * KILO * KILO * KILO * KILO;
+               multiplier = KILO * KILO * KILO * KILO * KILO * KILO;
                break;
 #undef KILO
 #define KILO UINT64_C(1000)
        case 'K':
-               v *= KILO;
+               multiplier = KILO;
                break;
        case 'M':
-               v *= KILO * KILO;
+               multiplier = KILO * KILO;
                break;
        case 'G':
-               v *= KILO * KILO * KILO;
+               multiplier = KILO * KILO * KILO;
                break;
        case 'T':
-               v *= KILO * KILO * KILO * KILO;
+               multiplier = KILO * KILO * KILO * KILO;
                break;
        case 'P':
-               v *= KILO * KILO * KILO * KILO * KILO;
+               multiplier = KILO * KILO * KILO * KILO * KILO;
                break;
        case 'E':
-               v *= KILO * KILO * KILO * KILO * KILO * KILO;
+               multiplier = KILO * KILO * KILO * KILO * KILO * KILO;
                break;
 #undef KILO
        default:
                return 0;
        }
 
-       if (*(units + 1))
-               return 0;
-
-       return v;
+       if (custom_value)
+               return (uint64_t) (custom_value * multiplier);
+       else
+               return v * multiplier;
 }
 
 const char alloc_policy_char(alloc_policy_t alloc)
index a8bbbccbe675265bb084b36bc3f83fb3e2833a13..67b0ffe71fad41b10b6d5236e1ecdf1ba549c2a7 100644 (file)
@@ -141,11 +141,11 @@ static struct cmd_data _cmd_data_v4[] = {
 #  define DM_EXISTS_FLAG 0x00000004
 #endif
 
-static void *_align(void *ptr, unsigned int a)
+static char *_align(char *ptr, unsigned int a)
 {
        register unsigned long agn = --a;
 
-       return (void *) (((unsigned long) ptr + agn) & ~agn);
+       return (char *) (((unsigned long) ptr + agn) & ~agn);
 }
 
 static int _uname(void)
@@ -608,9 +608,9 @@ static struct dm_names *_dm_task_get_names_v1(struct dm_task *dmt)
                                    dmt->dmi.v1->data_start);
 }
 
-static void *_add_target_v1(struct target *t, void *out, void *end)
+static char *_add_target_v1(struct target *t, char *out, char *end)
 {
-       void *out_sp = out;
+       char *out_sp = out;
        struct dm_target_spec_v1 sp;
        size_t sp_size = sizeof(struct dm_target_spec_v1);
        int len;
@@ -629,7 +629,7 @@ static void *_add_target_v1(struct target *t, void *out, void *end)
        if ((out + len + 1) >= end)
                return_NULL;
 
-       strcpy((char *) out, t->params);
+       strcpy(out, t->params);
        out += len + 1;
 
        /* align next block */
@@ -650,7 +650,7 @@ static struct dm_ioctl_v1 *_flatten_v1(struct dm_task *dmt)
        struct dm_ioctl_v1 *dmi;
        struct target *t;
        size_t len = sizeof(struct dm_ioctl_v1);
-       void *b, *e;
+       char *b, *e;
        int count = 0;
 
        for (t = dmt->head; t; t = t->next) {
@@ -710,8 +710,8 @@ static struct dm_ioctl_v1 *_flatten_v1(struct dm_task *dmt)
 
        dmi->target_count = count;
 
-       b = (void *) (dmi + 1);
-       e = (void *) ((char *) dmi + len);
+       b = (char *) (dmi + 1);
+       e = (char *) dmi + len;
 
        for (t = dmt->head; t; t = t->next)
                if (!(b = _add_target_v1(t, b, e))) {
@@ -773,7 +773,7 @@ static int _dm_names_v1(struct dm_ioctl_v1 *dmi)
                names->dev = (uint64_t) buf.st_rdev;
                names->next = 0;
                len = strlen(name);
-               if (((void *) (names + 1) + len + 1) >= end) {
+               if (((char *) (names + 1) + len + 1) >= end) {
                        log_error("Insufficient buffer space for device list");
                        r = 0;
                        break;
@@ -782,7 +782,7 @@ static int _dm_names_v1(struct dm_ioctl_v1 *dmi)
                strcpy(names->name, name);
 
                old_names = names;
-               names = _align((void *) ++names + len + 1, ALIGNMENT);
+               names = _align((char *) ++names + len + 1, ALIGNMENT);
        }
 
        if (closedir(d))
@@ -1341,9 +1341,9 @@ struct target *create_target(uint64_t start, uint64_t len, const char *type,
        return NULL;
 }
 
-static void *_add_target(struct target *t, void *out, void *end)
+static char *_add_target(struct target *t, char *out, char *end)
 {
-       void *out_sp = out;
+       char *out_sp = out;
        struct dm_target_spec sp;
        size_t sp_size = sizeof(struct dm_target_spec);
        int len;
@@ -1362,7 +1362,7 @@ static void *_add_target(struct target *t, void *out, void *end)
        if ((out + len + 1) >= end)
                return_NULL;
 
-       strcpy((char *) out, t->params);
+       strcpy(out, t->params);
        out += len + 1;
 
        /* align next block */
@@ -1394,7 +1394,7 @@ static int _lookup_dev_name(uint64_t dev, char *buf, size_t len)
                goto out;
  
        do {
-               names = (void *) names + next;
+               names = (struct dm_names *)((char *) names + next);
                if (names->dev == dev) {
                        strncpy(buf, names->name, len);
                        r = 1;
@@ -1417,7 +1417,7 @@ static struct dm_ioctl *_flatten(struct dm_task *dmt, unsigned repeat_count)
        struct target *t;
        struct dm_target_msg *tmsg;
        size_t len = sizeof(struct dm_ioctl);
-       void *b, *e;
+       char *b, *e;
        int count = 0;
 
        for (t = dmt->head; t; t = t->next) {
@@ -1565,8 +1565,8 @@ static struct dm_ioctl *_flatten(struct dm_task *dmt, unsigned repeat_count)
        dmi->target_count = count;
        dmi->event_nr = dmt->event_nr;
 
-       b = (void *) (dmi + 1);
-       e = (void *) ((char *) dmi + len);
+       b = (char *) (dmi + 1);
+       e = (char *) dmi + len;
 
        for (t = dmt->head; t; t = t->next)
                if (!(b = _add_target(t, b, e))) {
@@ -1652,7 +1652,7 @@ static int _process_all_v4(struct dm_task *dmt)
                goto out;
 
        do {
-               names = (void *) names + next;
+               names = (struct dm_names *)((char *) names + next);
                if (!dm_task_set_name(dmt, names->name)) {
                        r = 0;
                        goto out;
index 021228414432afe26b6810d356157dd27b28b0bc..19f57362f6dfa3310283dc722f479f9228f39e68 100644 (file)
@@ -675,15 +675,15 @@ int dm_report_set_output_field_name_prefix(struct dm_report *rh, const char *out
 /*
  * Create a row of data for an object
  */
-static void * _report_get_field_data(struct dm_report *rh,
-                             struct field_properties *fp, void *object)
+static void *_report_get_field_data(struct dm_report *rh,
+                                   struct field_properties *fp, void *object)
 {
-       void *ret = fp->type->data_fn(object);
+       char *ret = fp->type->data_fn(object);
 
        if (!ret)
                return NULL;
 
-       return ret + rh->fields[fp->field_num].offset;
+       return (void *)(ret + rh->fields[fp->field_num].offset);
 }
 
 int dm_report_object(struct dm_report *rh, void *object)
index 48fd617778c4917a2ac64bf9a29fb1e824db5b19..5380b5e7b2c9997c5da26be74d136483c6165637 100644 (file)
@@ -111,9 +111,9 @@ INSTALL_SCRIPT = $(INSTALL) -p $(M_INSTALL_PROGRAM)
 
 .SUFFIXES: .c .d .o .so .a .po .pot .mo .dylib
 
-CFLAGS += -fPIC -Wall -Wundef -Wshadow -Wcast-align -Wwrite-strings -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline -Wmissing-noreturn -Wformat-security -Wredundant-decls
+CFLAGS += -fPIC -Wall -Wundef -Wshadow -Wcast-align -Wwrite-strings -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline -Wmissing-noreturn -Wformat-security -Wredundant-decls -Wpointer-arith
 
-#CFLAGS += -W -Wconversion -Wpointer-arith -Wbad-function-cast -Wcast-qual
+#CFLAGS += -W -Wconversion -Wbad-function-cast -Wcast-qual
 #CFLAGS += -pedantic -std=gnu99
 #CFLAGS += -DDEBUG_CRC32
 
This page took 0.060679 seconds and 5 git commands to generate.