mirror of
https://github.com/PowerShell/Win32-OpenSSH.git
synced 2025-07-21 13:04:57 +02:00
1-13 C1
This commit is contained in:
parent
36c5c9e89f
commit
a3e7bf4c4c
@ -0,0 +1,46 @@
|
||||
#pragma once
|
||||
|
||||
#include <memory.h>
|
||||
|
||||
#define fd_set w32_fd_set
|
||||
#undef FD_ZERO
|
||||
#define FD_ZERO(set) (memset( (set), 0, sizeof(w32_fd_set)))
|
||||
#undef FD_SET
|
||||
#define FD_SET(fd,set) ( (set)->bitmap[(fd) >> 3] |= (0x80 >> ((fd) % 8)))
|
||||
#undef FD_ISSET
|
||||
#define FD_ISSET(fd, set) (( (set)->bitmap[(fd) >> 3] & (0x80 >> ((fd) % 8)))?1:0)
|
||||
#undef FD_CLR
|
||||
#define FD_CLR(fd, set) ((set)->bitmap[(fd) >> 3] &= (~(0x80 >> ((fd) % 8))))
|
||||
|
||||
#define STDIN_FILENO 0
|
||||
#define STDOUT_FILENO 1
|
||||
#define STDERR_FILENO 2
|
||||
|
||||
//fcntl commands
|
||||
#define F_GETFL 0x1
|
||||
#define F_SETFL 0x2
|
||||
#define F_GETFD 0x4
|
||||
#define F_SETFD 0x8
|
||||
|
||||
//fd status flags
|
||||
#define O_NONBLOCK 0x1
|
||||
|
||||
//fd flags
|
||||
#define FD_CLOEXEC 0x1
|
||||
|
||||
|
||||
//open access modes. only one of these specified
|
||||
#define O_RDONLY 0x1
|
||||
#define O_WRONLY 0x2
|
||||
#define O_RDWR 0x4
|
||||
//open file creation and file status flags // can be bitwise-or'd
|
||||
#define O_APPEND 0x10 //file is opened in append mode
|
||||
#define O_CREAT 0x20 //If the file does not exist it will be created
|
||||
#define O_TRUNC 0x40 //If the file exists and is a regular file, and the file is successfully opened O_RDWR or O_WRONLY, its length shall be truncated to 0, and the mode and owner shall be unchanged
|
||||
#define O_EXCL 0x80 //If O_CREAT and O_EXCL are set, open() shall fail if the file exists
|
||||
#define O_BINARY 0x100 //Gives raw data (while O_TEXT normalises line endings
|
||||
// open modes
|
||||
#define S_IRUSR 00400 //user has read permission
|
||||
#define S_IWUSR 00200 //user has write permission
|
||||
#define S_IRGRP 00040 //group has read permission
|
||||
#define S_IROTH 00004 //others have read permission
|
@ -0,0 +1,26 @@
|
||||
#include "w32fd.h"
|
||||
#include "defs.h"
|
||||
|
||||
int fileio_pipe(struct w32_io* pio[2]) {
|
||||
return -1;
|
||||
}
|
||||
struct w32_io* fileio_open(const char *pathname, int flags, int mode) {
|
||||
|
||||
return NULL;
|
||||
}
|
||||
int fileio_read(struct w32_io* pio, void *dst, unsigned int max) {
|
||||
return -1;
|
||||
}
|
||||
int fileio_write(struct w32_io* pio, const void *buf, unsigned int max) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
int fileio_fstat(struct w32_io* pio, struct stat *buf) {
|
||||
return -1;
|
||||
}
|
||||
int fileio_isatty(struct w32_io* pio) {
|
||||
return 0;
|
||||
}
|
||||
FILE* fileio_fdopen(struct w32_io* pio, const char *mode) {
|
||||
return NULL;
|
||||
}
|
@ -5,7 +5,7 @@
|
||||
#include "w32fd.h"
|
||||
#include <stddef.h>
|
||||
|
||||
#define INTERNAL_BUFFER_SIZE 100*1024 //100KB
|
||||
#define INTERNAL_SEND_BUFFER_SIZE 70*1024 //70KB
|
||||
|
||||
#define INTERNAL_RECV_BUFFER_SIZE 70*1024 //70KB
|
||||
|
||||
@ -248,7 +248,7 @@ int socketio_recv(struct w32_io* pio, void *buf, size_t len, int flags) {
|
||||
BOOL completed = FALSE;
|
||||
|
||||
if ((buf == NULL) || (len == 0)){
|
||||
errno = EPERM;
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -371,7 +371,7 @@ int socketio_send(struct w32_io* pio, const void *buf, size_t len, int flags) {
|
||||
}
|
||||
|
||||
//initialize buffers if needed
|
||||
wsabuf.len = INTERNAL_BUFFER_SIZE;
|
||||
wsabuf.len = INTERNAL_SEND_BUFFER_SIZE;
|
||||
if (pio->write_details.buf == NULL)
|
||||
{
|
||||
wsabuf.buf = malloc(wsabuf.len);
|
||||
|
@ -127,49 +127,156 @@ int w32_accept(int fd, struct sockaddr* addr, int* addrlen)
|
||||
}
|
||||
|
||||
int w32_setsockopt(int fd, int level, int optname, const char* optval, int optlen) {
|
||||
if (fd_table.w32_ios[fd] == NULL) {
|
||||
errno = EBADF;
|
||||
return -1;
|
||||
}
|
||||
return socketio_setsockopt(fd_table.w32_ios[fd], level, optname, optval, optlen);
|
||||
}
|
||||
|
||||
int w32_getsockopt(int fd, int level, int optname, char* optval, int* optlen) {
|
||||
if (fd_table.w32_ios[fd] == NULL) {
|
||||
errno = EBADF;
|
||||
return -1;
|
||||
}
|
||||
return socketio_getsockopt(fd_table.w32_ios[fd], level, optname, optval, optlen);
|
||||
}
|
||||
|
||||
int w32_getsockname(int fd, struct sockaddr* name, int* namelen) {
|
||||
if (fd_table.w32_ios[fd] == NULL) {
|
||||
errno = EBADF;
|
||||
return -1;
|
||||
}
|
||||
return socketio_getsockname(fd_table.w32_ios[fd], name, namelen);
|
||||
}
|
||||
|
||||
int w32_getpeername(int fd, struct sockaddr* name, int* namelen) {
|
||||
if (fd_table.w32_ios[fd] == NULL) {
|
||||
errno = EBADF;
|
||||
return -1;
|
||||
}
|
||||
return socketio_getpeername(fd_table.w32_ios[fd], name, namelen);
|
||||
}
|
||||
|
||||
int w32_listen(int fd, int backlog) {
|
||||
if (fd_table.w32_ios[fd] == NULL) {
|
||||
errno = EBADF;
|
||||
return -1;
|
||||
}
|
||||
return socketio_listen(fd_table.w32_ios[fd], backlog);
|
||||
}
|
||||
|
||||
int w32_bind(int fd, const struct sockaddr *name, int namelen) {
|
||||
if (fd_table.w32_ios[fd] == NULL) {
|
||||
errno = EBADF;
|
||||
return -1;
|
||||
}
|
||||
return socketio_bind(fd_table.w32_ios[fd], name, namelen);
|
||||
}
|
||||
|
||||
int w32_connect(int fd, const struct sockaddr* name, int namelen) {
|
||||
if (fd_table.w32_ios[fd] == NULL) {
|
||||
errno = EBADF;
|
||||
return -1;
|
||||
}
|
||||
return socketio_connect(fd_table.w32_ios[fd], name, namelen);
|
||||
}
|
||||
|
||||
int w32_recv(int fd, void *buf, size_t len, int flags) {
|
||||
if (fd_table.w32_ios[fd] == NULL) {
|
||||
errno = EBADF;
|
||||
return -1;
|
||||
}
|
||||
return socketio_recv(fd_table.w32_ios[fd], buf, len, flags);
|
||||
}
|
||||
|
||||
int w32_send(int fd, const void *buf, size_t len, int flags) {
|
||||
if (fd_table.w32_ios[fd] == NULL) {
|
||||
errno = EBADF;
|
||||
return -1;
|
||||
}
|
||||
return socketio_send(fd_table.w32_ios[fd], buf, len, flags);
|
||||
}
|
||||
|
||||
|
||||
int w32_shutdown(int fd, int how) {
|
||||
if (fd_table.w32_ios[fd] == NULL) {
|
||||
errno = EBADF;
|
||||
return -1;
|
||||
}
|
||||
return socketio_shutdown(fd_table.w32_ios[fd], how);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//file io
|
||||
int w32_pipe(int *pfds){
|
||||
pfds[0] = -1;
|
||||
pfds[1] = -1;
|
||||
struct w32_io* pio[2];
|
||||
|
||||
fileio_pipe(pio);
|
||||
return -1;
|
||||
}
|
||||
|
||||
int w32_open(const char *pathname, int flags, ...) {
|
||||
|
||||
struct w32_io* fileio = fileio_open(pathname, flags, 0);
|
||||
return -1;
|
||||
}
|
||||
|
||||
int w32_read(int fd, void *dst, unsigned int max) {
|
||||
if (fd_table.w32_ios[fd] == NULL) {
|
||||
errno = EBADF;
|
||||
return -1;
|
||||
}
|
||||
return fileio_read(fd_table.w32_ios[fd], dst, max);
|
||||
}
|
||||
|
||||
int w32_write(int fd, const void *buf, unsigned int max) {
|
||||
if (fd_table.w32_ios[fd] == NULL) {
|
||||
errno = EBADF;
|
||||
return -1;
|
||||
}
|
||||
return fileio_write(fd_table.w32_ios[fd], buf, max);
|
||||
}
|
||||
|
||||
int w32_fstat(int fd, struct stat *buf) {
|
||||
if (fd_table.w32_ios[fd] == NULL) {
|
||||
errno = EBADF;
|
||||
return -1;
|
||||
}
|
||||
return fileio_fstat(fd_table.w32_ios[fd], buf);
|
||||
}
|
||||
|
||||
int w32_isatty(int fd) {
|
||||
if (fd_table.w32_ios[fd] == NULL) {
|
||||
errno = EBADF;
|
||||
return -1;
|
||||
}
|
||||
|
||||
return fileio_isatty(fd_table.w32_ios[fd]);
|
||||
}
|
||||
|
||||
FILE* w32_fdopen(int fd, const char *mode) {
|
||||
if (fd_table.w32_ios[fd] == NULL) {
|
||||
errno = EBADF;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return fileio_fdopen(fd_table.w32_ios[fd], mode);
|
||||
}
|
||||
|
||||
//Common IO
|
||||
int w32_close(int fd) {
|
||||
struct w32_io* pio = fd_table.w32_ios[fd];
|
||||
|
||||
if (pio == NULL) {
|
||||
errno = EBADF;
|
||||
return -1;
|
||||
}
|
||||
|
||||
fd_table_clear(pio->table_index);
|
||||
if ((pio->type == LISTEN_FD) || (pio->type == SOCK_FD)) {
|
||||
return socketio_close(pio);
|
||||
@ -182,6 +289,11 @@ int w32_fcntl(int fd, int cmd, ... /* arg */) {
|
||||
va_list valist;
|
||||
va_start(valist, cmd);
|
||||
|
||||
if (fd_table.w32_ios[fd] == NULL) {
|
||||
errno = EBADF;
|
||||
return -1;
|
||||
}
|
||||
|
||||
switch (cmd){
|
||||
case F_GETFL:
|
||||
return fd_table.w32_ios[fd]->fd_status_flags;
|
||||
@ -215,7 +327,7 @@ int w32_select(int fds, fd_set* readfds, fd_set* writefds, fd_set* exceptfds, co
|
||||
}
|
||||
|
||||
if (!readfds && !writefds && !exceptfds) {
|
||||
errno = EPERM;
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -225,7 +337,7 @@ int w32_select(int fds, fd_set* readfds, fd_set* writefds, fd_set* exceptfds, co
|
||||
|
||||
if (readfds && FD_ISSET(i, readfds)) {
|
||||
if (fd_table.w32_ios[i] == NULL) {
|
||||
errno = EPERM;
|
||||
errno = EBADF;
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -238,7 +350,7 @@ int w32_select(int fds, fd_set* readfds, fd_set* writefds, fd_set* exceptfds, co
|
||||
|
||||
if (writefds && FD_ISSET(i, writefds)) {
|
||||
if (fd_table.w32_ios[i] == NULL) {
|
||||
errno = EPERM;
|
||||
errno = EBADF;
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -325,3 +437,11 @@ int w32_select(int fds, fd_set* readfds, fd_set* writefds, fd_set* exceptfds, co
|
||||
|
||||
}
|
||||
|
||||
|
||||
int w32_dup(int oldfd) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
int w32_dup2(int oldfd, int newfd) {
|
||||
return -1;
|
||||
}
|
@ -1,4 +1,5 @@
|
||||
#include <Windows.h>
|
||||
#include <stdio.h>
|
||||
|
||||
enum w32_io_type {
|
||||
UNKOWN_FD = 0,
|
||||
@ -75,3 +76,13 @@ int socketio_send(struct w32_io* pio, const void *buf, size_t len, int flags);
|
||||
int socketio_shutdown(struct w32_io* pio, int how);
|
||||
int socketio_close(struct w32_io* pio);
|
||||
|
||||
|
||||
//fileio
|
||||
int fileio_pipe(struct w32_io* pio[2]);
|
||||
struct w32_io* fileio_open(const char *pathname, int flags, int mode);
|
||||
int fileio_read(struct w32_io* pio, void *dst, unsigned int max);
|
||||
int fileio_write(struct w32_io* pio, const void *buf, unsigned int max);
|
||||
int fileio_fstat(struct w32_io* pio, struct stat *buf);
|
||||
int fileio_isatty(struct w32_io* pio);
|
||||
FILE* fileio_fdopen(struct w32_io* pio, const char *mode);
|
||||
|
||||
|
@ -1,9 +1,9 @@
|
||||
#pragma once
|
||||
|
||||
#include <memory.h>
|
||||
#include <WinSock2.h>
|
||||
#include <WS2tcpip.h>
|
||||
#include <stdio.h>
|
||||
#include "defs.h"
|
||||
|
||||
//File Descriptor definitions
|
||||
#define MAX_FDS 128 //a 2^n number
|
||||
@ -12,34 +12,6 @@ typedef struct w32_fd_set_ {
|
||||
unsigned char bitmap[MAX_FDS >> 3];
|
||||
}w32_fd_set;
|
||||
|
||||
#define fd_set w32_fd_set
|
||||
#undef FD_ZERO
|
||||
#define FD_ZERO(set) (memset( (set), 0, sizeof(w32_fd_set)))
|
||||
#undef FD_SET
|
||||
#define FD_SET(fd,set) ( (set)->bitmap[(fd) >> 3] |= (0x80 >> ((fd) % 8)))
|
||||
#undef FD_ISSET
|
||||
#define FD_ISSET(fd, set) (( (set)->bitmap[(fd) >> 3] & (0x80 >> ((fd) % 8)))?1:0)
|
||||
#undef FD_CLR
|
||||
#define FD_CLR(fd, set) ((set)->bitmap[(fd) >> 3] &= (~(0x80 >> ((fd) % 8))))
|
||||
|
||||
#define STDIN_FILENO 0
|
||||
#define STDOUT_FILENO 1
|
||||
#define STDERR_FILENO 2
|
||||
|
||||
//fcntl commands
|
||||
#define F_GETFL 0x1
|
||||
#define F_SETFL 0x2
|
||||
#define F_GETFD 0x4
|
||||
#define F_SETFD 0x8
|
||||
|
||||
//fd status flags
|
||||
#define O_NONBLOCK 0x1
|
||||
|
||||
//fd flags
|
||||
#define FD_CLOEXEC 0x1
|
||||
|
||||
#define socket w32_socket
|
||||
|
||||
void w32posix_initialize();
|
||||
void w32posix_done();
|
||||
|
||||
@ -69,10 +41,9 @@ int w32_recv(int fd, void *buf, size_t len, int flags);
|
||||
int w32_send(int fd, const void *buf, size_t len, int flags);
|
||||
int w32_shutdown(int fd, int how);
|
||||
|
||||
/*non-network i/o*/
|
||||
/*non-network (file) i/o*/
|
||||
#define pipe w32_pipe
|
||||
#define open w32_open
|
||||
#define creat w32_creat
|
||||
#define read w32_read
|
||||
#define write w32_write
|
||||
#define fstat w32_fstat
|
||||
@ -80,7 +51,6 @@ int w32_shutdown(int fd, int how);
|
||||
#define fdopen w32_fdopen
|
||||
int w32_pipe(int *pfds);
|
||||
int w32_open(const char *pathname, int flags, ...);
|
||||
int w32_creat(const char *pathname, int mode);
|
||||
int w32_read(int fd, void *dst, unsigned int max);
|
||||
int w32_write(int fd, const void *buf, unsigned int max);
|
||||
int w32_fstat(int fd, struct stat *buf);
|
||||
|
@ -74,11 +74,13 @@
|
||||
<Text Include="ReadMe.txt" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="fileio.cpp" />
|
||||
<ClCompile Include="signal.c" />
|
||||
<ClCompile Include="socketio.c" />
|
||||
<ClCompile Include="w32fd.c" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="defs.h" />
|
||||
<ClInclude Include="w32fd.h" />
|
||||
<ClInclude Include="w32posix.h" />
|
||||
</ItemGroup>
|
||||
|
@ -27,6 +27,9 @@
|
||||
<ClCompile Include="signal.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="fileio.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="w32fd.h">
|
||||
@ -35,5 +38,8 @@
|
||||
<ClInclude Include="w32posix.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="defs.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
</Project>
|
Loading…
x
Reference in New Issue
Block a user