com_addatt: Minor improvements.
authorAndre Noll <maan@systemlinux.org>
Sun, 25 Nov 2007 22:28:09 +0000 (23:28 +0100)
committerAndre Noll <maan@systemlinux.org>
Sun, 25 Nov 2007 22:28:09 +0000 (23:28 +0100)
- Use get_attribute_bitnum_by_name() instead of open-coding.
- Use new error code E_ATT_TABLE_FULL.
- Move definition of objs[ATTCOL_NAME] down to where it is needed.
- Kill FIXME comment: We can not use find_greatest_att_bitnum() here.

attribute.c

index cc81046..5f7188e 100644 (file)
@@ -304,18 +304,15 @@ static int com_addatt_callback(const struct osl_object *query,
                        para_printf(&pb, "invalid attribute name: %s\n", p);
                        continue;
                }
-               objs[ATTCOL_BITNUM].size = 1;
-               objs[ATTCOL_NAME].data = p;
-               objs[ATTCOL_NAME].size = len + 1;
-               ret = osl_get_row(attribute_table, ATTCOL_NAME,
-                       &objs[ATTCOL_NAME], &row); /* expected to fail FIXME: Use get_attribute_bitnum_by_name() */
+               ret = get_attribute_bitnum_by_name(p, &bitnum);
                if (ret >= 0) {
-                       para_printf(&pb, "attribute %s already exists\n", p);
+                       para_printf(&pb, "attribute \"%s\" already exists\n", p);
                        continue;
                }
                if (ret != -E_RB_KEY_NOT_FOUND) /* error */
                        goto out;
-               /* find smallest non-used attribute FIXME: Use find_greatest_att_bitnum() */
+               objs[ATTCOL_BITNUM].size = 1;
+               /* find smallest unused attribute */
                for (bitnum = 0; bitnum < 64; bitnum++) {
                        objs[ATTCOL_BITNUM].data = &bitnum;
                        ret = osl_get_row(attribute_table, ATTCOL_BITNUM,
@@ -327,9 +324,11 @@ static int com_addatt_callback(const struct osl_object *query,
                        /* this bit is already in use, try next bit */
                }
                if (bitnum == 64) {
-                       para_printf(&pb, "attribute table full\n");
+                       ret = -E_ATT_TABLE_FULL;
                        goto out;
                }
+               objs[ATTCOL_NAME].data = p;
+               objs[ATTCOL_NAME].size = len + 1;
                ret = osl_add_row(attribute_table, objs);
                if (ret < 0)
                        goto out;