summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/libuv/test/test-callback-stack.c
diff options
context:
space:
mode:
author codefrog2002 <36536480+codefrog2002@users.noreply.github.com>2025-05-03 04:30:54 -0700
committer GitHub <noreply@github.com>2025-05-03 13:30:54 +0200
commita893225de91b54db19dbdb82491ccec2cc26ce2b (patch)
tree022b2e093a98cb5e543432a694a2a3b609a3616b /3rdparty/libuv/test/test-callback-stack.c
parent814dffd09436ebaed9024d2b1f0cb9d20b20cd11 (diff)
namco/mappy.cpp: Pac'n'Pal settings fix
Diffstat (limited to '3rdparty/libuv/test/test-callback-stack.c')
0 files changed, 0 insertions, 0 deletions
href='#n110'>110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
// license:BSD-3-Clause
// copyright-holders:Olivier Galibert, R. Belmont
//============================================================
//
//  sdlptty_unix.c - SDL psuedo tty access functions
//
//  SDLMAME by Olivier Galibert and R. Belmont
//
//============================================================

#if (!defined(SDLMAME_SOLARIS) && !(defined(SDLMAME_OS2)))

#include <sys/types.h>
#include <sys/uio.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#if defined(SDLMAME_FREEBSD) || defined(SDLMAME_DRAGONFLY)
# include <termios.h>
# include <libutil.h>
#elif defined(SDLMAME_NETBSD) || defined(SDLMAME_MACOSX)
# include <util.h>
#elif defined(SDLMAME_OPENBSD)
# include <termios.h>
# include <util.h>
#elif defined(SDLMAME_LINUX) || defined(SDLMAME_EMSCRIPTEN)
# include <pty.h>
#elif defined(SDLMAME_HAIKU)
# include <bsd/pty.h>
#endif
#if defined(SDLMAME_LINUX)
#include <stdlib.h>
#endif

#include "sdlfile.h"

#if defined(SDLMAME_MACOSX)
const char *sdlfile_ptty_identifier  = "/dev/pty";
#else
const char *sdlfile_ptty_identifier  = "/dev/pts";
#endif

file_error sdl_open_ptty(const char *path, UINT32 openflags, osd_file **file, UINT64 *filesize)
{
        int master;
        int aslave;
        struct termios tios;
        int oldflags;

        memset(&tios , 0 , sizeof(tios));
        cfmakeraw(&tios);

        if (openpty(&master, &aslave, NULL, &tios, NULL) >= 0)
        {
                oldflags = fcntl(master, F_GETFL, 0);
                if (oldflags == -1) {
                        close(master);
                        return FILERR_FAILURE;
                }

                fcntl(master, F_SETFL, oldflags | O_NONBLOCK);
                close(aslave);
                (*file)->handle = master;
                *filesize = 0;
        }
        else
        {
                return FILERR_ACCESS_DENIED;
        }

        return FILERR_NONE;
}

file_error sdl_read_ptty(osd_file *file, void *buffer, UINT64 offset, UINT32 count, UINT32 *actual)
{
        ssize_t result;

        result = read(file->handle, buffer, count);

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

        if (actual != NULL )
        {
                *actual = result;
        }

        return FILERR_NONE;
}

file_error sdl_write_ptty(osd_file *file, const void *buffer, UINT64 offset, UINT32 count, UINT32 *actual)
{
        ssize_t result;
        result = write(file->handle, buffer, count);

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

        if (actual != NULL )
        {
                *actual = result;
        }

        return FILERR_NONE;
}

file_error sdl_close_ptty(osd_file *file)
{
        close(file->handle);
        osd_free(file);

        return FILERR_NONE;
}

file_error sdl_slave_name_ptty(osd_file *file , char *name , size_t name_len)
{
        if (ptsname_r(file->handle , name , name_len) < 0) {
                return FILERR_INVALID_ACCESS;
        }

        return FILERR_NONE;
}

#else
#include "sdlfile.h"

const char *sdlfile_ptty_identifier  = "";

file_error sdl_open_ptty(const char *path, UINT32 openflags, osd_file **file, UINT64 *filesize)
{
        return FILERR_ACCESS_DENIED;
}

file_error sdl_read_ptty(osd_file *file, void *buffer, UINT64 offset, UINT32 count, UINT32 *actual)
{
        return FILERR_ACCESS_DENIED;
}

file_error sdl_write_ptty(osd_file *file, const void *buffer, UINT64 offset, UINT32 count, UINT32 *actual)
{
        return FILERR_ACCESS_DENIED;
}

file_error sdl_close_ptty(osd_file *file)
{
        return FILERR_ACCESS_DENIED;
}

file_error sdl_slave_name_ptty(osd_file *file)
{
        return FILERR_ACCESS_DENIED;
}

#endif