Hello, I was just writing a little mmapped (that's two `m`'s -- no typo ;-) ) file stream and thought to do it properly just in case I might fork(). So I thought to give some advise about memory:
madvise(daBuffer, FileSize, MADV_DONTFORK); Now if I check the result value and, if <> 0, print the detailed error code using: ErrorCode:= fpGetErrNo(); WriteMsg(strError(ErrorCode)); I get the most ambiguous results (ENOTTY, ENOENT, which are not even documented as being possible error comditions after this call). After some research I decided to try implement fpGetErrNo myself using (straight from <errno.h> -- using linux 3.7.4 running x86_64 hardware): Function __errno_location: pcint; cdecl; external 'c' name '__errno_location'; Function fpGetErrNo: cint; Begin Result:= __errno_location()^; End; And this gave me the expected results (Out of memory, Success, ...). So, did I discover a bug or do I miss something? Just for the record: `daBuffer` is just mmapped in the line preceding this one, there is no error there, it contains the right data, `Filesize` is obtained through stat(), so no issue there either. -- Ewald
_______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-devel