Re: [hatari-devel] Fwrite warnings

[ Thread Index | Date Index | More Archives ]


On 27.10.2022 10.08, Uwe Seimet wrote:
Yes, that fixed has helped. All warnings are gone.

Thanks, I pushed slightly updated version of it.

Before next release this message can be downgraded to DEBUG log level, but for now I want to keep it at WARN log level to catch potential further issues with it.

In general it might be a good idea to suppress consecutive duplicate
warnings but just to display them once with a count, e.g.

WARN : GEMDOS Fwrite() to 'ROOT.O' file, opened as read-only (3 times)

I have patches out on the mailing list to do that for trace output, but I could extend it to cover also log messages.

Because suppression logic adds some overhead and can delay output of the identical messages a lot, it's behind a new "--repeat-limit" Hatari debug option.

	- Eero

instead of

WARN : GEMDOS Fwrite() to 'ROOT.O' file, opened as read-only
WARN : GEMDOS Fwrite() to 'ROOT.O' file, opened as read-only
WARN : GEMDOS Fwrite() to 'ROOT.O' file, opened as read-only

Best regards


Hi Uwe,

On 27.10.2022 0.39, Eero Tamminen wrote:
On 26.10.2022 15.16, Uwe Seimet wrote:
with the latest sources I get tons of warnings when, for instance, I
with Pure C. I have never seen these warnings before.

WARN : GEMDOS Fwrite() to 'ROOT.O' file, opened as read-only

This is from following commit:

Is this a bug or can these warnings be switched off? There are so
many of
them that it's hard to see the actually relevant messages.
  > I just noticed that I also get these warnings
  > for files definitely opened for writing, i.e.
  > opened with fopen(FILENAME, "w") with Pure C.

Can you provide GEMDOS trace around that warning?

Only case where I can see this happening:
* Fwrite() done for a FD from Fcreate(), not Fopen(), and
* That FD number being reused from an earlier, already Fclose()d,
read-only Fopen() call

Attached patch should fix that.  Does it help?

	- Eero

diff --git a/src/gemdos.c b/src/gemdos.c
index 1c3e4010..5067ac54 100644
--- a/src/gemdos.c
+++ b/src/gemdos.c
@@ -896,6 +896,8 @@ static void restore_file_handle_info(int i, FILE_HANDLE *handle)
+	/* used only for warnings, ignore those after restore */
+	handle->bReadOnly = false;
  	handle->FileHandle = fp;
@@ -2021,8 +2023,11 @@ static bool GemDOS_Create(uint32_t Params)
  		 *   (set automatically by GemDOS >= 0.15)
+		FileHandles[Index].bReadOnly = false;
+			/* enable write warnings */
+			FileHandles[Index].bReadOnly = true;
  			/* after closing, file should be read-only */
  			if (chmod(szActualFileName, S_IRUSR|S_IRGRP|S_IROTH))
@@ -3883,8 +3888,9 @@ void GemDOS_Info(FILE *fp, uint32_t bShowOpcodes)
  		if (!FileHandles[i].bUsed)
-		fprintf(fp, "- %d (0x%x): %s\n", i + BASE_FILEHANDLE,
-			FileHandles[i].Basepage, FileHandles[i].szActualName);
+		fprintf(fp, "- %d (0x%x): %s (%s)\n", i + BASE_FILEHANDLE,
+			FileHandles[i].Basepage, FileHandles[i].szActualName,
+			FileHandles[i].bReadOnly ? "ro" : "rw");
  	if (!used)

Mail converted by MHonArc 2.6.19+