void preproc_push(FILE *f, const char *fname, int is_sysh) { if(file_stack_idx >= 0) file_stack[file_stack_idx].line_no = current_line; /* save state */ file_stack_idx++; if(file_stack_idx == countof(file_stack)) CPP_DIE("too many includes"); #ifdef DO_CHDIR char *wd; curwdfd = open(".", O_RDONLY); if(curwdfd == -1) ppdie(p, "open(\".\"): %s", strerror(errno)); /* make sure everything is relative to the file */ wd = udirname(p->fname); if(chdir(wd)) ppdie(p, "chdir(\"%s\"): %s (for %s)", wd, strerror(errno), p->fname); free(wd); #endif /* setup new state */ set_current_fname(fname); file_stack[file_stack_idx].file = f; file_stack[file_stack_idx].fname = ustrdup(fname); file_stack[file_stack_idx].line_no = current_line = 1; file_stack[file_stack_idx].is_sysh = is_sysh; preproc_emit_line_info_top(LINEINFO_START_OF_FILE); }
void preproc_push(FILE *f, const char *fname) { if(file_stack_idx >= 0) file_stack[file_stack_idx].line_no = current_line; /* save state */ file_stack_idx++; if(file_stack_idx == ARRAY_LEN(file_stack)) die("too many includes"); #ifdef DO_CHDIR char *wd; curwdfd = open(".", O_RDONLY); if(curwdfd == -1) ppdie(p, "open(\".\"): %s", strerror(errno)); /* make sure everything is relative to the file */ wd = udirname(p->fname); if(chdir(wd)) ppdie(p, "chdir(\"%s\"): %s (for %s)", wd, strerror(errno), p->fname); free(wd); #endif /* setup new state */ file_stack[file_stack_idx].file = f; file_stack[file_stack_idx].fname = ustrdup(fname); file_stack[file_stack_idx].line_no = current_line = 1; preproc_out_info(); }
static void preproc_pop(void) { if(!file_stack_idx) ICE("file stack idx = 0 on pop()"); free(file_stack[file_stack_idx].fname); file_stack_idx--; #ifdef DO_CHDIR if(curwdfd != -1){ if(fchdir(curwdfd) == -1) ppdie(p, "chdir(-): %s", strerror(errno)); close(curwdfd); } #endif /* restore state */ current_line = file_stack[file_stack_idx].line_no; set_current_fname(file_stack[file_stack_idx].fname); preproc_emit_line_info_top(LINEINFO_RETURN_TO_FILE); }
void preproc_pop(void) { if(!file_stack_idx) ICE("file stack idx = 0 on pop()"); free(file_stack[file_stack_idx].fname); file_stack_idx--; #ifdef DO_CHDIR if(curwdfd != -1){ if(fchdir(curwdfd) == -1) ppdie(p, "chdir(-): %s", strerror(errno)); close(curwdfd); } #endif /* restore state */ current_line = file_stack[file_stack_idx].line_no - 1; current_fname = file_stack[file_stack_idx].fname; preproc_out_info(); }