From 0ddf00e79e68607a0784881a300f8e013afb1b2b Mon Sep 17 00:00:00 2001 From: dborth Date: Sun, 10 Aug 2008 08:09:22 +0000 Subject: [PATCH] bug fixes for smb - everything works now EXCEPT LoadSMBFile() --- source/ngc/filesel.cpp | 2 +- source/ngc/memfile.cpp | 27 ++++++++++--------- source/ngc/smbop.cpp | 60 ++++++++++++++++++++---------------------- source/ngc/smbop.h | 1 + 4 files changed, 44 insertions(+), 46 deletions(-) diff --git a/source/ngc/filesel.cpp b/source/ngc/filesel.cpp index 6f7c055..dbaf456 100644 --- a/source/ngc/filesel.cpp +++ b/source/ngc/filesel.cpp @@ -558,7 +558,7 @@ OpenSMB (int method) if(ConnectShare ()) { // change current dir to root dir - sprintf(currentdir, GCSettings.LoadFolder); + sprintf(currentdir, "/%s", GCSettings.LoadFolder); if (maxfiles = parseSMBdirectory ()) { diff --git a/source/ngc/memfile.cpp b/source/ngc/memfile.cpp index 2766dae..25da3ce 100644 --- a/source/ngc/memfile.cpp +++ b/source/ngc/memfile.cpp @@ -18,6 +18,7 @@ #include #include #include +#include #include "snes9x.h" #include "memmap.h" @@ -39,6 +40,7 @@ extern void S9xSRTCPreSaveState (); extern void NGCFreezeStruct (); extern bool8 S9xUnfreezeGame (const char *filename); extern unsigned char savebuffer[]; +extern SMBCONN smbconn; static int bufoffset; static char membuffer[MEMBUFFER]; @@ -133,9 +135,11 @@ NGCFreezeGame (int method, bool8 silent) method = autoSaveMethod(); char filename[1024]; - //SMBFILE smbfile; + SMBFILE smbfile; FILE *handle; int len = 0; + int wrote = 0; + int offset = 0; char msg[100]; @@ -150,7 +154,7 @@ NGCFreezeGame (int method, bool8 silent) } else if (method == METHOD_SMB) // SMB { - sprintf (filename, "/%s/%s.frz", GCSettings.SaveFolder, Memory.ROMFilename); + sprintf (filename, "%s/%s.frz", GCSettings.SaveFolder, Memory.ROMFilename); } S9xSetSoundMute (TRUE); @@ -240,8 +244,7 @@ NGCFreezeGame (int method, bool8 silent) } else if (method == METHOD_SMB) // SMB { - /* - smbfile = SMB_OpenFile (filename, SMB_OPEN_WRITING, SMB_OF_CREATE | SMB_OF_TRUNCATE); + smbfile = SMB_OpenFile (SMBPath(filename), SMB_OPEN_WRITING | SMB_DENY_NONE, SMB_OF_CREATE | SMB_OF_TRUNCATE, smbconn); if (smbfile) { @@ -254,11 +257,11 @@ NGCFreezeGame (int method, bool8 silent) { if (len > 1024) wrote = - SMB_Write ((char *) membuffer + offset, 1024, offset, + SMB_WriteFile ((char *) membuffer + offset, 1024, offset, smbfile); else wrote = - SMB_Write ((char *) membuffer + offset, len, offset, + SMB_WriteFile ((char *) membuffer + offset, len, offset, smbfile); offset += wrote; @@ -276,10 +279,9 @@ NGCFreezeGame (int method, bool8 silent) else { char msg[100]; - sprintf(msg, "Couldn't save to SMB:\\%s\\", GCSettings.SaveFolder); + sprintf(msg, "Couldn't save to SMB: %s", GCSettings.SaveFolder); WaitPrompt (msg); } - */ } return 0; } @@ -328,7 +330,7 @@ int NGCUnfreezeGame (int method, bool8 silent) { char filename[1024]; - //SMBFILE smbfile; + SMBFILE smbfile; FILE *handle; int read = 0; int offset = 0; @@ -436,8 +438,7 @@ NGCUnfreezeGame (int method, bool8 silent) sprintf (filename, "%s/%s.frz", GCSettings.SaveFolder, Memory.ROMFilename); // Read the file into memory - /*smbfile = - SMB_OpenFile (filename, SMB_OPEN_READING | SMB_DENY_NONE, SMB_OF_OPEN); + smbfile = SMB_OpenFile (SMBPath(filename), SMB_OPEN_READING, SMB_OF_OPEN, smbconn); if (smbfile) { @@ -448,7 +449,7 @@ NGCUnfreezeGame (int method, bool8 silent) smbfile)) > 0) offset += read; - SMB_Close (smbfile); + SMB_CloseFile (smbfile); if ( !silent ) ShowAction ((char*) "Unpacking freeze file"); @@ -463,7 +464,7 @@ NGCUnfreezeGame (int method, bool8 silent) WaitPrompt((char*) "Freeze file not found"); return 0; } - return 1;*/ + return 1; } return 0; // if we reached here, nothing was done! } diff --git a/source/ngc/smbop.cpp b/source/ngc/smbop.cpp index 1c6d9b3..f149a25 100644 --- a/source/ngc/smbop.cpp +++ b/source/ngc/smbop.cpp @@ -100,6 +100,22 @@ ConnectShare () return networkShareInit; } +/**************************************************************************** + * SMBPath + * + * Returns a SMB-style path + *****************************************************************************/ + +char * SMBPath(char * path) +{ + // fix path - replace all '/' with '\' + for(uint i=0; i < strlen(path); i++) + if(path[i] == '/') + path[i] = '\\'; + + return path; +} + /**************************************************************************** * parseSMBDirectory * @@ -113,28 +129,24 @@ parseSMBdirectory () SMBDIRENTRY smbdir; - sprintf(searchpath, "%s/*", currentdir); - - // fix path - replace all '/' with '\' - for(uint i=0; i < strlen(searchpath); i++) - if(searchpath[i] == '/') - searchpath[i] = '\\'; - - ShowAction((char*) "Loading..."); + if(strlen(searchpath) <= 1) // root + sprintf(searchpath, "*"); + else + sprintf(searchpath, "%s/*", currentdir); if (SMB_FindFirst - (searchpath, SMB_SRCH_READONLY | SMB_SRCH_DIRECTORY, &smbdir, smbconn) != SMB_SUCCESS) + (SMBPath(searchpath), SMB_SRCH_READONLY | SMB_SRCH_DIRECTORY, &smbdir, smbconn) != SMB_SUCCESS) { char msg[200]; sprintf(msg, "Could not open %s", currentdir); WaitPrompt (msg); // if we can't open the dir, open root dir - currentdir[0] = '\0'; + sprintf(searchpath, "/"); sprintf(searchpath,"*"); if (SMB_FindFirst - (searchpath, SMB_SRCH_READONLY | SMB_SRCH_DIRECTORY, &smbdir, smbconn) != SMB_SUCCESS) + (SMBPath(searchpath), SMB_SRCH_READONLY | SMB_SRCH_DIRECTORY, &smbdir, smbconn) != SMB_SUCCESS) return 0; } @@ -196,16 +208,11 @@ LoadSMBFile (char *filename, int length) else sprintf(filepath, "%s/%s", currentdir, filename); - // fix path - replace all '/' with '\' - for(uint i=0; i < strlen(filepath); i++) - if(filepath[i] == '/') - filepath[i] = '\\'; - ShowAction((char *)"Loading..."); // Open the file for reading smbfile = - SMB_OpenFile (filepath, SMB_OPEN_READING, SMB_OF_OPEN, smbconn); + SMB_OpenFile (SMBPath(filepath), SMB_OPEN_READING, SMB_OF_OPEN, smbconn); if (smbfile) { while (offset < length) @@ -301,7 +308,6 @@ LoadSMBFile (char *filename, int length) } } - /**************************************************************************** * Write savebuffer to SMB file ****************************************************************************/ @@ -313,13 +319,8 @@ SaveBufferToSMB (char *filepath, int datasize, bool8 silent) int wrote = 0; int offset = 0; - // fix path - replace all '/' with '\' - for(uint i=0; i < strlen(filepath); i++) - if(filepath[i] == '/') - filepath[i] = '\\'; - smbfile = - SMB_OpenFile (filepath, SMB_OPEN_WRITING | SMB_DENY_NONE, + SMB_OpenFile (SMBPath(filepath), SMB_OPEN_WRITING | SMB_DENY_NONE, SMB_OF_CREATE | SMB_OF_TRUNCATE, smbconn); if (smbfile) @@ -344,7 +345,7 @@ SaveBufferToSMB (char *filepath, int datasize, bool8 silent) else { char msg[100]; - sprintf(msg, "Couldn't save SMB: %s", filepath); + sprintf(msg, "Couldn't save SMB: %s", SMBPath(filepath)); WaitPrompt (msg); } @@ -361,20 +362,15 @@ LoadBufferFromSMB (char *filepath, bool8 silent) int ret; int offset = 0; - // fix path - replace all '/' with '\' - for(uint i=0; i < strlen(filepath); i++) - if(filepath[i] == '/') - filepath[i] = '\\'; - smbfile = - SMB_OpenFile (filepath, SMB_OPEN_READING, SMB_OF_OPEN, smbconn); + SMB_OpenFile (SMBPath(filepath), SMB_OPEN_READING, SMB_OF_OPEN, smbconn); if (!smbfile) { if (!silent) { char msg[100]; - sprintf(msg, "Couldn't open SMB: %s", filepath); + sprintf(msg, "Couldn't open SMB: %s", SMBPath(filepath)); WaitPrompt (msg); } return 0; diff --git a/source/ngc/smbop.h b/source/ngc/smbop.h index 70d406f..33d4cb1 100644 --- a/source/ngc/smbop.h +++ b/source/ngc/smbop.h @@ -17,6 +17,7 @@ bool InitializeNetwork(bool silent); bool ConnectShare (); +char * SMBPath(char * path); int updateSMBdirname(); int parseSMBdirectory (); int LoadSMBFile (char *filename, int length);