]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
common/buffer: accept "-" as stdin
authorPatrick Donnelly <pdonnell@ibm.com>
Fri, 21 Mar 2025 16:53:38 +0000 (12:53 -0400)
committerPatrick Donnelly <pdonnell@ibm.com>
Wed, 1 Oct 2025 18:46:51 +0000 (14:46 -0400)
These methods are used for reading files from tools like "authtool". Read from
stdin if the conventional "-" filename is passed.

Signed-off-by: Patrick Donnelly <pdonnell@ibm.com>
src/common/buffer.cc

index 6a6a8cbe5ba7539a934d76bcac28895b42b4e3e5..68eb2a43f17bef6ef3b208c9fa9573be912c99c5 100644 (file)
@@ -1717,7 +1717,13 @@ void buffer::list::decode_base64(buffer::list& e)
 
 ssize_t buffer::list::pread_file(const char *fn, uint64_t off, uint64_t len, std::string *error)
 {
-  int fd = TEMP_FAILURE_RETRY(::open(fn, O_RDONLY|O_CLOEXEC|O_BINARY));
+  int fd;
+  if (strcmp(fn, "-") == 0) {
+    /* FIXME dup3 for O_CLOEXEC */
+    fd = TEMP_FAILURE_RETRY(::dup(STDIN_FILENO));
+  } else {
+    fd = TEMP_FAILURE_RETRY(::open(fn, O_RDONLY|O_CLOEXEC|O_BINARY));
+  }
   if (fd < 0) {
     int err = errno;
     std::ostringstream oss;
@@ -1777,7 +1783,13 @@ ssize_t buffer::list::pread_file(const char *fn, uint64_t off, uint64_t len, std
 
 int buffer::list::read_file(const char *fn, std::string *error)
 {
-  int fd = TEMP_FAILURE_RETRY(::open(fn, O_RDONLY|O_CLOEXEC|O_BINARY));
+  int fd;
+  if (strcmp(fn, "-") == 0) {
+    /* FIXME dup3 for O_CLOEXEC */
+    fd = TEMP_FAILURE_RETRY(::dup(STDIN_FILENO));
+  } else {
+    fd = TEMP_FAILURE_RETRY(::open(fn, O_RDONLY|O_CLOEXEC|O_BINARY));
+  }
   if (fd < 0) {
     int err = errno;
     std::ostringstream oss;