Re: [hatari-devel] Maybe a gemdos bug, I don't know

[ Thread Index | Date Index | More lists.tuxfamily.org/hatari-devel Archives ]


Hi,

On keskiviikko 20 kesäkuu 2012, Laurent Sallafranque wrote:
> No, it seems not to be enough.
> 
> When I compile my test with gen030.prg, it includes some files that are
> in a 12 chars name folder.
>
> This is the warning I sent you in the previous mail.
> 
> But after, when I run my program, it has to load some datas into the
> same directory, it loads them OK, but it doesn't warn me about the 8+3
> length.

Could you provide the test program or show the "--trace gemdos"
output for it?

Attached is an updated patch that shows in the warning the full path
given to GEMDOS in addition to path component that's too long.



	- Eero

 
> Laurent
> 
> Le 19/06/2012 23:28, Laurent Sallafranque a écrit :
> > Hi Eero,
> > 
> > It seems to work well :
> > 
> > GEMDOS path component 'LOADLEVEL.gs' doesn't fit to 8+3 chars!
> > GEMDOS path component 'LOADLEVEL.S' doesn't fit to 8+3 chars!
> > 
> > Maybe displaying also the path 'name' would help to detect easily
> > where the error comes from, is it possible ?
> > 
> > Regards
> > Laurent
> > 
> > Le 18/06/2012 22:39, Eero Tamminen a écrit :
> >> Hi,
> >> 
> >> On torstai 14 kesäkuu 2012, Laurent Sallafranque wrote:
> >>>>   What I could do, is adding a warning on console for names that are
> >>>>   longer
> >>> 
> >>> than 8+3 characters.  Would that help?
> >>> 
> >>> If there's no better solution, it would be good to add this warning..
> >> 
> >> Could you send the test program to me or test the attached path?
> >> 
> >>     - Eero
> >>> 
> >>> Best regards
> >>> Laurent
> >>> 
> >>> Le 13/06/2012 22:53, Eero Tamminen a écrit :
> >>>> Hi,
> >>>> 
> >>>> On keskiviikko 13 kesäkuu 2012, Laurent Sallafranque wrote:
> >>>>> While playing with hatari and asm, I think I4ve found something :
> >>>>> 
> >>>>> In my program, I have the following :
> >>>>> 
> >>>>> toto_01l:        dc.b    "DATA\CHARS\TOTO0\BIN_LEFT\IDLE1.SPR",0
> >>>>> toto_01r:        dc.b    "DATA\CHARS\TOTO0\BIN_RIGHT\IDLE1.SPR",0
> >>>>> 
> >>>>> 
> >>>>> I load these files with the loader.s rout from DHS (thanks to them
> >>>>> for
> >>>>> this code).
> >>>>> 
> >>>>> On hatari, it loads well and I don't have any problem, while on my
> >>>>> real falcon, I get the following message :
> >>>>> 
> >>>>> DATA\CHARS\TOTO0\BIN_RIGHT\IDLE1.SPR not found
> >>>>> 
> >>>>> I think this may due to the 9 characters of the directory, but
> >>>>> hatari and my Falcon don't behave the same here.
> >>>> 
> >>>> That's a side-effect of Hatari GEMDOS emulation convenience feature.
> >>>> 
> >>>> Hatari's GEMDOS emulation supports accessing (case insensitively)
> >>>> host directories and files which names are longer than 8+3
> >>>> supported by FAT.
> >>>> 
> >>>> Even if one part of the code would limit names coming from TOS to
> >>>> GEMDOS emulation to 8+3, the support for host names longer than 8+3
> >>>> names would cause the longer names to be matched.
> >>>> 
> >>>> 
> >>>> What I could do, is adding a warning on console for names that are
> >>>> longer than 8+3 characters.  Would that help?
> >>>> 
> >>>>     - Eero

diff -r cd248423871e src/gemdos.c
--- a/src/gemdos.c	Sun Jul 22 23:21:47 2012 +0300
+++ b/src/gemdos.c	Thu Jul 26 21:18:27 2012 +0300
@@ -1046,6 +1046,28 @@
 	*dst = '\0';
 }
 
+/**
+ * Give warning if dir/filename exceeds 8+3 as that wouldn't be
+ * valid for TOS.
+ */
+static void check_tos_len(const char *path, const char *fullpath)
+{
+	char *dot;
+
+	dot = strchr(path, '.');
+	if (dot)
+	{
+		if (dot-path <= 8 && strlen(dot+1) <= 3)
+			return;
+	}
+	else
+	{
+		if (strlen(path) <= 8)
+			return;
+	}
+	Log_Printf(LOG_WARN, "GEMDOS path component '%s' doesn't fit to 8+3 chars in\n\t%s !\n", path, fullpath);
+}
+
 /*-----------------------------------------------------------------------*/
 /**
  * Use hard-drive directory, current ST directory and filename
@@ -1165,6 +1187,8 @@
 			/* and advance filename */
 			filename = s;
 
+			check_tos_len(dirname, pszFileName);
+
 			if (strchr(dirname, '?') || strchr(dirname, '*'))
 				Log_Printf(LOG_WARN, "GEMDOS dir name '%s' with wildcards in %s!\n", dirname, pszFileName);
 
@@ -1184,6 +1208,8 @@
 
 	if (*filename)
 	{
+		check_tos_len(filename, pszFileName);
+
 		/* a wildcard instead of a complete file name? */
 		if (strchr(filename,'?') || strchr(filename,'*'))
 		{


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/