minor improvements

This commit is contained in:
dborth 2009-10-04 19:29:47 +00:00
parent 852f7875fa
commit 941047bb18
3 changed files with 135 additions and 127 deletions

View File

@ -502,25 +502,29 @@ bool ParseDirEntries()
continue; continue;
} }
if(AddBrowserEntry()) if(!AddBrowserEntry())
{ {
strncpy(browserList[browser.numEntries+i].filename, filename, MAXJOLIET); i=0;
browserList[browser.numEntries+i].length = filestat.st_size; parseHalt = true;
browserList[browser.numEntries+i].mtime = filestat.st_mtime; break;
browserList[browser.numEntries+i].isdir = (filestat.st_mode & _IFDIR) == 0 ? 0 : 1; // flag this as a dir }
if(browserList[browser.numEntries+i].isdir) strncpy(browserList[browser.numEntries+i].filename, filename, MAXJOLIET);
{ browserList[browser.numEntries+i].length = filestat.st_size;
if(strcmp(filename, "..") == 0) browserList[browser.numEntries+i].mtime = filestat.st_mtime;
sprintf(browserList[browser.numEntries+i].displayname, "Up One Level"); browserList[browser.numEntries+i].isdir = (filestat.st_mode & _IFDIR) == 0 ? 0 : 1; // flag this as a dir
else
strncpy(browserList[browser.numEntries+i].displayname, browserList[browser.numEntries+i].filename, MAXJOLIET); if(browserList[browser.numEntries+i].isdir)
browserList[browser.numEntries+i].icon = ICON_FOLDER; {
} if(strcmp(filename, "..") == 0)
sprintf(browserList[browser.numEntries+i].displayname, "Up One Level");
else else
{ strncpy(browserList[browser.numEntries+i].displayname, browserList[browser.numEntries+i].filename, MAXJOLIET);
StripExt(browserList[browser.numEntries+i].displayname, browserList[browser.numEntries+i].filename); // hide file extension browserList[browser.numEntries+i].icon = ICON_FOLDER;
} }
else
{
StripExt(browserList[browser.numEntries+i].displayname, browserList[browser.numEntries+i].filename); // hide file extension
} }
} }
@ -658,7 +662,7 @@ LoadSzFile(char * filepath, unsigned char * rbuffer)
HaltDeviceThread(); HaltDeviceThread();
// halt parsing // halt parsing
parseHalt = true; HaltParseThread();
file = fopen (filepath, "rb"); file = fopen (filepath, "rb");
if (file > 0) if (file > 0)
@ -692,86 +696,92 @@ LoadFile (char * rbuffer, char *filepath, size_t length, bool silent)
if(!FindDevice(filepath, &device)) if(!FindDevice(filepath, &device))
return 0; return 0;
if(device == DEVICE_MC_SLOTA)
return LoadMCFile (rbuffer, CARD_SLOTA, StripDevice(filepath), silent);
else if(device == DEVICE_MC_SLOTB)
return LoadMCFile (rbuffer, CARD_SLOTB, StripDevice(filepath), silent);
// stop checking if devices were removed/inserted // stop checking if devices were removed/inserted
// since we're loading a file // since we're loading a file
HaltDeviceThread(); HaltDeviceThread();
// halt parsing // halt parsing
parseHalt = true; HaltParseThread();
// open the file if(device == DEVICE_MC_SLOTA)
while(!size && retry == 1)
{ {
if(ChangeInterface(device, silent)) size = LoadMCFile (rbuffer, CARD_SLOTA, StripDevice(filepath), silent);
}
else if(device == DEVICE_MC_SLOTB)
{
size = LoadMCFile (rbuffer, CARD_SLOTB, StripDevice(filepath), silent);
}
else
{
// open the file
while(!size && retry == 1)
{ {
file = fopen (filepath, "rb"); if(ChangeInterface(device, silent))
if(file > 0)
{ {
if(length > 0 && length <= 2048) // do a partial read (eg: to check file header) file = fopen (filepath, "rb");
{
size = fread (rbuffer, 1, length, file);
}
else // load whole file
{
readsize = fread (zipbuffer, 1, 2048, file);
if(readsize > 0) if(file > 0)
{
if(length > 0 && length <= 2048) // do a partial read (eg: to check file header)
{ {
if (IsZipFile (zipbuffer)) size = fread (rbuffer, 1, length, file);
}
else // load whole file
{
readsize = fread (zipbuffer, 1, 2048, file);
if(readsize > 0)
{ {
size = UnZipBuffer ((unsigned char *)rbuffer); // unzip if (IsZipFile (zipbuffer))
}
else
{
struct stat fileinfo;
if(fstat(file->_file, &fileinfo) == 0)
{ {
size = fileinfo.st_size; size = UnZipBuffer ((unsigned char *)rbuffer); // unzip
}
memcpy (rbuffer, zipbuffer, readsize); // copy what we already read else
{
size_t offset = readsize; struct stat fileinfo;
size_t nextread = 0; if(fstat(file->_file, &fileinfo) == 0)
while(offset < size)
{ {
if(size - offset > 4*1024) nextread = 4*1024; size = fileinfo.st_size;
else nextread = size-offset;
ShowProgress ("Loading...", offset, size);
readsize = fread (rbuffer + offset, 1, nextread, file); // read in next chunk
if(readsize <= 0 || readsize > nextread) memcpy (rbuffer, zipbuffer, readsize); // copy what we already read
break; // read failure
if(readsize > 0) size_t offset = readsize;
offset += readsize; size_t nextread = 0;
while(offset < size)
{
if(size - offset > 4*1024) nextread = 4*1024;
else nextread = size-offset;
ShowProgress ("Loading...", offset, size);
readsize = fread (rbuffer + offset, 1, nextread, file); // read in next chunk
if(readsize <= 0 || readsize > nextread)
break; // read failure
if(readsize > 0)
offset += readsize;
}
CancelAction();
if(offset != size) // # bytes read doesn't match # expected
size = 0;
} }
CancelAction();
if(offset != size) // # bytes read doesn't match # expected
size = 0;
} }
} }
} }
fclose (file);
} }
fclose (file);
} }
} if(!size)
if(!size)
{
if(!silent)
{ {
unmountRequired[device] = true; if(!silent)
retry = ErrorPromptRetry("Error loading file!"); {
} unmountRequired[device] = true;
else retry = ErrorPromptRetry("Error loading file!");
{ }
retry = 0; else
{
retry = 0;
}
} }
} }
} }
@ -804,46 +814,55 @@ SaveFile (char * buffer, char *filepath, size_t datasize, bool silent)
if(datasize == 0) if(datasize == 0)
return 0; return 0;
// stop checking if devices were removed/inserted
// since we're loading a file
HaltDeviceThread();
// halt parsing
HaltParseThread();
ShowAction("Saving..."); ShowAction("Saving...");
if(device == DEVICE_MC_SLOTA) if(device == DEVICE_MC_SLOTA)
return SaveMCFile (buffer, CARD_SLOTA, StripDevice(filepath), datasize, silent);
else if(device == DEVICE_MC_SLOTB)
return SaveMCFile (buffer, CARD_SLOTB, StripDevice(filepath), datasize, silent);
// stop checking if devices were removed/inserted
// since we're saving a file
HaltDeviceThread();
while(!written && retry == 1)
{ {
if(ChangeInterface(device, silent)) written = SaveMCFile (buffer, CARD_SLOTA, StripDevice(filepath), datasize, silent);
}
else if(device == DEVICE_MC_SLOTB)
{
written = SaveMCFile (buffer, CARD_SLOTB, StripDevice(filepath), datasize, silent);
}
else
{
while(!written && retry == 1)
{ {
file = fopen (filepath, "wb"); if(ChangeInterface(device, silent))
if (file > 0)
{ {
size_t writesize, nextwrite; file = fopen (filepath, "wb");
while(written < datasize)
{
if(datasize - written > 4*1024) nextwrite=4*1024;
else nextwrite = datasize-written;
writesize = fwrite (buffer+written, 1, nextwrite, file);
if(writesize != nextwrite) break; // write failure
written += writesize;
}
if(written != datasize) written = 0; if (file > 0)
fclose (file); {
size_t writesize, nextwrite;
while(written < datasize)
{
if(datasize - written > 4*1024) nextwrite=4*1024;
else nextwrite = datasize-written;
writesize = fwrite (buffer+written, 1, nextwrite, file);
if(writesize != nextwrite) break; // write failure
written += writesize;
}
if(written != datasize) written = 0;
fclose (file);
}
}
if(!written)
{
unmountRequired[device] = true;
if(!silent)
retry = ErrorPromptRetry("Error saving file!");
else
retry = 0;
} }
}
if(!written)
{
unmountRequired[device] = true;
if(!silent)
retry = ErrorPromptRetry("Error saving file!");
else
retry = 0;
} }
} }

