From 6c30ad1b1e210b2d0fc437372baefe7135dc403a Mon Sep 17 00:00:00 2001 From: rlar Date: Sat, 3 Aug 2013 21:49:15 +0200 Subject: [PATCH] inpcom.c, simplify `.include' file processing using inp_pathresolve_at() --- src/frontend/inpcom.c | 57 ++++++++++++++++--------------------------- 1 file changed, 21 insertions(+), 36 deletions(-) diff --git a/src/frontend/inpcom.c b/src/frontend/inpcom.c index 9733784a8..51a0df0e9 100644 --- a/src/frontend/inpcom.c +++ b/src/frontend/inpcom.c @@ -729,7 +729,6 @@ inp_read(FILE *fp, int call_depth, char *dir_name, bool comfile, bool intfile) /* now handle .include statements */ if (ciprefix(".include", buffer) || ciprefix(".inc", buffer)) { - char *copyy = NULL; char *y = NULL; char *s, *t; @@ -747,50 +746,36 @@ inp_read(FILE *fp, int call_depth, char *dir_name, bool comfile, bool intfile) controlled_exit(EXIT_FAILURE); } - if (*y == '~') { - copyy = cp_tildexpand(y); /* allocates memory, but can also return NULL */ - if (copyy) - y = copyy; /* reuse y, but remember, buffer still points to allocated memory */ - } - { - bool dir_name_flag = FALSE; - FILE *newfp = inp_pathopen(y, "r"); + char *y_resolved = inp_pathresolve_at(y, dir_name); + char *y_dir_name; + FILE *newfp; + + if (!y_resolved) { + fprintf(cp_err, "Error: Could not find include file %s\n", y); + rv . line_number = line_number; + rv . cc = NULL; + return rv; + } + + newfp = fopen(y_resolved, "r"); if (!newfp) { - char big_buff2[5000]; - - /* open file specified by .include statement */ - if (dir_name) - sprintf(big_buff2, "%s/%s", dir_name, y); - else - sprintf(big_buff2, "./%s", y); - - newfp = inp_pathopen(big_buff2, "r"); - if (!newfp) { - perror(y); - tfree(copyy); /* allocated by the cp_tildexpand() above */ - fprintf(cp_err, "Error: .include statement failed.\n"); - tfree(buffer); /* allocated by readline() above */ - controlled_exit(EXIT_FAILURE); - } - - dir_name_flag = TRUE; + fprintf(cp_err, "Error: .include statement failed.\n"); + tfree(buffer); /* allocated by readline() above */ + controlled_exit(EXIT_FAILURE); } - if (dir_name_flag == FALSE) { - char *y_dir_name = ngdirname(y); - newcard = inp_read(newfp, call_depth+1, y_dir_name, FALSE, FALSE) . cc; /* read stuff in include file into netlist */ - tfree(y_dir_name); - } else { - newcard = inp_read(newfp, call_depth+1, dir_name, FALSE, FALSE) . cc; /* read stuff in include file into netlist */ - } + y_dir_name = ngdirname(y_resolved); + + newcard = inp_read(newfp, call_depth+1, y_dir_name, FALSE, FALSE) . cc; /* read stuff in include file into netlist */ + + tfree(y_dir_name); + tfree(y_resolved); (void) fclose(newfp); } - tfree(copyy); /* allocated by the cp_tildexpand() above */ - /* Make the .include a comment */ *buffer = '*';