diff --git a/libasn1compiler/asn1c_compat.c b/libasn1compiler/asn1c_compat.c
index 4a150d5..6c47d02 100644
--- a/libasn1compiler/asn1c_compat.c
+++ b/libasn1compiler/asn1c_compat.c
@@ -36,8 +36,9 @@
 #endif
 
 FILE *
-asn1c_open_file(const char* destdir, const char *name, const char *ext, char **opt_tmpname) {
-	char fname[PATH_MAX];
+asn1c_open_file(const char *destdir, const char *name, const char *ext,
+                char **opt_tmpname) {
+    char fname[PATH_MAX];
 	int created = 1;
 #ifndef	_WIN32
 	struct stat sb;
@@ -49,10 +50,8 @@
 	/*
 	 * Compute filenames.
 	 */
-    ret = snprintf(fname, sizeof(fname), "%s%s%s%s",
-                   opt_tmpname ? "" : destdir,
-                   name, ext,
-                   opt_tmpname ? ".XXXXXX" : "");
+    ret = snprintf(fname, sizeof(fname), "%s%s%s%s", destdir ? destdir : "",
+                   name, ext, opt_tmpname ? ".XXXXXX" : "");
     assert(ret > 0 && ret < (ssize_t)sizeof(fname));
 
     if(opt_tmpname) {
@@ -61,8 +60,10 @@
 		 */
 		fd = mkstemp(fname);
 #ifndef	_WIN32
-		/* fchmod() does not respect umask */
-		(void)fchmod(fd, REASONABLE_FILE_MODE);
+        if(fd != -1) {
+            /* fchmod() does not respect umask */
+            (void)fchmod(fd, REASONABLE_FILE_MODE);
+        }
 #endif
 	} else {
 		/*
@@ -75,8 +76,14 @@
 		}
 	}
 	if(fd == -1) {
-		perror(fname);
-		return NULL;
+        struct stat st;
+        if(destdir && stat(destdir, &st) == -1) {
+            fprintf(stderr, "%s: No such directory\n", destdir);
+            return NULL;
+        } else {
+            perror(fname);
+            return NULL;
+        }
 	}
 
 #ifndef	_WIN32
diff --git a/libasn1compiler/asn1c_save.c b/libasn1compiler/asn1c_save.c
index 291fc44..79f3b24 100644
--- a/libasn1compiler/asn1c_save.c
+++ b/libasn1compiler/asn1c_save.c
@@ -40,8 +40,10 @@
 
 static int asn1c_dump_streams(arg_t *arg, asn1c_dep_chainset *, const char *, int, char **);
 static int asn1c_print_streams(arg_t *arg);
-static int asn1c_save_streams(arg_t *arg, asn1c_dep_chainset *, const char *, int, char **);
-static int asn1c_copy_over(arg_t *arg, const char *destdir, const char *path, const char *msg);
+static int asn1c_save_streams(arg_t *arg, asn1c_dep_chainset *, const char *,
+                              int, char **);
+static int asn1c_copy_over(arg_t *arg, const char *destdir, const char *path,
+                           const char *msg);
 static int identical_files(const char *fname1, const char *fname2);
 static int need_to_generate_pdu_collection(arg_t *arg);
 static abuf *generate_pdu_collection(arg_t *arg);
@@ -55,8 +57,9 @@
 
 static int
 asn1c__save_library_makefile(arg_t *arg, const asn1c_dep_chainset *deps,
-                             const char *datadir, const char *destdir, const char *makefile_name) {
-	asn1p_module_t *mod;
+                             const char *datadir, const char *destdir,
+                             const char *makefile_name) {
+    asn1p_module_t *mod;
     FILE *mkf;
 
 	mkf = asn1c_open_file(destdir, makefile_name, "", 0);
@@ -80,9 +83,10 @@
 		TQ_FOR(arg->expr, &(mod->members), next) {
 			if(asn1_lang_map[arg->expr->meta_type]
 				[arg->expr->expr_type].type_cb) {
-				safe_fprintf(mkf, "\t\\\n\t%s%s.h", destdir,
-				asn1c_make_identifier(AMI_MASK_ONLY_SPACES, arg->expr, 0));
-			}
+                safe_fprintf(
+                    mkf, "\t\\\n\t%s%s.h", destdir,
+                    asn1c_make_identifier(AMI_MASK_ONLY_SPACES, arg->expr, 0));
+            }
 		}
 	}
 	safe_fprintf(mkf, "\n\n");
@@ -118,8 +122,8 @@
 				where[0] = '\0';
 			}
 
-			if(asn1c_copy_over(arg, destdir, dstpath, where) == -1) {
-				safe_fprintf(mkf, ">>>ABORTED<<<");
+            if(asn1c_copy_over(arg, destdir, dstpath, where) == -1) {
+                safe_fprintf(mkf, ">>>ABORTED<<<");
 				fclose(mkf);
 				return -1;
 			}
@@ -131,8 +135,9 @@
 			} else {
 				what_kind = "SRCS";
 			}
-			safe_fprintf(mkf, "ASN_MODULE_%s+=%s%s\n", what_kind, destdir, fname);
-		}
+            safe_fprintf(mkf, "ASN_MODULE_%s+=%s%s\n", what_kind, destdir,
+                         fname);
+        }
 
 		asn1c_dep_chain_free(dlist);
 	}
@@ -154,81 +159,85 @@
 		"libasncodec_la_CFLAGS=$(ASN_MODULE_CFLAGS)\n"
 		"libasncodec_la_LDFLAGS=-lm\n", destdir);
 	fclose(mkf);
-	safe_fprintf(stderr, "Generated %s%s\n", destdir, makefile_name);
+    safe_fprintf(stderr, "Generated %s%s\n", destdir, makefile_name);
 
     return 0;
 }
 
 static int
-asn1c__save_example_mk_makefile(arg_t *arg, const asn1c_dep_chainset *deps, const char *datadir,
-                                const char *destdir, const char *makefile_name,
+asn1c__save_example_mk_makefile(arg_t *arg, const asn1c_dep_chainset *deps,
+                                const char *datadir, const char *destdir,
+                                const char *makefile_name,
                                 const char *library_makefile_name, int argc,
                                 char **argv) {
-	FILE *mkf;
-	asn1c_dep_chain *dlist = asn1c_deps_flatten(deps, FDEP_CONVERTER);
+    FILE *mkf;
+    asn1c_dep_chain *dlist = asn1c_deps_flatten(deps, FDEP_CONVERTER);
 
-	/* Generate converter-example.mk snippet */
-	mkf = asn1c_open_file(destdir, makefile_name, "", 0);
-	if(mkf == NULL) {
-		perror(makefile_name);
-		return -1;
-	}
-	safe_fprintf(mkf,
-	             "include %s%s\n\n"
-	             "LIBS += -lm\n"
-	             "CFLAGS += $(ASN_MODULE_CFLAGS) %s%s-I.\n"
-	             "ASN_LIBRARY ?= libasncodec.a\n"
-	             "ASN_PROGRAM ?= converter-example\n"
-	             "ASN_PROGRAM_SRCS ?= ",
-	             destdir, library_makefile_name,
-	             (arg->flags & A1C_PDU_TYPE) ? generate_pdu_C_definition() : "",
-	             need_to_generate_pdu_collection(arg) ? "-DASN_PDU_COLLECTION " : "");
+    /* Generate converter-example.mk snippet */
+    mkf = asn1c_open_file(destdir, makefile_name, "", 0);
+    if(mkf == NULL) {
+        perror(makefile_name);
+        return -1;
+    }
+    safe_fprintf(
+        mkf,
+        "include %s%s\n\n"
+        "LIBS += -lm\n"
+        "CFLAGS += $(ASN_MODULE_CFLAGS) %s%s-I.\n"
+        "ASN_LIBRARY ?= libasncodec.a\n"
+        "ASN_PROGRAM ?= converter-example\n"
+        "ASN_PROGRAM_SRCS ?= ",
+        destdir, library_makefile_name,
+        (arg->flags & A1C_PDU_TYPE) ? generate_pdu_C_definition() : "",
+        need_to_generate_pdu_collection(arg) ? "-DASN_PDU_COLLECTION " : "");
 
-	if(dlist) {
-            for(size_t i = 0; i < dlist->deps_count; i++) {
-                char dstpath[PATH_MAX];
-                int ret = snprintf(dstpath, sizeof(dstpath), "%s/%s", datadir,
-                                   dlist->deps[i]->filename);
-                assert(ret > 0 && (size_t)ret < sizeof(dstpath));
-                if(asn1c_copy_over(arg, destdir, dstpath, "implicit") == -1) {
-                    safe_fprintf(mkf, ">>>ABORTED<<<");
-                    fclose(mkf);
-                    return -1;
+    if(dlist) {
+        for(size_t i = 0; i < dlist->deps_count; i++) {
+            char dstpath[PATH_MAX];
+            int ret = snprintf(dstpath, sizeof(dstpath), "%s/%s", datadir,
+                               dlist->deps[i]->filename);
+            assert(ret > 0 && (size_t)ret < sizeof(dstpath));
+            if(asn1c_copy_over(arg, destdir, dstpath, "implicit") == -1) {
+                safe_fprintf(mkf, ">>>ABORTED<<<");
+                fclose(mkf);
+                return -1;
 			}
-                safe_fprintf(mkf, "\\\n\t%s%s", destdir, dlist->deps[i]->filename);
-		}
-            asn1c_dep_chain_free(dlist);
-	}
+            safe_fprintf(mkf, "\\\n\t%s%s", destdir, dlist->deps[i]->filename);
+        }
+        asn1c_dep_chain_free(dlist);
+    }
 
-	if(need_to_generate_pdu_collection(arg)) {
-		safe_fprintf(mkf, "\\\n\t%spdu_collection.c", destdir);
-		if(generate_pdu_collection_file(arg, destdir))
-			return -1;
-	}
+    if(need_to_generate_pdu_collection(arg)) {
+        safe_fprintf(mkf, "\\\n\t%spdu_collection.c", destdir);
+        if(generate_pdu_collection_file(arg, destdir)) {
+            return -1;
+        }
+    }
 
-	safe_fprintf(
-		mkf,
-		"\n\nall: $(ASN_PROGRAM)\n"
-		"\n$(ASN_PROGRAM): $(ASN_LIBRARY) $(ASN_PROGRAM_SRCS:.c=.o)"
-		"\n\t$(CC) $(CFLAGS) $(CPPFLAGS) -o $(ASN_PROGRAM) $(ASN_PROGRAM_SRCS:.c=.o) $(LDFLAGS) $(ASN_LIBRARY) $(LIBS)\n"
-		"\n$(ASN_LIBRARY): $(ASN_MODULE_SRCS:.c=.o)"
-		"\n\t$(AR) rcs $@ $(ASN_MODULE_SRCS:.c=.o)\n"
-		"\n.SUFFIXES:"
-		"\n.SUFFIXES: .c .o\n"
-		"\n.c.o:"
-		"\n\t$(CC) $(CFLAGS) -o $@ -c $<\n"
-		"\nclean:"
-		"\n\trm -f $(ASN_PROGRAM) $(ASN_LIBRARY)"
-		"\n\trm -f $(ASN_MODULE_SRCS:.c=.o) $(ASN_PROGRAM_SRCS:.c=.o)\n"
-		"\nregen: regenerate-from-asn1-source\n"
-		"\nregenerate-from-asn1-source:\n\t");
+    safe_fprintf(
+        mkf,
+        "\n\nall: $(ASN_PROGRAM)\n"
+        "\n$(ASN_PROGRAM): $(ASN_LIBRARY) $(ASN_PROGRAM_SRCS:.c=.o)"
+        "\n\t$(CC) $(CFLAGS) $(CPPFLAGS) -o $(ASN_PROGRAM) "
+        "$(ASN_PROGRAM_SRCS:.c=.o) $(LDFLAGS) $(ASN_LIBRARY) $(LIBS)\n"
+        "\n$(ASN_LIBRARY): $(ASN_MODULE_SRCS:.c=.o)"
+        "\n\t$(AR) rcs $@ $(ASN_MODULE_SRCS:.c=.o)\n"
+        "\n.SUFFIXES:"
+        "\n.SUFFIXES: .c .o\n"
+        "\n.c.o:"
+        "\n\t$(CC) $(CFLAGS) -o $@ -c $<\n"
+        "\nclean:"
+        "\n\trm -f $(ASN_PROGRAM) $(ASN_LIBRARY)"
+        "\n\trm -f $(ASN_MODULE_SRCS:.c=.o) $(ASN_PROGRAM_SRCS:.c=.o)\n"
+        "\nregen: regenerate-from-asn1-source\n"
+        "\nregenerate-from-asn1-source:\n\t");
 
-	for(int i = 0; i < argc; i++)
-		safe_fprintf(mkf, "%s%s", i ? " " : "", argv[i]);
+    for(int i = 0; i < argc; i++)
+        safe_fprintf(mkf, "%s%s", i ? " " : "", argv[i]);
 	safe_fprintf(mkf, "\n\n");
 
-	fclose(mkf);
-	safe_fprintf(stderr, "Generated %s%s\n", destdir, makefile_name);
+    fclose(mkf);
+    safe_fprintf(stderr, "Generated %s%s\n", destdir, makefile_name);
 
 	return 0;
 }
@@ -244,7 +253,6 @@
 	/* Generate example.am snippet */
 	mkf = asn1c_open_file(destdir, makefile_name, "", 0);
 	if(mkf == NULL) {
-		perror(makefile_name);
 		return -1;
 	}
 	safe_fprintf(mkf,
@@ -387,7 +395,8 @@
             TQ_FOR(arg->expr, &(mod->members), next) {
                 if(asn1_lang_map[arg->expr->meta_type][arg->expr->expr_type]
                        .type_cb) {
-                    if(asn1c_dump_streams(arg, deps, destdir, optc, argv)) break;
+                    ret = asn1c_dump_streams(arg, deps, destdir, optc, argv);
+                    if(ret) break;
                 }
             }
         }
@@ -401,6 +410,8 @@
             break;
         }
 
+        if(ret) break;
+
         ret = asn1c__save_library_makefile(arg, deps, datadir, destdir,
                                            library_makefile);
         if(ret) break;
@@ -432,8 +443,8 @@
  * Dump the streams.
  */
 static int
-asn1c_dump_streams(arg_t *arg, asn1c_dep_chainset *deps, const char* destdir, int optc,
-                   char **argv) {
+asn1c_dump_streams(arg_t *arg, asn1c_dep_chainset *deps, const char *destdir,
+                   int optc, char **argv) {
     if(arg->flags & A1C_PRINT_COMPILED) {
 		return asn1c_print_streams(arg);
 	} else {
@@ -465,8 +476,8 @@
 }
 
 static int
-asn1c_save_streams(arg_t *arg, asn1c_dep_chainset *deps, const char* destdir, int optc,
-                   char **argv) {
+asn1c_save_streams(arg_t *arg, asn1c_dep_chainset *deps, const char *destdir,
+                   int optc, char **argv) {
     asn1p_expr_t *expr = arg->expr;
 	compiler_streams_t *cs = expr->data;
 	out_chunk_t *ot;
@@ -486,12 +497,16 @@
 
 	filename = strdup(asn1c_make_identifier(AMI_MASK_ONLY_SPACES, expr, (char*)0));
 	fp_c = asn1c_open_file(destdir, filename, ".c", &tmpname_c);
-	fp_h = asn1c_open_file(destdir, filename, ".h", &tmpname_h);
-	if(fp_c == NULL || fp_h == NULL) {
-		if(fp_c) { unlink(tmpname_c); free(tmpname_c); fclose(fp_c); }
-		if(fp_h) { unlink(tmpname_h); free(tmpname_h); fclose(fp_h); }
-		return -1;
-	}
+    if(fp_c == NULL) {
+        return -1;
+    }
+    fp_h = asn1c_open_file(destdir, filename, ".h", &tmpname_h);
+    if(fp_h == NULL) {
+        unlink(tmpname_c);
+        free(tmpname_c);
+        fclose(fp_c);
+        return -1;
+    }
 
 	generate_preamble(arg, fp_c, optc, argv);
 	generate_preamble(arg, fp_h, optc, argv);
@@ -690,7 +705,8 @@
 }
 
 static int
-asn1c_copy_over(arg_t *arg, const char* destdir, const char *path, const char *msg) {
+asn1c_copy_over(arg_t *arg, const char *destdir, const char *path,
+                const char *msg) {
 #ifdef	_WIN32
 	int use_real_copy = 1;
 #else
@@ -741,7 +757,7 @@
 
 
 static int
-generate_pdu_collection_file(arg_t *arg, const char* destdir) {
+generate_pdu_collection_file(arg_t *arg, const char *destdir) {
     abuf *buf = generate_pdu_collection(arg);
     assert(buf);
 