View File

@ -99,6 +99,8 @@ ParseMCDirectory (int slot)
int CardError; int CardError;
int entryNum = 0; int entryNum = 0;
HaltDeviceThread();
// Try to mount the card // Try to mount the card
CardError = MountMC(slot, NOTSILENT); CardError = MountMC(slot, NOTSILENT);
@ -107,20 +109,11 @@ ParseMCDirectory (int slot)
CardError = CARD_FindFirst (slot, &CardDir, TRUE); CardError = CARD_FindFirst (slot, &CardDir, TRUE);
while (CardError != CARD_ERROR_NOFILE) while (CardError != CARD_ERROR_NOFILE)
{ {
BROWSERENTRY * newBrowserList = (BROWSERENTRY *)realloc(browserList, (entryNum+1) * sizeof(BROWSERENTRY)); if(!AddBrowserEntry())
if(!newBrowserList) // failed to allocate required memory
{ {
ResetBrowser(); entryNum = 0;
ErrorPrompt("Out of memory: too many files!");
entryNum = -1;
break; break;
} }
else
{
browserList = newBrowserList;
}
memset(&(browserList[entryNum]), 0, sizeof(BROWSERENTRY)); // clear the new entry
strncpy(browserList[entryNum].filename, (char *)CardDir.filename, MAXJOLIET); strncpy(browserList[entryNum].filename, (char *)CardDir.filename, MAXJOLIET);
StripExt(browserList[entryNum].displayname, browserList[entryNum].filename); // hide file extension StripExt(browserList[entryNum].displayname, browserList[entryNum].filename); // hide file extension
@ -133,6 +126,8 @@ ParseMCDirectory (int slot)
CARD_Unmount(slot); CARD_Unmount(slot);
} }
ResumeDeviceThread();
// Sort the file list // Sort the file list
qsort(browserList, entryNum, sizeof(BROWSERENTRY), FileSortCallback); qsort(browserList, entryNum, sizeof(BROWSERENTRY), FileSortCallback);

