Exemple #1
0
file_error win_read_socket(osd_file *file, void *buffer, UINT64 offset, UINT32 count, UINT32 *actual)
{
    int result;
    char line[80];
    struct timeval timeout;
    fd_set readfds;

    FD_ZERO(&readfds);
    FD_SET(file->socket, &readfds);
    timeout.tv_sec = timeout.tv_usec = 0;

    if (select(file->socket + 1, &readfds, NULL, NULL, &timeout) < 0)
    {
        sprintf(line, "win_read_socket : %s : %d ", __FILE__,  __LINE__);
        perror(line);
        return win_error_to_mame_file_error(GetLastError());
    }
    else if (FD_ISSET(file->socket, &readfds))
    {
        if (file->handle == INVALID_HANDLE_VALUE)
        {
            // connected socket
            result = recv(file->socket, (char*)buffer, count, 0);
        }
        else
        {
            // listening socket
            SOCKET AcceptSocket;
            AcceptSocket = accept(file->socket, NULL, NULL);
            if (AcceptSocket == INVALID_SOCKET)
            {
                return FILERR_FAILURE;
            }
            closesocket(file->socket);
            file->socket = AcceptSocket;
            file->handle = INVALID_HANDLE_VALUE;
            if (actual != NULL )
            {
                *actual = 0;
            }

            return FILERR_NONE;
        }
    }
    else
    {
        return FILERR_FAILURE;
    }

    if (result < 0)
    {
        return win_error_to_mame_file_error(GetLastError());
    }

    if (actual != NULL )
    {
        *actual = result;
    }
    return FILERR_NONE;
}
Exemple #2
0
file_error win_read_socket(osd_file *file, void *buffer, UINT64 offset, UINT32 count, UINT32 *actual)
{
	int result;
	char line[80];
	struct timeval timeout;
	fd_set readfds;

	FD_ZERO(&readfds);
	FD_SET(file->socket, &readfds);
	timeout.tv_sec = timeout.tv_usec = 0;

	if (select(file->socket + 1, &readfds, NULL, NULL, &timeout) < 0)
	{
		sprintf(line, "win_read_socket : %s : %d ", __FILE__,  __LINE__);
		perror(line);
		return win_error_to_mame_file_error(errno);
	}
	else if (FD_ISSET(file->socket, &readfds))
	{
		result = recv(file->socket, (char*)buffer, count, 0);
	}
	else
	{
		return FILERR_FAILURE;
	}

	if (result < 0)
	{
		return win_error_to_mame_file_error(errno);
	}

	if (actual != NULL )
	{
		*actual = result;
	}
	return FILERR_NONE;
}
Exemple #3
0
file_error win_write_socket(osd_file *file, const void *buffer, UINT64 offset, UINT32 count, UINT32 *actual)
{
	int result;
	result = send(file->socket, (const char*)buffer, count, 0);
	if (result < 0)
	{
		return win_error_to_mame_file_error(errno);
	}

	if (actual != NULL )
	{
		*actual = result;
	}
	return FILERR_NONE;
}
file_error osd_get_full_path(char **dst, const char *path)
{
	file_error err;
	TCHAR *t_path;
	TCHAR buffer[MAX_PATH];

	// convert the path to TCHARs
	t_path = tstring_from_utf8(path);
	if (t_path == NULL)
	{
		err = FILERR_OUT_OF_MEMORY;
		goto done;
	}

	// cannonicalize the path
	if (!GetFullPathName(t_path, ARRAY_LENGTH(buffer), buffer, NULL))
	{
		err = win_error_to_mame_file_error(GetLastError());
		goto done;
	}

	// convert the result back to UTF-8
	*dst = utf8_from_tstring(buffer);
	if (!*dst)
	{
		err = FILERR_OUT_OF_MEMORY;
		goto done;
	}

	err = FILERR_NONE;

done:
	if (t_path != NULL)
		osd_free(t_path);
	return err;
}