git.asbjorn.biz
/
swftools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
new function as3_parse_bytearray
[swftools.git]
/
lib
/
as3
/
files.c
diff --git
a/lib/as3/files.c
b/lib/as3/files.c
index
e30b112
..
cf6145b
100644
(file)
--- a/
lib/as3/files.c
+++ b/
lib/as3/files.c
@@
-23,7
+23,9
@@
#include <stdio.h>
#include <stdarg.h>
#include <memory.h>
#include <stdio.h>
#include <stdarg.h>
#include <memory.h>
+#include <errno.h>
#include "files.h"
#include "files.h"
+#include "tokenizer.h"
static int verbose = 0;
static void dbg(const char*format, ...)
static int verbose = 0;
static void dbg(const char*format, ...)
@@
-55,6
+57,7
@@
typedef struct _include_dir {
int current_line=1;
int current_column=0;
char* current_filename=0;
int current_line=1;
int current_column=0;
char* current_filename=0;
+char* current_filename_short=0;
include_dir_t* current_include_dirs=0;
#define MAX_INCLUDE_DEPTH 16
include_dir_t* current_include_dirs=0;
#define MAX_INCLUDE_DEPTH 16
@@
-63,6
+66,7
@@
void*include_stack[MAX_INCLUDE_DEPTH];
int line_stack[MAX_INCLUDE_DEPTH];
int column_stack[MAX_INCLUDE_DEPTH];
char* filename_stack[MAX_INCLUDE_DEPTH];
int line_stack[MAX_INCLUDE_DEPTH];
int column_stack[MAX_INCLUDE_DEPTH];
char* filename_stack[MAX_INCLUDE_DEPTH];
+char* shortfilename_stack[MAX_INCLUDE_DEPTH];
include_dir_t* includedir_stack[MAX_INCLUDE_DEPTH];
int include_stack_ptr = 0;
include_dir_t* includedir_stack[MAX_INCLUDE_DEPTH];
int include_stack_ptr = 0;
@@
-129,6
+133,9
@@
char*find_file(char*filename)
}
return 0;
}
}
return 0;
}
+ if(!i) {
+ as3_warning("Include directory stack is empty, while looking for file %s", filename);
+ }
while(i) {
char*p = concat_paths(i->path, filename);
fi = fopen(p, "rb");
while(i) {
char*p = concat_paths(i->path, filename);
fi = fopen(p, "rb");
@@
-143,13
+150,15
@@
char*find_file(char*filename)
char*enter_file(char*filename, void*state)
{
char*enter_file(char*filename, void*state)
{
+ filename = strdup(filename);
+
if(include_stack_ptr >= MAX_INCLUDE_DEPTH) {
if(include_stack_ptr >= MAX_INCLUDE_DEPTH) {
- syntaxerror("Includes nested too deeply");
+ as3_error("Includes nested too deeply");
exit(1);
}
char*fullfilename = find_file(filename);
if(!fullfilename) {
exit(1);
}
char*fullfilename = find_file(filename);
if(!fullfilename) {
- syntaxerror("Couldn't find file %s", filename);
+ as3_error("Couldn't find file %s", filename);
include_dir_t*i = current_include_dirs;
while(i) {
fprintf(stderr, "include dir: %s\n", i->path);
include_dir_t*i = current_include_dirs;
while(i) {
fprintf(stderr, "include dir: %s\n", i->path);
@@
-160,6
+169,7
@@
char*enter_file(char*filename, void*state)
include_stack[include_stack_ptr] = state;
line_stack[include_stack_ptr] = current_line;
column_stack[include_stack_ptr] = current_column;
include_stack[include_stack_ptr] = state;
line_stack[include_stack_ptr] = current_line;
column_stack[include_stack_ptr] = current_column;
+ shortfilename_stack[include_stack_ptr] = current_filename_short;
filename_stack[include_stack_ptr] = current_filename;
includedir_stack[include_stack_ptr] = current_include_dirs;
add_include_dir(get_path(fullfilename));
filename_stack[include_stack_ptr] = current_filename;
includedir_stack[include_stack_ptr] = current_include_dirs;
add_include_dir(get_path(fullfilename));
@@
-169,20
+179,32
@@
char*enter_file(char*filename, void*state)
current_line=1;
current_column=0;
current_line=1;
current_column=0;
- current_filename=fullfilename;
+ current_filename = fullfilename;
+ current_filename_short = filename;
return fullfilename;
}
return fullfilename;
}
+FILE*enter_file2(char*filename, void*state)
+{
+ char*fullfilename = enter_file(filename, state);
+ FILE*fi = fopen(fullfilename, "rb");
+ if(!fi) {
+ as3_error("Couldn't find file %s: %s", fullfilename, strerror(errno));
+ }
+ return fi;
+}
+
+
void* leave_file()
{
dbg("leaving file %s", current_filename);
void* leave_file()
{
dbg("leaving file %s", current_filename);
- if(--include_stack_ptr<0) {
+ if(--include_stack_ptr<=0) {
return 0;
} else {
return 0;
} else {
+ free(current_filename);current_filename = filename_stack[include_stack_ptr];
+ free(current_filename_short);current_filename_short = shortfilename_stack[include_stack_ptr];
current_column = column_stack[include_stack_ptr];
current_line = line_stack[include_stack_ptr];
current_column = column_stack[include_stack_ptr];
current_line = line_stack[include_stack_ptr];
- free(current_filename);
- current_filename = filename_stack[include_stack_ptr];
current_include_dirs = includedir_stack[include_stack_ptr];
return include_stack[include_stack_ptr];
}
current_include_dirs = includedir_stack[include_stack_ptr];
return include_stack[include_stack_ptr];
}