* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-#include <time.h>
-#include <stdio.h>
#include <stdlib.h>
#include <string.h>
OPTS_OPTION_U16(OPTION_MEMDUMPCOLS) = (uint16_t)strtol(memdumpcols, NULL, 10);
continue;
}
+ if (options_long_gcc("progsrc", &argc, &argv, &argarg)) {
+ OPTS_OPTION_STR(OPTION_PROGSRC) = argarg;
+ continue;
+ }
/* show defaults (like pathscale) */
if (!strcmp(argv[0]+1, "show-defaults")) {
}
/* returns the line number, or -1 on error */
-static bool progs_nextline(char **out, size_t *alen,FILE *src) {
+static bool progs_nextline(char **out, size_t *alen, fs_file_t *src) {
int len;
char *line;
char *start;
int main(int argc, char **argv) {
size_t itr;
int retval = 0;
- bool opts_output_free = false;
bool operators_free = false;
bool progs_src = false;
- FILE *outfile = NULL;
+ fs_file_t *outfile = NULL;
struct parser_s *parser = NULL;
struct ftepp_s *ftepp = NULL;
}
if (!vec_size(items)) {
- FILE *src;
- char *line = NULL;
- size_t linelen = 0;
- bool hasline = false;
+ fs_file_t *src;
+ char *line = NULL;
+ size_t linelen = 0;
+ bool hasline = false;
progs_src = true;
- src = fs_file_open("progs.src", "rb");
+ src = fs_file_open(OPTS_OPTION_STR(OPTION_PROGSRC), "rb");
if (!src) {
- con_err("failed to open `progs.src` for reading\n");
+ con_err("failed to open `%s` for reading\n", OPTS_OPTION_STR(OPTION_PROGSRC));
retval = 1;
goto cleanup;
}
item.type = TYPE_QC;
vec_push(items, item);
} else if (!opts_output_wasset) {
- OPTS_OPTION_STR(OPTION_OUTPUT) = util_strdup(line);
- opts_output_free = true;
+ OPTS_OPTION_DUP(OPTION_OUTPUT) = util_strdup(line);
hasline = true;
}
}
if (!OPTS_OPTION_BOOL(OPTION_PP_ONLY))
if(parser) parser_cleanup(parser);
- if (opts_output_free)
- mem_d(OPTS_OPTION_STR(OPTION_OUTPUT));
+
+ /* free allocated option strings */
+ for (itr = 0; itr < OPTION_COUNT; itr++)
+ if (OPTS_OPTION_DUPED(itr))
+ mem_d(OPTS_OPTION_STR(itr));
+
if (operators_free)
mem_d((void*)operators);
lex_cleanup();
stat_info();
+ if (!retval && compile_errors)
+ retval = 1;
return retval;
}