- while (p < (char *)query->data + query->size) {
- struct osl_object objs[NUM_ATT_COLUMNS];
- struct osl_row *row;
- unsigned char bitnum;
-
- objs[ATTCOL_BITNUM].size = 1;
- objs[ATTCOL_NAME].data = p;
- objs[ATTCOL_NAME].size = strlen(p) + 1;
- ret = osl_get_row(attribute_table, ATTCOL_NAME,
- &objs[ATTCOL_NAME], &row); /* expected to fail */
- if (ret >= 0)
- return -E_ATTR_EXISTS;
- if (ret != -E_RB_KEY_NOT_FOUND) /* error */
- return ret;
- /* find smallest non-used attribute */
- for (bitnum = 0; bitnum < 64; bitnum++) {
- objs[ATTCOL_BITNUM].data = &bitnum;
- ret = osl_get_row(attribute_table, ATTCOL_BITNUM,
- &objs[ATTCOL_BITNUM], &row);
- if (ret == -E_RB_KEY_NOT_FOUND)
- break; /* this bitnum is unused, use it */
- if (ret < 0) /* error */
- return ret;
- /* this bit is already in use, try next bit */
- }
- if (bitnum == 64)
- return -E_ATTR_TABLE_FULL;
- ret = osl_add_row(attribute_table, objs);
- if (ret < 0)
- return ret;
- greatest_att_bitnum = PARA_MAX(greatest_att_bitnum, bitnum);
- atts_added++;
- p += strlen(p) + 1;
- }
- if (!atts_added)
- return 1;
- find_greatest_att_bitnum();
- return reload_current_mood(); /* FIXME: returns an error */
-}
-
-int com_addatt(__a_unused int fd, int argc, char * const * const argv)
-{
- if (argc < 2)