X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=attribute.c;h=ffe841025c1f7776e0bf33e35a951953abc48160;hp=96b54c99080deb62b0b593e62d6470306c601886;hb=3d9df3244a04aaf5c0c216f2e475f5355cf9721b;hpb=3879481ddabc38236b9eee979a090c2a9bfa74d3 diff --git a/attribute.c b/attribute.c index 96b54c99..ffe84102 100644 --- a/attribute.c +++ b/attribute.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 1997-2013 Andre Noll + * Copyright (C) 1997-2014 Andre Noll * * Licensed under the GPL v2. For licencing details see COPYING. */ @@ -212,85 +212,10 @@ int com_lsatt(struct command_context *cc) if (ret < 0) send_strerror(cc, -ret); else if (ret == 0 && cc->argc > 1) - ret = cc->use_sideband? - send_sb_va(&cc->scc, SBD_ERROR_LOG, "no matches\n") - : - sc_send_va_buffer(&cc->scc, "no matches\n"); + ret = send_sb_va(&cc->scc, SBD_ERROR_LOG, "no matches\n"); return ret; } -static void com_setatt_callback(__a_unused int fd, const struct osl_object *query) -{ - char *p; - uint64_t add_mask = 0, del_mask = 0; - int ret; - size_t len; - struct osl_object obj; - struct osl_row *row; - - for (p = query->data; p < (char *)query->data + query->size; p += len + 1) { - char c; - - len = strlen(p); - ret = -E_ATTR_SYNTAX; - if (!*p) - goto out; - c = p[len - 1]; - if (c != '+' && c != '-') - break; - p[len - 1] = '\0'; - obj.data = p; - obj.size = len + 1; - ret = osl(osl_get_row(attribute_table, ATTCOL_NAME, &obj, &row)); - if (ret < 0) - goto out; - ret = osl(osl_get_object(attribute_table, row, ATTCOL_BITNUM, - &obj)); - if (ret < 0) - goto out; - if (c == '+') - add_mask |= (1UL << *(unsigned char *)obj.data); - else - del_mask |= (1UL << *(unsigned char *)obj.data); - } - ret = -E_ATTR_SYNTAX; - if (!add_mask && !del_mask) - goto out; - PARA_DEBUG_LOG("masks: %llx:%llx\n",(long long unsigned)add_mask, - (long long unsigned)del_mask); - for (; p < (char *)query->data + query->size; p += len + 1) { /* TODO: fnmatch */ - struct afs_info old_afsi, new_afsi; - struct afsi_change_event_data aced = {.old_afsi = &old_afsi}; - - len = strlen(p); - ret = aft_get_row_of_path(p, &aced.aft_row); - if (ret < 0) - goto out; - ret = get_afsi_object_of_row(aced.aft_row, &obj); - if (ret < 0) - goto out; - ret = load_afsi(&old_afsi, &obj); - if (ret < 0) - goto out; - new_afsi = old_afsi; - new_afsi.attributes |= add_mask; - new_afsi.attributes &= ~del_mask; - save_afsi(&new_afsi, &obj); /* in-place update */ - afs_event(AFSI_CHANGE, NULL, &aced); - } -out: - if (ret < 0) - PARA_NOTICE_LOG("%s\n", para_strerror(-ret)); -} - -int com_setatt(struct command_context *cc) -{ - if (cc->argc < 3) - return -E_ATTR_SYNTAX; - return send_standard_callback_request(cc->argc - 1, cc->argv + 1, - com_setatt_callback, NULL, NULL); -} - struct addatt_event_data { const char *name; unsigned char bitnum;