__a_unused struct osl_object *result)
{
char *p = query->data;
- uint64_t atts_added = 0;
+ unsigned atts_added = 0;
int ret;
while (p < (char *)query->data + query->size) {
if (ret < 0)
return ret;
greatest_att_bitnum = PARA_MAX(greatest_att_bitnum, bitnum);
- atts_added |= 1 << bitnum;
+ atts_added++;
p += strlen(p) + 1;
}
if (!atts_added)
return 1;
- atts_added = ~atts_added;
- ret = audio_file_loop(&atts_added, logical_and_attribute);
- if (ret < 0)
- return ret;
find_greatest_att_bitnum();
- return reload_current_mood(); /* FIXME: mood_reload() returns an error */
+ return reload_current_mood(); /* FIXME: returns an error */
}
int com_addatt(__a_unused int fd, int argc, char * const * const argv)
struct remove_attribute_action_data {
struct para_buffer pb;
int num_removed;
+ uint64_t mask_of_removed_atts;
};
static int remove_attribute(struct osl_table *table, struct osl_row *row,
{
struct remove_attribute_action_data *raad = data;
int ret = osl_del_row(table, row);
- if (ret < 0)
+ unsigned char bitnum;
+
+ if (ret < 0) {
+ para_printf(&raad->pb, "%s: %s\n", name, PARA_STRERROR(-ret));
+ return 1;
+ }
+ ret = get_attribute_bitnum_by_name(name, &bitnum);
+ if (ret < 0) {
para_printf(&raad->pb, "%s: %s\n", name, PARA_STRERROR(-ret));
- else {
- para_printf(&raad->pb, "removed %s\n", name);
- raad->num_removed++;
+ return 1;
}
+ para_printf(&raad->pb, "removed %s\n", name);
+ raad->num_removed++;
+ raad->mask_of_removed_atts |= (1 << bitnum);
return 1;
}
if (ret < 0)
para_printf(&raad.pb, "%s\n", PARA_STRERROR(-ret));
if (raad.num_removed) {
+ uint64_t and_mask = ~raad.mask_of_removed_atts;
+ ret = audio_file_loop(&and_mask, logical_and_attribute);
+ if (ret < 0)
+ para_printf(&raad.pb, "%s\n", PARA_STRERROR(-ret));
find_greatest_att_bitnum();
ret = reload_current_mood();
if (ret < 0)