better error reporting when destination directory is not available
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);