handle filesystems where lowercase(file)==file more gracefully
[swftools.git] / lib / as3 / compiler.c
index 9ccaafd..2e6beb0 100644 (file)
@@ -113,6 +113,7 @@ static void as3_parse_file_or_array(const char*name, const char*filename, const
     a3_parse();
     as3_lex_destroy();
     finish_file();
+    if(fi) fclose(fi);
 }
 
 typedef struct _scheduled_file {
@@ -155,7 +156,7 @@ void as3_schedule_file(const char*name, const char*filename)
     }
 
     filename = normalize_path(filename);
-    
+
     if(dict_contains(scheduled_dict, filename)) {
         return; //already processed
     } else {
@@ -302,22 +303,19 @@ static void schedule_class(const char*package, const char*cls, char error)
 
     strcpy(filename+t, cls);
     strcpy(filename+t+l2, ".as");
-    char*f=0;
-    if(!(f=find_file(filename, error))) {
+    char*f=find_file(filename, error);
+    if(!f) {
         int i;
-        /* try lower case filename (not packagename!), too */
-        for(i=t;i<t+l2;i++) {
-            if(filename[i]>='A' && filename[i]<='Z')
-                filename[i] += 'a'-'A';
-        }
-        if(!(f=find_file(filename, error))) {
-            if(error) {
-                strcpy(filename+t, cls);
-                strcpy(filename+t+l2, ".as");
-                as3_warning("Could not open file %s", filename);
-            }
-            return;
-        }
+       filename = filename_to_lowercase(filename);
+        f=find_file(filename, error);
+    }
+    if(!f) {
+       if(error) {
+           strcpy(filename+t, cls);
+           strcpy(filename+t+l2, ".as");
+           as3_warning("Could not open file %s", filename);
+       }
+       return;
     }
     as3_schedule_file(filename, f);
 }