From eebb03a681273e699f09162aa8d2b670f093a74a Mon Sep 17 00:00:00 2001
From: Gabriele Baldassarre <gabriele@gabrielebaldassarre.com>
Date: Tue, 26 May 2020 08:17:32 +0000
Subject: More general error handling


diff --git a/reloc.h b/reloc.h
index bc18e52..ff9930c 100644
--- a/reloc.h
+++ b/reloc.h
@@ -1,10 +1,16 @@
 #ifndef __RELOC_H
 #define __RELOC_H
 
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
 #include <stdint.h>
 #include <assert.h>
 
+#ifndef HAVE_CONFIG_H
 #define RELEASE "1.0"
+#endif
 
 /* Represent bytes as 8-bit values tagged with meta-information. */
 /* List nodes (struct source) are arena-allocated; no need to track the references. */
diff --git a/sidreloc.c b/sidreloc.c
index 7714af5..f6d69f2 100644
--- a/sidreloc.c
+++ b/sidreloc.c
@@ -20,15 +20,23 @@
  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
 
+#include "reloc.h"
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdint.h>
 #include <string.h>
-#include <err.h>
 #include <getopt.h>
 #include <math.h>
 
-#include "reloc.h"
+#ifdef HAVE_ERR_H
+#include <err.h>
+#endif
+
+#ifndef HAVE_ERRX
+#include <stdarg.h>
+#include <errno.h>
+#endif
 
 struct sidheader {
 	uint8_t			rsid;
@@ -73,6 +81,34 @@ static int nmi_reported;
 
 static struct core oldcore, newcore;
 
+#ifndef HAVE_ERRX
+/*  Some posix haven't this error function
+	so, we define a rough equivalent */
+static void errx(int eval, const char *fmt, ...){
+	va_list arglist;
+   	va_start(arglist, fmt);
+	fprintf(stderr,"%s: ", "sidreloc");
+	vfprintf(stderr,fmt, arglist);
+	fprintf(stderr,"\n");
+	va_end(arglist);
+	exit(eval);
+}
+#endif
+
+#ifndef HAVE_ERR
+/*  Some posix haven't this error function
+	so, we define a rough equivalent */
+static void err(int eval, const char *fmt, ...){
+	va_list arglist;
+   	va_start(arglist, fmt);
+   	fprintf(stderr, " %s: ", "sidreloc");
+	vfprintf(stderr, fmt, arglist);
+	fprintf(stderr, ": %s\n", strerror(errno));
+   	va_end(arglist);
+	exit(eval);
+}
+#endif
+
 static int readheader(struct sidheader *head, uint8_t *data, int filesize) {
 	if(filesize <= 0x80) return 1;
 	if(data[0] == 'P') {
@@ -817,3 +853,4 @@ int main(int argc, char **argv) {
 
 	return RET_SUCCESS | exitbits;
 }
+
diff --git a/solver.c b/solver.c
index 7b9fcb6..5323add 100644
--- a/solver.c
+++ b/solver.c
@@ -20,15 +20,19 @@
  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
 
+#include "reloc.h"
+
 #include <assert.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdint.h>
 #include <string.h>
+
+#ifdef HAVE_ERR_H
 #include <err.h>
-#include <getopt.h>
+#endif
 
-#include "reloc.h"
+#include <getopt.h>
 
 #define HASHSIZE 8192
 
-- 
2.26.0

