From f80b43be84f51511d3f502726f811b3b5892c5ed Mon Sep 17 00:00:00 2001
From: Daniel Salzman <daniel.salzman@nic.cz>
Date: Thu, 21 Aug 2014 12:53:44 +0200
Subject: [PATCH] zscanner: improve error codes

---
 src/zscanner/error.c                     |  4 +++-
 src/zscanner/error.h                     |  5 +++--
 src/zscanner/scanner.c.g2                | 12 ++++++++----
 src/zscanner/scanner.c.t0                | 12 ++++++++----
 src/zscanner/scanner.rl                  | 12 ++++++++----
 src/zscanner/tests/data/06-3_INCLUDE.out |  2 +-
 6 files changed, 31 insertions(+), 16 deletions(-)

diff --git a/src/zscanner/error.c b/src/zscanner/error.c
index 9f65d7066..ccc430757 100644
--- a/src/zscanner/error.c
+++ b/src/zscanner/error.c
@@ -29,13 +29,15 @@ typedef struct {
 const err_table_t err_msgs[] = {
 	ERR_ITEM( ZS_OK, "ok" ),
 
+	ERR_ITEM( ZS_SYSTEM,
+	          "system error" ),
 	ERR_ITEM( ZS_FILE_OPEN,
 	          "file open error" ),
 	ERR_ITEM( ZS_FILE_PATH,
 	          "file path error" ),
 	ERR_ITEM( ZS_FILE_FSTAT,
 	          "fstat error" ),
-	ERR_ITEM( ZS_FILE_DIRECTORY,
+	ERR_ITEM( ZS_FILE_DIR,
 	          "not zone file but directory" ),
 	ERR_ITEM( ZS_FILE_MMAP,
 	          "file mmap error" ),
diff --git a/src/zscanner/error.h b/src/zscanner/error.h
index 74f98dcdf..247bcea31 100644
--- a/src/zscanner/error.h
+++ b/src/zscanner/error.h
@@ -27,10 +27,11 @@
 enum err_codes {
 	ZS_OK = 0,
 
-	ZS_FILE_OPEN = -1000,
+	ZS_SYSTEM = -1000,
+	ZS_FILE_OPEN,
 	ZS_FILE_PATH,
 	ZS_FILE_FSTAT,
-	ZS_FILE_DIRECTORY,
+	ZS_FILE_DIR,
 	ZS_FILE_MMAP,
 	ZS_DOS_NEWLINE,
 	ZS_UNCOVERED_STATE,
diff --git a/src/zscanner/scanner.c.g2 b/src/zscanner/scanner.c.g2
index 9cee51c9a..1814ab635 100644
--- a/src/zscanner/scanner.c.g2
+++ b/src/zscanner/scanner.c.g2
@@ -73109,6 +73109,13 @@ int zs_scanner_parse_file(zs_scanner_t *s,
 		return -1;
 	}
 
+	// Getting OS page size.
+	page_size = sysconf(_SC_PAGESIZE);
+	if (page_size <= 0) {
+		ERR(ZS_SYSTEM);
+		return -1;
+	}
+
 	// Copying file name.
 	s->file.name = strdup(file_name);
 
@@ -73133,9 +73140,6 @@ int zs_scanner_parse_file(zs_scanner_t *s,
 		return -1;
 	}
 
-	// Getting OS page size.
-	page_size = sysconf(_SC_PAGESIZE);
-
 	// Getting file information.
 	if (fstat(s->file.descriptor, &file_stat) == -1) {
 		ERR(ZS_FILE_FSTAT);
@@ -73146,7 +73150,7 @@ int zs_scanner_parse_file(zs_scanner_t *s,
 
 	// Check for directory.
 	if (S_ISDIR(file_stat.st_mode)) {
-		ERR(ZS_FILE_DIRECTORY);
+		ERR(ZS_FILE_DIR);
 		close(s->file.descriptor);
 		free(s->file.name);
 		return -1;
diff --git a/src/zscanner/scanner.c.t0 b/src/zscanner/scanner.c.t0
index b6d6f4de8..1b6e8248b 100644
--- a/src/zscanner/scanner.c.t0
+++ b/src/zscanner/scanner.c.t0
@@ -7430,6 +7430,13 @@ int zs_scanner_parse_file(zs_scanner_t *s,
 		return -1;
 	}
 
+	// Getting OS page size.
+	page_size = sysconf(_SC_PAGESIZE);
+	if (page_size <= 0) {
+		ERR(ZS_SYSTEM);
+		return -1;
+	}
+
 	// Copying file name.
 	s->file.name = strdup(file_name);
 
@@ -7454,9 +7461,6 @@ int zs_scanner_parse_file(zs_scanner_t *s,
 		return -1;
 	}
 
-	// Getting OS page size.
-	page_size = sysconf(_SC_PAGESIZE);
-
 	// Getting file information.
 	if (fstat(s->file.descriptor, &file_stat) == -1) {
 		ERR(ZS_FILE_FSTAT);
@@ -7467,7 +7471,7 @@ int zs_scanner_parse_file(zs_scanner_t *s,
 
 	// Check for directory.
 	if (S_ISDIR(file_stat.st_mode)) {
-		ERR(ZS_FILE_DIRECTORY);
+		ERR(ZS_FILE_DIR);
 		close(s->file.descriptor);
 		free(s->file.name);
 		return -1;
diff --git a/src/zscanner/scanner.rl b/src/zscanner/scanner.rl
index e85d1b086..3a36dd4b3 100644
--- a/src/zscanner/scanner.rl
+++ b/src/zscanner/scanner.rl
@@ -277,6 +277,13 @@ int zs_scanner_parse_file(zs_scanner_t *s,
 		return -1;
 	}
 
+	// Getting OS page size.
+	page_size = sysconf(_SC_PAGESIZE);
+	if (page_size <= 0) {
+		ERR(ZS_SYSTEM);
+		return -1;
+	}
+
 	// Copying file name.
 	s->file.name = strdup(file_name);
 
@@ -301,9 +308,6 @@ int zs_scanner_parse_file(zs_scanner_t *s,
 		return -1;
 	}
 
-	// Getting OS page size.
-	page_size = sysconf(_SC_PAGESIZE);
-
 	// Getting file information.
 	if (fstat(s->file.descriptor, &file_stat) == -1) {
 		ERR(ZS_FILE_FSTAT);
@@ -314,7 +318,7 @@ int zs_scanner_parse_file(zs_scanner_t *s,
 
 	// Check for directory.
 	if (S_ISDIR(file_stat.st_mode)) {
-		ERR(ZS_FILE_DIRECTORY);
+		ERR(ZS_FILE_DIR);
 		close(s->file.descriptor);
 		free(s->file.name);
 		return -1;
diff --git a/src/zscanner/tests/data/06-3_INCLUDE.out b/src/zscanner/tests/data/06-3_INCLUDE.out
index 8a5289b0b..ce2cc2527 100644
--- a/src/zscanner/tests/data/06-3_INCLUDE.out
+++ b/src/zscanner/tests/data/06-3_INCLUDE.out
@@ -1,2 +1,2 @@
-ERROR=ZS_FILE_DIRECTORY
+ERROR=ZS_FILE_DIR
 ------
-- 
GitLab