[PATCH] lib: fwts_dump: remove the redundant path in fwts_dump_info (LP: #1216344)

Colin King colin.king at canonical.com
Sat Aug 24 15:46:18 UTC 2013


From: Colin Ian King <colin.king at canonical.com>

The path is redundant and removing it simplifies the fwts_dump helper
functions.  Also just check that the destination directory has write
access rather than just using F_OK.

Signed-off-by: Colin Ian King <colin.king at canonical.com>
---
 src/lib/include/fwts_dump.h  |  2 +-
 src/lib/src/fwts_dump.c      | 68 ++++++++++++++++++--------------------------
 src/lib/src/fwts_framework.c |  4 +--
 3 files changed, 31 insertions(+), 43 deletions(-)

diff --git a/src/lib/include/fwts_dump.h b/src/lib/include/fwts_dump.h
index 6dcc29d..bebc773 100644
--- a/src/lib/include/fwts_dump.h
+++ b/src/lib/include/fwts_dump.h
@@ -22,6 +22,6 @@
 
 #include "fwts.h"
 
-int fwts_dump_info(fwts_framework *fw, const char *path);
+int fwts_dump_info(fwts_framework *fw);
 
 #endif
diff --git a/src/lib/src/fwts_dump.c b/src/lib/src/fwts_dump.c
index f3ccc15..532ff58 100644
--- a/src/lib/src/fwts_dump.c
+++ b/src/lib/src/fwts_dump.c
@@ -21,12 +21,9 @@
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
-#include <limits.h>
 #include <time.h>
+#include <limits.h>
 #include <sys/klog.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <sys/stat.h>
 
 #include "fwts.h"
 
@@ -38,13 +35,11 @@
  *  dump_data()
  *	dump to path/filename a chunk of data of length len
  */
-static int dump_data(const char *path, const char *filename, char *data, const size_t len)
+static int dump_data(const char *filename, char *data, const size_t len)
 {
 	FILE *fp;
-	char name[PATH_MAX];
 
-	snprintf(name, sizeof(name), "%s/%s", path, filename);
-	if ((fp = fopen(name, "w")) == NULL)
+	if ((fp = fopen(filename, "w")) == NULL)
 		return FWTS_ERROR;
 
 	if ((fwrite(data, sizeof(char), len, fp) != len)) {
@@ -60,7 +55,7 @@ static int dump_data(const char *path, const char *filename, char *data, const s
  *  dump_dmesg()
  *	read kernel log, dump to path/filename
  */
-static int dump_dmesg(const char *path, const char *filename)
+static int dump_dmesg(void)
 {
 	int len;
 	char *data;
@@ -76,7 +71,7 @@ static int dump_dmesg(const char *path, const char *filename)
 		free(data);
 		return FWTS_ERROR;
 	}
-	ret = dump_data(path, filename, data, strlen(data));
+	ret = dump_data("dmesg.log", data, strlen(data));
 
 	free(data);
 
@@ -88,7 +83,7 @@ static int dump_dmesg(const char *path, const char *filename)
  *  dump_exec()
  *  	Execute command, dump output to path/filename
  */
-static int dump_exec(const char *path, const char *filename, const char *command)
+static int dump_exec(const char *filename, const char *command)
 {
 	int fd;
 	pid_t pid;
@@ -106,7 +101,7 @@ static int dump_exec(const char *path, const char *filename, const char *command
 
 	fwts_pipe_close(fd, pid);
 
-	ret = dump_data(path, filename, data, len);
+	ret = dump_data(filename, data, len);
 
 	free(data);
 
@@ -118,11 +113,11 @@ static int dump_exec(const char *path, const char *filename, const char *command
  *  dump_dmidecode()
  *	run dmidecode, dump output to path/filename
  */
-static int dump_dmidecode(fwts_framework *fw, const char *path, const char *filename)
+static int dump_dmidecode(fwts_framework *fw)
 {
 	FWTS_UNUSED(fw);
 
-	return dump_exec(path, filename, FWTS_DMIDECODE_PATH);
+	return dump_exec("dmidecode.log", FWTS_DMIDECODE_PATH);
 }
 #endif
 
@@ -130,13 +125,13 @@ static int dump_dmidecode(fwts_framework *fw, const char *path, const char *file
  *  dump_lspci()
  *	run lspci, dump output to path/filename
  */
-static int dump_lspci(fwts_framework *fw, const char *path, const char *filename)
+static int dump_lspci(fwts_framework *fw)
 {
 	char command[1024];
 
 	snprintf(command, sizeof(command), "%s -vv -nn", fw->lspci);
 
-	return dump_exec(path, filename, command);
+	return dump_exec("lspci.log", command);
 }
 
 #ifdef FWTS_ARCH_INTEL
@@ -165,14 +160,12 @@ static int dump_acpi_table(fwts_acpi_table_info *table, FILE *fp)
  *  dump_acpi_tables()
  *	hex dump all ACPI tables
  */
-static int dump_acpi_tables(fwts_framework *fw, const char *path)
+static int dump_acpi_tables(fwts_framework *fw)
 {
-	char filename[PATH_MAX];
 	FILE *fp;
 	int i;
 
-	snprintf(filename, sizeof(filename), "%s/acpidump.log", path);
-	if ((fp = fopen(filename, "w")) == NULL)
+	if ((fp = fopen("acpidump.log", "w")) == NULL)
 		return FWTS_ERROR;
 
 	for (i=0;;i++) {
@@ -198,18 +191,15 @@ static int dump_acpi_tables(fwts_framework *fw, const char *path)
  *  dump_readme()
  *	dump README file containing some system info
  */
-static int dump_readme(const char *path)
+static int dump_readme(void)
 {
-	char filename[PATH_MAX];
 	time_t now = time(NULL);
 	struct tm *tm = localtime(&now);
 	FILE *fp;
 	char *str;
 	int len;
 
-	snprintf(filename, sizeof(filename), "%s/README.txt", path);
-
-	if ((fp = fopen(filename, "w")) == NULL)
+	if ((fp = fopen("README.txt", "w")) == NULL)
 		return FWTS_ERROR;
 
 	str = asctime(tm);
@@ -239,50 +229,48 @@ static int dump_readme(const char *path)
  *	kernel log, dmidecode output, lspci output,
  *	ACPI tables
  */
-int fwts_dump_info(fwts_framework *fw, const char *path)
+int fwts_dump_info(fwts_framework *fw)
 {
+	char path[PATH_MAX+1];
 #ifdef FWTS_ARCH_INTEL
 	bool root_priv = (fwts_check_root_euid(fw, false) == FWTS_OK);
 #endif
+	if (getcwd(path, PATH_MAX) == NULL)
+		strcpy(path, "./");
 
-	if (path == NULL)
-		path = "./";
-
-	if (access(path, F_OK) != 0) {
-		if (mkdir(path, 0777) < 0) {
-			fprintf(stderr, "Cannot mkdir %s.\n", path);
-			return FWTS_ERROR;
-		}
+	if (access(path, W_OK) < 0) {
+		fprintf(stderr, "No write access to %s.\n", path);
+		return FWTS_ERROR;
 	}
 
-	if (dump_readme(path) != FWTS_OK)
+	if (dump_readme() != FWTS_OK)
 		fprintf(stderr, "Failed to dump README.txt.\n");
 	else
 		printf("Created README.txt\n");
 
-	if (dump_dmesg(path, "dmesg.log") != FWTS_OK)
+	if (dump_dmesg() != FWTS_OK)
 		fprintf(stderr, "Failed to dump kernel log.\n");
 	else
 		printf("Dumping dmesg to dmesg.log\n");
 
 #ifdef FWTS_ARCH_INTEL
 	if (root_priv) {
-		if (dump_dmidecode(fw, path, "dmidecode.log") != FWTS_OK)
+		if (dump_dmidecode(fw) != FWTS_OK)
 			fprintf(stderr, "Failed to dump output from dmidecode.\n");
 		else
 			printf("Dumped DMI data to dmidecode.log\n");
-	} else 
+	} else
 		fprintf(stderr, "Need root privilege to dump DMI tables.\n");
 #endif
 
-	if (dump_lspci(fw, path, "lspci.log") != FWTS_OK)
+	if (dump_lspci(fw) != FWTS_OK)
 		fprintf(stderr, "Failed to dump output from lspci.\n");
 	else
 		printf("Dumped lspci data to lspci.log\n");
 
 #ifdef FWTS_ARCH_INTEL
 	if (root_priv) {
-		if (dump_acpi_tables(fw, path) != FWTS_OK)
+		if (dump_acpi_tables(fw) != FWTS_OK)
 			fprintf(stderr, "Failed to dump ACPI tables.\n");
 		else
 			printf("Dumped ACPI tables to acpidump.log\n");
diff --git a/src/lib/src/fwts_framework.c b/src/lib/src/fwts_framework.c
index 1581681..95d581e 100644
--- a/src/lib/src/fwts_framework.c
+++ b/src/lib/src/fwts_framework.c
@@ -1052,7 +1052,7 @@ int fwts_framework_options_handler(fwts_framework *fw, int argc, char * const ar
 			fwts_framework_show_version(stdout, argv[0]);
 			return FWTS_COMPLETE;
 		case 16: /* --dump */
-			fwts_dump_info(fw, NULL);
+			fwts_dump_info(fw);
 			return FWTS_COMPLETE;
 		case 17: /* --table-path */
 			fwts_framework_strdup(&fw->acpi_table_path, optarg);
@@ -1139,7 +1139,7 @@ int fwts_framework_options_handler(fwts_framework *fw, int argc, char * const ar
 		fw->flags |= FWTS_FLAG_BATCH;
 		break;
 	case 'd': /* --dump */
-		fwts_dump_info(fw, NULL);
+		fwts_dump_info(fw);
 		return FWTS_COMPLETE;
 	case 'D': /* --show-progress-dialog */
 		fw->flags = (fw->flags &
-- 
1.8.3.2




More information about the fwts-devel mailing list