From 645c28a108b51aceb73a3d634eb46108df5b6fe6 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 6 Aug 2014 15:09:22 -0700 Subject: [PATCH] rados: optionally read setxattr value from stdin Signed-off-by: Sage Weil --- src/tools/rados/rados.cc | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/tools/rados/rados.cc b/src/tools/rados/rados.cc index 29726d1b46dc..adb357bd61f9 100644 --- a/src/tools/rados/rados.cc +++ b/src/tools/rados/rados.cc @@ -1641,15 +1641,22 @@ static int rados_tool_common(const std::map < std::string, std::string > &opts, } } else if (strcmp(nargs[0], "setxattr") == 0) { - if (!pool_name || nargs.size() < 4) + if (!pool_name || nargs.size() < 3 || nargs.size() > 4) usage_exit(); string oid(nargs[1]); string attr_name(nargs[2]); - string attr_val(nargs[3]); - bufferlist bl; - bl.append(attr_val.c_str(), attr_val.length()); + if (nargs.size() == 4) { + string attr_val(nargs[3]); + bl.append(attr_val.c_str(), attr_val.length()); + } else { + do { + ret = bl.read_fd(0, 1024); // from stdin + if (ret < 0) + goto out; + } while (ret > 0); + } ret = io_ctx.setxattr(oid, attr_name.c_str(), bl); if (ret < 0) { -- 2.47.3