version 1.22, 2015/08/21 00:53:53 |
version 1.25, 2016/07/14 08:16:19 |
|
|
/* -*- mode: C; coding: euc-japan -*- */ |
/* -*- mode: C; coding: euc-japan -*- */ |
/* $OpenXM: OpenXM/src/ox_toolkit/oxf.c,v 1.21 2015/08/05 00:59:05 noro Exp $ */ |
/* $OpenXM: OpenXM/src/ox_toolkit/oxf.c,v 1.24 2016/06/30 01:14:00 ohara Exp $ */ |
|
|
/* |
/* |
This module includes functions for sending/receiveng CMO's. |
This module includes functions for sending/receiveng CMO's. |
Some commnets are written in Japanese by the EUC-JP coded |
|
character set. |
|
*/ |
*/ |
|
|
|
#if defined(_MSC_VER) |
|
#define _CRT_RAND_S |
|
#endif |
|
|
#include <stdio.h> |
#include <stdio.h> |
#include <stdlib.h> |
#include <stdlib.h> |
#include <string.h> |
#include <string.h> |
#include <unistd.h> |
|
#include <fcntl.h> |
#include <fcntl.h> |
#include <sys/file.h> |
|
#include <sys/param.h> |
|
#include <time.h> |
#include <time.h> |
#include <limits.h> |
#include <limits.h> |
|
|
#if defined(__sun__) |
#if defined(__sun__) || defined(__FreeBSD__) |
#include <netdb.h> |
#include <netdb.h> |
#include <sys/types.h> |
#include <sys/types.h> |
#include <netinet/in.h> |
#include <netinet/in.h> |
|
#elif defined(__linux__) |
|
#include <arpa/inet.h> |
#endif |
#endif |
|
|
#if defined(__sun__) |
#if defined(__sun__) |
|
|
#include <inttypes.h> |
#include <inttypes.h> |
#endif |
#endif |
|
|
|
#if defined(_MSC_VER) |
|
#include <io.h> |
|
#include <winsock2.h> |
|
#define X_OK 0x01 |
|
#define R_OK 0x04 |
|
#define MAXHOSTNAMELEN 256 |
|
#define srandom(s) (srand((s))) |
|
static int random() |
|
{ |
|
int r; |
|
rand_s(&r); |
|
return r; |
|
} |
|
#define READ(fd,buf,n) (recv((fd),(buf),(n),0)) |
|
#define WRITE(fd,buf,n) (send((fd),(buf),(n),0)) |
|
#else |
|
#include <unistd.h> |
|
#include <sys/file.h> |
|
#include <sys/param.h> |
|
#define READ(fd,buf,n) (read((fd),(buf),(n))) |
|
#define WRITE(fd,buf,n) (write((fd),(buf),(n))) |
|
#endif |
|
|
#include "mysocket.h" |
#include "mysocket.h" |
#include "ox_toolkit.h" |
#include "ox_toolkit.h" |
|
|
Line 73 int oxf_setbuffer(OXFILE *oxfp, char *buf, int size) |
|
Line 97 int oxf_setbuffer(OXFILE *oxfp, char *buf, int size) |
|
return 0; |
return 0; |
} |
} |
|
|
|
void OX_FD_ZERO(OXFILE_set *s) |
|
{ |
|
memset(s,0,sizeof(OXFILE_set)); |
|
} |
|
|
|
void OX_FD_SET(OXFILE *oxfp,OXFILE_set *s) |
|
{ |
|
if (oxfp != NULL && oxfp->fd >=0 && oxfp->fd < OX_FD_SETSIZE && !FD_ISSET(oxfp->fd,&(s->fdset))) { |
|
FD_SET(oxfp->fd,&(s->fdset)); |
|
s->p[oxfp->fd] = oxfp; |
|
s->count++; |
|
} |
|
} |
|
|
|
void OX_FD_CLR(OXFILE *oxfp,OXFILE_set *s) |
|
{ |
|
if (oxfp != NULL && oxfp->fd >=0 && oxfp->fd < OX_FD_SETSIZE && FD_ISSET(oxfp->fd,&(s->fdset))) { |
|
FD_CLR(oxfp->fd,&(s->fdset)); |
|
s->p[oxfp->fd] = NULL; |
|
s->count--; |
|
} |
|
} |
|
|
|
int OX_FD_ISSET(OXFILE *oxfp,OXFILE_set *s) |
|
{ |
|
if (oxfp != NULL && oxfp->fd >=0 && oxfp->fd < OX_FD_SETSIZE) { |
|
return FD_ISSET(oxfp->fd,&(s->fdset)); |
|
} |
|
return 0; |
|
} |
|
|
|
/* The argument `s' is a set of file descripters for reading */ |
|
OXFILE *oxf_select(OXFILE_set *s, struct timeval *tv) |
|
{ |
|
int r; |
|
r = select(OX_FD_SETSIZE,&(s->fdset),NULL,NULL,tv); |
|
return (r<0)? NULL: s->p[r]; |
|
} |
|
|
int oxf_read(void *buffer, size_t size, size_t num, OXFILE *oxfp) |
int oxf_read(void *buffer, size_t size, size_t num, OXFILE *oxfp) |
{ |
{ |
int n = read(oxfp->fd, buffer, size*num); |
int n = READ(oxfp->fd, buffer, size*num); |
if (n <= 0) { |
if (n <= 0) { |
#if 0 |
#if 0 |
oxfp->error = 1; |
oxfp->error = 1; |
Line 90 int oxf_write(void *buffer, size_t size, size_t num, O |
|
Line 153 int oxf_write(void *buffer, size_t size, size_t num, O |
|
{ |
{ |
size_t sz = size*num; |
size_t sz = size*num; |
if (oxfp->wbuf == NULL) { /* no buffering */ |
if (oxfp->wbuf == NULL) { /* no buffering */ |
return write(oxfp->fd, buffer, sz); |
return WRITE(oxfp->fd, buffer, sz); |
} |
} |
if ((oxfp->wbuf_count + sz) >= oxfp->wbuf_size) { |
if ((oxfp->wbuf_count + sz) >= oxfp->wbuf_size) { |
oxf_flush(oxfp); |
oxf_flush(oxfp); |
return write(oxfp->fd, buffer, sz); |
return WRITE(oxfp->fd, buffer, sz); |
} |
} |
memcpy(oxfp->wbuf + oxfp->wbuf_count, buffer, sz); |
memcpy(oxfp->wbuf + oxfp->wbuf_count, buffer, sz); |
oxfp->wbuf_count += sz; |
oxfp->wbuf_count += sz; |
Line 232 void oxf_determine_byteorder_server(OXFILE *oxfp) |
|
Line 295 void oxf_determine_byteorder_server(OXFILE *oxfp) |
|
void oxf_flush(OXFILE *oxfp) |
void oxf_flush(OXFILE *oxfp) |
{ |
{ |
if (oxfp->wbuf != NULL) { |
if (oxfp->wbuf != NULL) { |
write(oxfp->fd, oxfp->wbuf, oxfp->wbuf_count); |
WRITE(oxfp->fd, oxfp->wbuf, oxfp->wbuf_count); |
oxfp->wbuf_count = 0; |
oxfp->wbuf_count = 0; |
} |
} |
} |
} |
Line 357 char *which(char *exe, const char *env) |
|
Line 420 char *which(char *exe, const char *env) |
|
return NULL; |
return NULL; |
} |
} |
|
|
|
#if !defined(_MSC_VER) |
/* Remarks: ssh determines remote host by his name, i.e. by arg[0]. */ |
/* Remarks: ssh determines remote host by his name, i.e. by arg[0]. */ |
int oxc_start(char *remote_host, int port, char *passwd) |
int oxc_start(char *remote_host, int port, char *passwd) |
{ |
{ |
Line 400 int oxc_start_with_pipe(char *remote_host, int port, c |
|
Line 464 int oxc_start_with_pipe(char *remote_host, int port, c |
|
} |
} |
return pid; |
return pid; |
} |
} |
|
#endif |
|
|
static void pipe_send_string(int fd, char *s) |
static void pipe_send_string(int fd, char *s) |
{ |
{ |