View File

@ -241,24 +241,18 @@ ConnectShare (bool silent)
return false; return false;
#endif #endif
int chkU = (strlen(GCSettings.smbuser) > 0) ? 0:1;
int chkP = (strlen(GCSettings.smbpwd) > 0) ? 0:1;
int chkS = (strlen(GCSettings.smbshare) > 0) ? 0:1; int chkS = (strlen(GCSettings.smbshare) > 0) ? 0:1;
int chkI = (strlen(GCSettings.smbip) > 0) ? 0:1; int chkI = (strlen(GCSettings.smbip) > 0) ? 0:1;
// check that all parameters have been set // check that all parameters have been set
if(chkU + chkP + chkS + chkI > 0) if(chkS + chkI > 0)
{ {
if(!silent) if(!silent)
{ {
char msg[50]; char msg[50];
char msg2[100]; char msg2[100];
if(chkU + chkP + chkS + chkI > 1) // more than one thing is wrong if(chkS + chkI > 1) // more than one thing is wrong
sprintf(msg, "Check settings.xml."); sprintf(msg, "Check settings.xml.");
else if(chkU)
sprintf(msg, "Username is blank.");
else if(chkP)
sprintf(msg, "Password is blank.");
else if(chkS) else if(chkS)
sprintf(msg, "Share name is blank."); sprintf(msg, "Share name is blank.");
else if(chkI) else if(chkI)