#include <memory.h>
#include <errno.h>
#include "files.h"
+#include "common.h"
#include "tokenizer.h"
static int verbose = 0;
if(!verbose)
return;
va_start(arglist, format);
- vsprintf(buf, format, arglist);
+ vsnprintf(buf, sizeof(buf)-1, format, arglist);
va_end(arglist);
l = strlen(buf);
while(l && buf[l-1]=='\n') {
int current_column=0;
char* current_filename=0;
char* current_filename_short=0;
+char* current_filename_long=0;
include_dir_t* current_include_dirs=0;
#define MAX_INCLUDE_DEPTH 16
int column_stack[MAX_INCLUDE_DEPTH];
char* filename_stack[MAX_INCLUDE_DEPTH];
char* shortfilename_stack[MAX_INCLUDE_DEPTH];
+char* longfilename_stack[MAX_INCLUDE_DEPTH];
include_dir_t* includedir_stack[MAX_INCLUDE_DEPTH];
int include_stack_ptr = 0;
return 0;
}
-char*find_file(const char*filename)
+char*find_file(const char*filename, char error)
{
include_dir_t*i = current_include_dirs;
FILE*fi = 0;
return strdup(filename);
}
} else {
- if(!i) {
+ if(!i && error) {
as3_warning("Include directory stack is empty, while looking for file %s", filename);
}
while(i) {
i = i->next;
}
}
+ if(!error) {
+ return 0;
+ }
as3_error("Couldn't find file %s", filename);
i = current_include_dirs;
line_stack[include_stack_ptr] = current_line;
column_stack[include_stack_ptr] = current_column;
shortfilename_stack[include_stack_ptr] = current_filename_short;
+ longfilename_stack[include_stack_ptr] = current_filename_long;
filename_stack[include_stack_ptr] = current_filename;
includedir_stack[include_stack_ptr] = current_include_dirs;
current_line=1;
current_column=0;
- current_filename = strdup(filename);
+ current_filename = strdup(name);
current_filename_short = strdup(name);
+ current_filename_long = strdup(filename);
}
FILE*enter_file2(const char*name, const char*filename, void*state)
} else {
free(current_filename);current_filename = filename_stack[include_stack_ptr];
free(current_filename_short);current_filename_short = shortfilename_stack[include_stack_ptr];
+ free(current_filename_long);current_filename_long = longfilename_stack[include_stack_ptr];
current_column = column_stack[include_stack_ptr];
current_line = line_stack[include_stack_ptr];
del_include_dirs(includedir_stack[include_stack_ptr], current_include_dirs);