Edit

kc3-lang/libevent/WIN32-Code/misc.c

Branch :

  • Show log

    Commit

  • Author : Niels Provos
    Date : 2006-11-22 01:21:10
    Hash : 868f10e7
    Message : mingw fixes from Nick svn:r271

  • WIN32-Code/misc.c
  • #include <stdio.h>
    #include <string.h>
    #include <windows.h>
    #include <sys/timeb.h>
    #include <time.h>
    
    #ifdef __GNUC__
    /*our prototypes for timeval and timezone are in here, just in case the above
      headers don't have them*/
    #include "misc.h"
    #endif
    
    /****************************************************************************
     *
     * Function: gettimeofday(struct timeval *, struct timezone *)
     *
     * Purpose:  Get current time of day.
     *
     * Arguments: tv => Place to store the curent time of day.
     *            tz => Ignored.
     *
     * Returns: 0 => Success.
     *
     ****************************************************************************/
    
    #ifndef HAVE_GETTIMEOFDAY
    int gettimeofday(struct timeval *tv, struct timezone *tz) {
      struct _timeb tb;
    
    	if(tv == NULL)
    		return -1;
    
    	_ftime(&tb);
    	tv->tv_sec = tb.time;
    	tv->tv_usec = ((int) tb.millitm) * 1000;
    	return 0;
    }
    #endif
    
    int
    win_read(int fd, void *buf, unsigned int length)
    {
    	DWORD dwBytesRead;
    	int res = ReadFile((HANDLE) fd, buf, length, &dwBytesRead, NULL);
    	if (res == 0) {
    		DWORD error = GetLastError();
    		if (error == ERROR_NO_DATA)
    			return (0);
    		return (-1);
    	} else
    		return (dwBytesRead);
    }
    
    int
    win_write(int fd, void *buf, unsigned int length)
    {
    	DWORD dwBytesWritten;
    	int res = WriteFile((HANDLE) fd, buf, length, &dwBytesWritten, NULL);
    	if (res == 0) {
    		DWORD error = GetLastError();
    		if (error == ERROR_NO_DATA)
    			return (0);
    		return (-1);
    	} else
    		return (dwBytesWritten);
    }
    
    int
    socketpair(int d, int type, int protocol, int *sv)
    {
    	static int count;
    	char buf[64];
    	HANDLE fd;
    	DWORD dwMode;
    	sprintf(buf, "\\\\.\\pipe\\levent-%d", count++);
    	/* Create a duplex pipe which will behave like a socket pair */
    	fd = CreateNamedPipe(buf, PIPE_ACCESS_DUPLEX, PIPE_TYPE_BYTE | PIPE_NOWAIT, 
    		PIPE_UNLIMITED_INSTANCES, 4096, 4096, 0, NULL);
    	if (fd == INVALID_HANDLE_VALUE)
    		return (-1);
    	sv[0] = (int)fd;
    
    	fd = CreateFile(buf, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    	if (fd == INVALID_HANDLE_VALUE)
    		return (-1);
    	dwMode = PIPE_NOWAIT;
    	SetNamedPipeHandleState(fd, &dwMode, NULL, NULL);
    	sv[1] = (int)fd;
    
    	return (0);
    }