perfect vsync, bugfixes
[fceu.git] / fds.c
diff --git a/fds.c b/fds.c
index e5307ac..501aefc 100644 (file)
--- a/fds.c
+++ b/fds.c
@@ -917,30 +917,39 @@ void FDSClose(void)
  int x;\r
  char *fn;\r
 \r
- if(!DiskWritten) return;\r
-\r
- fn=FCEU_MakeFName(FCEUMKF_FDS,0,0);\r
-\r
- if(!(fp=FCEUD_UTF8fopen(fn,"wb")))\r
+ if(!DiskWritten)\r
  {\r
-  free(fn);\r
-  return;\r
- }\r
- free(fn);\r
+  fn=FCEU_MakeFName(FCEUMKF_FDS,0,0);\r
 \r
- for(x=0;x<TotalSides;x++)\r
- {\r
-  if(fwrite(diskdata[x],1,65500,fp)!=65500)\r
+  if(!(fp=FCEUD_UTF8fopen(fn,"wb")))\r
   {\r
-   FCEU_PrintError("Error saving FDS image!");\r
-   fclose(fp);\r
+   free(fn);\r
    return;\r
   }\r
- }\r
- FreeFDSMemory();\r
- fclose(fp);\r
+  free(fn);\r
+\r
+  for(x=0;x<TotalSides;x++)\r
+  {\r
+   if(fwrite(diskdata[x],1,65500,fp)!=65500)\r
+   {\r
+    FCEU_PrintError("Error saving FDS image!");\r
+    fclose(fp);\r
+    return;\r
+   }\r
+  }\r
+  fclose(fp);\r
 #ifdef GP2X\r
- sync();\r
 sync();\r
 #endif\r
+ }\r
+\r
+ FreeFDSMemory();\r
+ for(x=0;x<TotalSides;x++)\r
+  if(diskdatao[x])\r
+  {\r
+   free(diskdatao[x]);\r
+   diskdatao[x]=0;\r
+  }\r
+ ResetExState(0,0);\r
 }\r
 \r