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/