From 4b102255b52174eeb6051dc093245c36b83a6e6c Mon Sep 17 00:00:00 2001 From: Lev Walkin <vlm@lionet.info> Date: Thu, 19 Aug 2004 13:29:18 +0000 Subject: [PATCH] moved around --- libasn1compiler/asn1c_compat.c | 65 +++++++++++++++++++++++++++++++--- libasn1compiler/asn1c_compat.h | 9 +++++ libasn1compiler/asn1c_misc.c | 58 ------------------------------ libasn1compiler/asn1c_misc.h | 5 --- 4 files changed, 69 insertions(+), 68 deletions(-) diff --git a/libasn1compiler/asn1c_compat.c b/libasn1compiler/asn1c_compat.c index 44ba3e60..1a402bf4 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 @@ a1c_basename(const char *path) { 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 @@ a1c_dirname(const char *path) { 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 9461b781..e80e2e77 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 257e02c5..ee436960 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 @@ asn1c_make_identifier(int unsafe_only_spaces, char *arg1, ...) { 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 2f82b0b6..325892a5 100644 --- a/libasn1compiler/asn1c_misc.h +++ b/libasn1compiler/asn1c_misc.h @@ -20,9 +20,4 @@ enum tnfmt { }; 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_ */ -- GitLab