int main(int argc, char **argv) { int ret; const char *file; const char *name = NULL; int optidx = 0; setprogname(argv[0]); if(getarg(args, num_args, argc, argv, &optidx)) usage(1); if(help_flag) usage(0); if(version_flag) { print_version(NULL); exit(0); } if (argc == optidx) { file = "stdin"; name = "stdin"; yyin = stdin; } else { file = argv[optidx]; yyin = fopen (file, "r"); if (yyin == NULL) err (1, "open %s", file); if (argc == optidx + 1) { char *p; name = estrdup(file); p = strrchr(name, '.'); if (p) *p = '\0'; } else name = argv[optidx + 1]; } init_generate (file, name); initsym (); ret = yyparse (); if(ret != 0 || error_flag != 0) exit(1); close_generate (); if (argc != optidx) fclose(yyin); return 0; }
int main(int argc, char **argv) { int ret; const char *file; const char *name = NULL; int optidx = 0; char **arg = NULL; size_t len = 0, i; setprogname(argv[0]); if(getarg(args, num_args, argc, argv, &optidx)) usage(1); if(help_flag) usage(0); if(version_flag) { print_version(NULL); exit(0); } if (argc == optidx) { file = "stdin"; name = "stdin"; yyin = stdin; } else { file = argv[optidx]; yyin = fopen (file, "r"); if (yyin == NULL) err (1, "open %s", file); if (argc == optidx + 1) { char *p; name = estrdup(file); p = strrchr(name, '.'); if (p) *p = '\0'; } else name = argv[optidx + 1]; } /* * Parse extra options file */ if (option_file) { char buf[1024]; FILE *opt; opt = fopen(option_file, "r"); if (opt == NULL) { perror("open"); exit(1); } arg = calloc(2, sizeof(arg[0])); if (arg == NULL) { perror("calloc"); exit(1); } arg[0] = option_file; arg[1] = NULL; len = 1; while (fgets(buf, sizeof(buf), opt) != NULL) { buf[strcspn(buf, "\n\r")] = '\0'; arg = realloc(arg, (len + 2) * sizeof(arg[0])); if (arg == NULL) { perror("malloc"); exit(1); } arg[len] = strdup(buf); if (arg[len] == NULL) { perror("strdup"); exit(1); } arg[len + 1] = NULL; len++; } fclose(opt); optidx = 0; if(getarg(args, num_args, len, arg, &optidx)) usage(1); if (len != optidx) { fprintf(stderr, "extra args"); exit(1); } } init_generate (file, name); if (one_code_file) generate_header_of_codefile(name); initsym (); ret = yyparse (); if(ret != 0 || error_flag != 0) exit(1); close_generate (); if (argc != optidx) fclose(yyin); if (one_code_file) close_codefile(); if (arg) { for (i = 1; i < len; i++) free(arg[i]); free(arg); } return 0; }