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,
/* 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;