moved around


git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@148 59561ff5-6e30-0410-9f3c-9617f08c8826
diff --git a/libasn1compiler/asn1c_compat.c b/libasn1compiler/asn1c_compat.c
index 44ba3e6..1a402bf 100644
--- a/libasn1compiler/asn1c_compat.c
+++ b/libasn1compiler/asn1c_compat.c
@@ -1,8 +1,6 @@
+#include "asn1c_internal.h"
 #include <asn1c_compat.h>
 
-#include <string.h>
-#include <errno.h>
-
 #ifdef	HAVE_SYS_PARAM_H
 #include <sys/param.h>	/* For MAXPATHLEN */
 #endif
@@ -11,6 +9,63 @@
 #define	MAXPATHLEN	1024
 #endif
 
+#ifndef	DEFFILEMODE	/* Normally in <sys/stat.h> */
+#define	DEFFILEMODE	(S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)
+#endif
+
+FILE *
+asn1c_open_file(const char *name, const char *ext) {
+	int created = 1;
+	struct stat sb;
+	char *fname;
+	int len;
+	FILE *fp;
+	int fd;
+
+	/*
+	 * Compute filenames.
+	 */
+	len = strlen(name) + strlen(ext) + 1;
+	fname = alloca(len);
+	snprintf(fname, len, "%s%s", name, ext);
+
+	/*
+	 * Create files.
+	 */
+	fd = open(fname, O_CREAT | O_EXCL | O_WRONLY, DEFFILEMODE);
+	if(fd == -1 && errno == EEXIST) {
+		fd = open(fname, O_WRONLY, DEFFILEMODE);
+		created = 0;
+	}
+	if(fd == -1) {
+		perror(fname);
+		return NULL;
+	}
+
+	/*
+	 * Check sanity.
+	 */
+	if(fstat(fd, &sb) || !S_ISREG(sb.st_mode)) {
+		fprintf(stderr, "%s: Not a regular file\n", fname);
+		if(created) unlink(fname);
+		close(fd);
+		return NULL;
+	}
+
+	(void)ftruncate(fd, 0);
+
+	/*
+	 * Convert file descriptor into file pointer.
+	 */
+	fp = fdopen(fd, "w");
+	if(fp == NULL) {
+		if(created) unlink(fname);
+		close(fd);
+	}
+	return fp;
+}
+
+
 char *
 a1c_basename(const char *path) {
 	static char strbuf[MAXPATHLEN];
@@ -33,7 +88,7 @@
 
 	for(name = pend; name > path && name[-1] != '/'; name--);
 
-	if((pend - name) >= sizeof(strbuf) - 1) {
+	if((pend - name) >= (int)sizeof(strbuf) - 1) {
 		errno = ENAMETOOLONG;
 		return 0;
 	}
@@ -79,7 +134,7 @@
 		return strbuf;
 	}
 
-	if((last - path) >= sizeof(strbuf)) {
+	if((last - path) >= (int)sizeof(strbuf)) {
 		errno = ENAMETOOLONG;
 		return 0;
 	}
diff --git a/libasn1compiler/asn1c_compat.h b/libasn1compiler/asn1c_compat.h
index 9461b78..e80e2e7 100644
--- a/libasn1compiler/asn1c_compat.h
+++ b/libasn1compiler/asn1c_compat.h
@@ -5,6 +5,15 @@
 #include <config.h>
 #endif
 
+/*
+ * Open the arbitrary file by its base name and extension.
+ */
+FILE *asn1c_open_file(const char *base_part, const char *extension);
+
+/*
+ * Obtain base name and directory name of a path.
+ * Some systems have them in <libgen.h> as dirname(3) and basename(3).
+ */
 char *a1c_basename(const char *path);
 char *a1c_dirname(const char *path);
 
diff --git a/libasn1compiler/asn1c_misc.c b/libasn1compiler/asn1c_misc.c
index 257e02c..ee43696 100644
--- a/libasn1compiler/asn1c_misc.c
+++ b/libasn1compiler/asn1c_misc.c
@@ -1,10 +1,6 @@
 #include "asn1c_internal.h"
 #include <asn1fix_export.h>
 
-#ifndef	DEFFILEMODE	/* Normally in <sys/stat.h> */
-#define	DEFFILEMODE	(S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)
-#endif
-
 /*
  * Construct identifier from multiple parts.
  * Convert unsafe characters to underscores.
@@ -85,60 +81,6 @@
 	return storage;
 }
 
-FILE *
-asn1c_open_file(arg_t *arg, const char *name, const char *ext) {
-	int created = 1;
-	struct stat sb;
-	char *fname;
-	int len;
-	FILE *fp;
-	int fd;
-
-	(void)arg;	/* Unused argument */
-
-	/*
-	 * Compute filenames.
-	 */
-	len = strlen(name) + strlen(ext) + 1;
-	fname = alloca(len);
-	snprintf(fname, len, "%s%s", name, ext);
-
-	/*
-	 * Create files.
-	 */
-	fd = open(fname, O_CREAT | O_EXCL | O_WRONLY, DEFFILEMODE);
-	if(fd == -1 && errno == EEXIST) {
-		fd = open(fname, O_WRONLY, DEFFILEMODE);
-		created = 0;
-	}
-	if(fd == -1) {
-		perror(fname);
-		return NULL;
-	}
-
-	/*
-	 * Check sanity.
-	 */
-	if(fstat(fd, &sb) || !S_ISREG(sb.st_mode)) {
-		fprintf(stderr, "%s: Not a regular file\n", fname);
-		if(created) unlink(fname);
-		close(fd);
-		return NULL;
-	}
-
-	(void)ftruncate(fd, 0);
-
-	/*
-	 * Convert file descriptor into file pointer.
-	 */
-	fp = fdopen(fd, "w");
-	if(fp == NULL) {
-		if(created) unlink(fname);
-		close(fd);
-	}
-	return fp;
-}
-
 char *
 asn1c_type_name(arg_t *arg, asn1p_expr_t *expr, enum tnfmt _format) {
 	char *typename;
diff --git a/libasn1compiler/asn1c_misc.h b/libasn1compiler/asn1c_misc.h
index 2f82b0b..325892a 100644
--- a/libasn1compiler/asn1c_misc.h
+++ b/libasn1compiler/asn1c_misc.h
@@ -20,9 +20,4 @@
 };
 char *asn1c_type_name(arg_t *arg, asn1p_expr_t *expr, enum tnfmt _format);
 
-/*
- * Open the arbitrary file by its base name and extension.
- */
-FILE *asn1c_open_file(arg_t *arg, const char *base_part, const char *extension);
-
 #endif	/* _ASN1_COMPILER_MISC_H_ */