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_ */