[PATCH 3/6] pipeio: Rename fwts_pipe_open to fwts_pipe_open_ro, add fd as output argument

Jeremy Kerr jk at ozlabs.org
Fri Apr 22 05:41:09 UTC 2016


In preparation for read/write pipe IO, this change renames
fwts_pipe_open to fwts_pipe_open_ro, and adds fd as an output argument,
instead of overloading the success/fail return status.

This will allow us to add a _rw variant, which returns two file
descriptors.

Signed-off-by: Jeremy Kerr <jk at ozlabs.org>
---
 src/lib/include/fwts_pipeio.h |  2 +-
 src/lib/src/fwts_cpu.c        |  2 +-
 src/lib/src/fwts_devicetree.c |  4 ++--
 src/lib/src/fwts_dump.c       |  2 +-
 src/lib/src/fwts_pipeio.c     | 20 +++++++++++---------
 5 files changed, 16 insertions(+), 14 deletions(-)

diff --git a/src/lib/include/fwts_pipeio.h b/src/lib/include/fwts_pipeio.h
index 96952e0..e27d90b 100644
--- a/src/lib/include/fwts_pipeio.h
+++ b/src/lib/include/fwts_pipeio.h
@@ -30,7 +30,7 @@
 
 #define FWTS_EXEC_ERROR		(127)
 
-int   fwts_pipe_open(const char *command, pid_t *childpid);
+int   fwts_pipe_open_ro(const char *command, pid_t *childpid, int *fd);
 int   fwts_pipe_read(const int fd, char **out_buf, ssize_t *out_len);
 int   fwts_pipe_close(const int fd, const pid_t pid);
 int   fwts_pipe_exec(const char *command, fwts_list **list, int *status);
diff --git a/src/lib/src/fwts_cpu.c b/src/lib/src/fwts_cpu.c
index bcdb89d..a72500a 100644
--- a/src/lib/src/fwts_cpu.c
+++ b/src/lib/src/fwts_cpu.c
@@ -64,7 +64,7 @@ int fwts_cpu_readmsr(const int cpu, const uint32_t reg, uint64_t *val)
 	if ((fd = open(buffer, O_RDONLY)) < 0) {
 		/* Hrm, msr not there, so force modprobe msr and see what happens */
 		pid_t pid;
-		if ((fd = fwts_pipe_open("modprobe msr", &pid)) < 0)
+		if (fwts_pipe_open_ro("modprobe msr", &pid, &fd) < 0)
 			return FWTS_ERROR;
 		fwts_pipe_close(fd, pid);
 
diff --git a/src/lib/src/fwts_devicetree.c b/src/lib/src/fwts_devicetree.c
index b68a00e..baa4e6b 100644
--- a/src/lib/src/fwts_devicetree.c
+++ b/src/lib/src/fwts_devicetree.c
@@ -39,8 +39,8 @@ int fwts_devicetree_read(fwts_framework *fwts)
 	if (rc < 0)
 		return FWTS_ERROR;
 
-	fd = fwts_pipe_open(command, &pid);
-	if (fd < 0) {
+	rc = fwts_pipe_open_ro(command, &pid, &fd);
+	if (rc < 0) {
 		free(command);
 		return FWTS_ERROR;
 	}
diff --git a/src/lib/src/fwts_dump.c b/src/lib/src/fwts_dump.c
index edd2850..3ff888b 100644
--- a/src/lib/src/fwts_dump.c
+++ b/src/lib/src/fwts_dump.c
@@ -91,7 +91,7 @@ static int dump_exec(const char *filename, const char *command)
 	char *data;
 	int ret;
 
-	if ((fd = fwts_pipe_open(command, &pid)) < 0)
+	if (fwts_pipe_open_ro(command, &pid, &fd) < 0)
 		return FWTS_ERROR;
 
 	if (fwts_pipe_read(fd, &data, &len) != 0) {
diff --git a/src/lib/src/fwts_pipeio.c b/src/lib/src/fwts_pipeio.c
index 7148903..64fc91d 100644
--- a/src/lib/src/fwts_pipeio.c
+++ b/src/lib/src/fwts_pipeio.c
@@ -40,11 +40,11 @@
 #include "fwts.h"
 
 /*
- *  fwts_pipe_open()
- *	execl a command, return pid in *childpid and
- *	return fd. fd < 0 indicates error.
+ *  fwts_pipe_open_ro()
+ *	execl a command, return pid in *childpid and a pipe connected
+ *	to stdout in *fd. Return value < 0 indicates error.
  */
-int fwts_pipe_open(const char *command, pid_t *childpid)
+int fwts_pipe_open_ro(const char *command, pid_t *childpid, int *fd)
 {
 	int pipefds[2];
 	pid_t pid;
@@ -78,15 +78,17 @@ int fwts_pipe_open(const char *command, pid_t *childpid)
 		/* Parent */
 		close(pipefds[1]);
 		*childpid = pid;
+		*fd = pipefds[0];
 
-		return pipefds[0];
+		return 0;
 	}
 }
 
 /*
  *  fwts_pipe_read()
- *	read output from fwts_pipe_open(), *out_buf is populated with returned
- *	data (allocated, must be free()-ed after use), and length in *out_len.
+ *	read output from fwts_pipe_open_ro(), *out_buf is populated with
+ *	returned data (allocated, must be free()-ed after use), and length in
+ *	*out_len.
  *	Returns non-zero on failure.
  */
 int fwts_pipe_read(const int fd, char **out_buf, ssize_t *out_len)
@@ -160,7 +162,7 @@ int fwts_pipe_exec(const char *command, fwts_list **list, int *status)
 	ssize_t	len;
 	char 	*text;
 
-	if ((fd = fwts_pipe_open(command, &pid)) < 0)
+	if (fwts_pipe_open_ro(command, &pid, &fd) < 0)
 		return FWTS_ERROR;
 
 	rc = fwts_pipe_read(fd, &text, &len);
@@ -192,7 +194,7 @@ int fwts_exec(const char *command, int *status)
 	pid_t 	pid;
 	int	fd;
 
-	if ((fd = fwts_pipe_open(command, &pid)) < 0)
+	if (fwts_pipe_open_ro(command, &pid, &fd) < 0)
 		return FWTS_ERROR;
 
 	*status = fwts_pipe_close(fd, pid);
-- 
2.5.0




More information about the fwts-devel mailing list