attribute: Avoid shifting 32 bit integers.
authorAndre Noll <maan@tuebingen.mpg.de>
Sun, 7 Feb 2016 16:33:15 +0000 (17:33 +0100)
committerAndre Noll <maan@tuebingen.mpg.de>
Sun, 7 Feb 2016 16:33:15 +0000 (17:33 +0100)
Doing "1UL << i" is wrong here, because the constant "1UL" is 32 bit
on 32 bit systems and we definitely need 64 bit quantities for the
attribute mask.

Fix this by using an uint64_t variable instead.

attribute.c

index 5672309..65f08ae 100644 (file)
@@ -222,7 +222,7 @@ int com_lsatt(struct command_context *cc)
 static void com_setatt_callback(__a_unused int fd, const struct osl_object *query)
 {
        char *p;
-       uint64_t add_mask = 0, del_mask = 0;
+       uint64_t add_mask = 0, del_mask = 0, one = 1;
        int ret;
        size_t len;
        struct osl_object obj;
@@ -249,9 +249,9 @@ static void com_setatt_callback(__a_unused int fd, const struct osl_object *quer
                if (ret < 0)
                        goto out;
                if (c == '+')
-                       add_mask |= (1UL << *(unsigned char *)obj.data);
+                       add_mask |= (one << *(unsigned char *)obj.data);
                else
-                       del_mask |= (1UL << *(unsigned char *)obj.data);
+                       del_mask |= (one << *(unsigned char *)obj.data);
        }
        ret = -E_ATTR_SYNTAX;
        if (!add_mask && !del_mask)