G'day Everyone,
On 13/08/2013, at 6:54 AM, Luís Oliveira wrote:
How about an interface like this?
(with-errno (some-foreign-function-with-the-errno-option-on) (get-errno))
or perhaps
(with-errno (errno) (some-foreign-function-with-the-errno-option-on) errno)
Isn't this problem more general than just errno? For example, the functions WSAGetLastError() and GetLastError() on Windows.
// On Posix based systems: ssize_t rv = read(fd, buffer, buffer_size); if (rv == -1) { printf("ERROR: %s\n", strerror(errno)); return FAILED; }
// On Windows (Winsock): SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (s == INVALID_SOCKET) { int last_error = WSAGetLastError(); WCHAR buffer[1024]; FormatMessage(FORMAT_MESSAGE_FROM_STRING | FORMAT_MESSAGE_IGNORE_INSERTS, 0, last_error, 0, buffer, 1024, NULL); return FAILED; }
// On Windows (Named Pipes) HANDLE h = CreateFileA(pipe_name, GENERIC_READ | GENERIC_WRITE, ... ); if (h == INVALID_HANDLE_ERROR) { DWORD last_error = GetLastError(); WCHAR buffer[1024]; FormatMessage(FORMAT_MESSAGE_FROM_STRING | FORMAT_MESSAGE_IGNORE_INSERTS, 0, last_error, 0, buffer, 1024, NULL); return FAILED; }
This entire thread has been enlightening.
Thanks Mark