[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Lost] [Patch] LostIO - truncate bei fopen(..., "w")



Kevin Wolf wrote:
>> +                // Wenn w+ muss Lesen auch aktiviert werden dafuer truncate
>> +                // nicht
>>     
>
> Falls ich mal die Manpage von fopen zitieren darf:
>
> w+     Öffne die Datei zum Lesen und Schreiben.  Die Datei wird erzeugt, 
> wenn  sie  nicht  existiert,  ansonsten abgeschnitten.  Der Stream wird 
> auf den Dateianfang positioniert
>
> truncate wird bei a und a+ nicht aktiviert.
>   
Ups, das habe ich wohl nicht genau genug gelesen...
Index: src/modules/include/io.h
===================================================================
--- src/modules/include/io.h	(Revision 616)
+++ src/modules/include/io.h	(Arbeitskopie)
@@ -45,7 +45,7 @@
 #define IO_OPEN_MODE_READ 1
 #define IO_OPEN_MODE_WRITE 2
 #define IO_OPEN_MODE_APPEND 4
-#define IO_OPEN_MODE_BINARY 8
+#define IO_OPEN_MODE_TRUNC 8
 #define IO_OPEN_MODE_DIRECTORY 16
 #define IO_OPEN_MODE_CREATE 32
 #define IO_OPEN_MODE_LINK 64
Index: src/modules/lib/stdlibc/file.c
===================================================================
--- src/modules/lib/stdlibc/file.c	(Revision 616)
+++ src/modules/lib/stdlibc/file.c	(Arbeitskopie)
@@ -73,7 +73,13 @@
                 break;
 
             case 'w':
-                *attr |= IO_OPEN_MODE_WRITE | IO_OPEN_MODE_CREATE;
+                *attr |= IO_OPEN_MODE_WRITE | IO_OPEN_MODE_CREATE |
+                    IO_OPEN_MODE_TRUNC;
+
+                // Bei w+ muss Lesen auch aktiviert werden.
+                if (mode[i + 1] == '+') {
+                    *attr |= IO_OPEN_MODE_READ;
+                }
                 break;
 
             case 'a':