static int com_mvatt_callback(struct afs_callback_arg *aca)
{
- char *old = aca->query.data;
- size_t size = strlen(old) + 1;
- char *new = old + size;
- struct osl_object obj = {.data = old, .size = size};
+ const struct lls_command *cmd = SERVER_CMD_CMD_PTR(MVATT);
+ const char *old, *new;
+ struct osl_object obj;
struct osl_row *row;
int ret;
+ ret = lls(lls_deserialize_parse_result(aca->query.data, cmd, &aca->lpr));
+ assert(ret >= 0);
+ old = lls_input(0, aca->lpr);
+ new = lls_input(1, aca->lpr);
+ obj.data = (char *)old;
+ obj.size = strlen(old) + 1;
ret = osl(osl_get_row(attribute_table, ATTCOL_NAME, &obj, &row));
if (ret < 0)
goto out;
- obj.data = new;
+ obj.data = (char *)new;
obj.size = strlen(new) + 1;
+ /* The update fails if the destination attribute exists. */
ret = osl(osl_update_object(attribute_table, row, ATTCOL_NAME, &obj));
out:
if (ret < 0)
para_printf(&aca->pbout, "cannot rename %s to %s\n", old, new);
else
ret = afs_event(ATTRIBUTE_RENAME, &aca->pbout, NULL);
+ lls_free_parse_result(aca->lpr, cmd);
return ret;
}
-int com_mvatt(struct command_context *cc)
+static int com_mvatt(struct command_context *cc, struct lls_parse_result *lpr)
{
- if (cc->argc != 3)
- return -E_ATTR_SYNTAX;
- return send_standard_callback_request(cc->argc - 1, cc->argv + 1,
- com_mvatt_callback, afs_cb_result_handler, cc);
+ const struct lls_command *cmd = SERVER_CMD_CMD_PTR(MVATT);
+ char *errctx;
+ int ret = lls(lls_check_arg_count(lpr, 2, 2, &errctx));
+ if (ret < 0) {
+ send_errctx(cc, errctx);
+ return ret;
+ }
+ return send_lls_callback_request(com_mvatt_callback, cmd, lpr, cc);
}
+EXPORT_SERVER_CMD_HANDLER(mvatt);
static int remove_attribute(struct osl_table *table, struct osl_row *row,
const char *name, void *data)