just one note

you use
 Boolean p_PlanetsLoad(UInt8 game, UInt8 player)
 {
   ...
   StrPrintF(dbString, "Planets_%i_%i", game, player);
   ...
 }

so you use %i which expects 16bit signed integer and send variable which is
UInt8. can't this make some damage? i noticed that there is actually problem
when i use %d with long variable and %l with short, so maybe it will have some
problems with UInt8 too.

but it doesn't help in case you use strcopy or direct writing to buffer so i
don't think i will help...

Javier Sedano wrote:
> Hello friends,
> 
>     my name is Javier Sedano, and I'm trying to develope a PalmOS client
> for VGAPLANETS (a famous turn-based strategy game):
> http://palmplanets.sourceforge.net/
>     You can download the source there, but it does not include the
> problem I'm describing here.
> 
>     I've been stuck for the whole day with a very strange problem. Under
> some very special (and deterministic) circunstances VFSOpen() returns
> -1, which acordingly to the documentation is not possible.
> 
>     The following code fails:
>     
> Boolean p_OpenDataFile(const Char *file, FileRef *refFile){
>     Err err;
>     Char stringFile[MAXPATH];
> 
>     StrPrintF(stringFile, "%s/%s", p_stringGame, file);
>     err = VFSFileOpen(p_volWinplan, stringFile, vfsModeRead, refFile);
> // (1)
>     if (err == errNone) return true;
>     if (err != vfsErrFileNotFound) return false;
>     StrPrintF(stringFile, "%s/%s", p_stringWinplan, file);
>     err = VFSFileOpen(p_volWinplan, stringFile, vfsModeRead, refFile); 
> // (2)
>     if (err == errNone) return true;
>     return false;   
> }
> 
> Boolean p_PlanetsLoad(UInt8 game, UInt8 player) {
> [...]
> if (!p_OpenDataFile("XYPLAN.DAT", &refFile))  // (1)
>     return false;
> VFSFileClose(refFile);
> if (!p_OpenDataFile("XYPLAN.DAT", &refFile))  // (2)
>     return false;
> VFSFileClose(refFile);
> 
>     StrPrintF(dbString, "Planets_%i_%i", game, player);
> 
> if (!p_OpenDataFile("XYPLAN.DAT", &refFile))  // (3)
>     return false;  // (exits here)
> VFSFileClose(refFile);
> [...]
> }
> 
>     The first call to p_OpenDataFile() goes fine, as do the second call
> (just to be sure that it was not a problem of the second call failing).
>     The third call fails, so the "return false" is raise
> 
>     Using the debugger to see why the hell is it failing, I see that, in
> the third call, VFSFileOpen is returning -1, so obviously the     "if
> (err != vfsErrFileNotFound) return false;" line causes to return false.
> 
>     Am I sure that StrPrintF() line is they guilty for the error? Yes, I
> am. If I comment StrPrintF(), the third p_OpenDataFile() goes fine, but
> of course it crashes later, when dbString is needed ;-)
>     If I use "StrCopy(dbString, "Planets_1_10");" instead, it also fails.
>     If I change it to (notice that I've changed also the variable name):
> 
>     dbS[0] = 'P';
>     dbS[1] = 'l';
>     dbS[2] = 'a';
>     dbS[3] = 'n';
>     dbS[4] = 'e';
>     dbS[5] = 't';
>     dbS[6] = 's';
>     dbS[7] = '_';
>     dbS[8] = '1';
>     dbS[9] = '_';
>     dbS[10] = '1';
>     dbS[11] = '0';
>     dbS[12] = 0;
> 
>     ... it also fails
> 
> 
>     Any idea?
>     What am I doing wrong?
> 
>     I can find a workaround for this particular case, but I will find
> the problem later...
> 
> Regards,
> 

-- 
For information on using the PalmSource Developer Forums, or to unsubscribe, 
please see http://www.palmos.com/dev/support/forums/

Reply via email to