On Mon, Aug 30 00:03, Kevin Wolf wrote: > ! Pascal-RTL: Do_Write muss die übergebenen Daten komplett schreiben, > fwrite kann allerdings Short Writes zurückgeben. > > Signed-off-by: Kevin Wolf <kevin@xxxxxxxxxx> > --- > src/modules/pas/lib/rtl/sysfile.inc | 21 +++++++++++++++++---- > 1 files changed, 17 insertions(+), 4 deletions(-) > > diff --git a/src/modules/pas/lib/rtl/sysfile.inc b/src/modules/pas/lib/rtl/sysfile.inc > index 5143ef8..bcd0889 100644 > --- a/src/modules/pas/lib/rtl/sysfile.inc > +++ b/src/modules/pas/lib/rtl/sysfile.inc > @@ -6,8 +6,8 @@ const > function c_fopen(filename, mode: PChar): THandle; cdecl; external name 'fopen'; > function c_fclose(f: THandle): integer; cdecl; external name 'fclose'; > > -function c_fwrite(src: Pointer; blocksize, blockcount: TSize; f: THandle): TSize; cdecl; external name 'fwrite'; > -function c_fread(dest: Pointer; blocksize, blockcount: TSize; f: THandle): TSize; cdecl; external name 'fread'; > +function c_fwrite(src: Pointer; blocksize, blockcount: TSize; f: THandle): longint; cdecl; external name 'fwrite'; > +function c_fread(dest: Pointer; blocksize, blockcount: TSize; f: THandle): longint; cdecl; external name 'fread'; Also bei den Pascal-Typen bin ich mir ja nicht wirklich sicher, aber fread/fwrite haben in C size_t als Rückgabetyp. ;-) > function c_fseek(f: THandle; offset, whence: longint): longint; cdecl; external name 'fseek'; > function c_ftell(f: THandle): TSize; cdecl; external name 'ftell'; > > @@ -36,8 +36,21 @@ begin { TODO } end; > > > Function Do_Write(f: THandle; src: Pointer; len: TSize): TSize; > -begin > - Do_Write := c_fwrite(src, 1, len, f); > +var > + ret: longint; > +begin > + Do_Write := 0; > + while len > 0 do begin > + ret := c_fwrite(src, 1, len, f); > + if ret < 0 then begin Ich glaube du bist bei write ohne f. fwrite gibt im Fehlerfall weniger als len oder 0 zurück, und du musst dann noch mit ferror nachsehen ob es ein Fehler war. > + InOutRes := 101; > + exit(0); > + end; > + > + Inc(Do_Write, ret); > + Inc(src, ret); > + Dec(len, ret); > + end; > end; -- Antoine Kaufmann <toni@xxxxxxxxxxxxxxxx>
Attachment:
pgpmIzgf83b6Z.pgp
Description: PGP signature