1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

*** empty log message ***

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/RUBY@11 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
matz 1998-01-16 12:19:22 +00:00
parent f12baed5df
commit fd1d8cdc09
78 changed files with 7894 additions and 7806 deletions

View file

@ -183,66 +183,3 @@ void rewinddir(DIR *dirp);
void closedir(DIR *dirp);
#endif /* __DIR_INCLUDED */
/* $RCSfile: dir.h,v $$Revision: 4.0.1.1 $$Date: 91/06/07 11:22:10 $
*
* (C) Copyright 1987, 1990 Diomidis Spinellis.
*
* You may distribute under the terms of either the GNU General Public
* License or the Artistic License, as specified in the README file.
*
* $Log: dir.h,v $
* Revision 4.0.1.1 91/06/07 11:22:10 lwall
* patch4: new copyright notice
*
* Revision 4.0 91/03/20 01:34:20 lwall
* 4.0 baseline.
*
* Revision 3.0.1.1 90/03/27 16:07:08 lwall
* patch16: MSDOS support
*
* Revision 1.1 90/03/18 20:32:29 dds
* Initial revision
*
*
*/
/*
* defines the type returned by the directory(3) functions
*/
#ifndef __DIR_INCLUDED
#define __DIR_INCLUDED
/*Directory entry size */
#ifdef DIRSIZ
#undef DIRSIZ
#endif
#define DIRSIZ(rp) (sizeof(struct direct))
/*
* Structure of a directory entry
*/
struct direct {
ino_t d_ino; /* inode number (not used by MS-DOS) */
int d_namlen; /* Name length */
char d_name[256]; /* file name */
};
struct _dir_struc { /* Structure used by dir operations */
char *start; /* Starting position */
char *curr; /* Current position */
long size; /* Size of string table */
long nfiles; /* number if filenames in table */
struct direct dirstr; /* Directory structure to return */
};
typedef struct _dir_struc DIR; /* Type returned by dir operations */
DIR *cdecl opendir(char *filename);
struct direct *readdir(DIR *dirp);
long telldir(DIR *dirp);
void seekdir(DIR *dirp,long loc);
void rewinddir(DIR *dirp);
void closedir(DIR *dirp);
#endif /* __DIR_INCLUDED */

View file

@ -149,8 +149,8 @@ flock(int fd, int oper)
#undef LK_LEN
#undef const
FILE *fdopen(int, const char *);
//#undef const
//FILE *fdopen(int, const char *);
#if 0
void
@ -185,7 +185,7 @@ NtInitialize(int *argc, char ***argv) {
tzset();
// Initialize Winsock
// StartSockets();
StartSockets();
}
@ -501,7 +501,6 @@ mypopen (char *cmd, char *mode)
return fp;
}
fRet = CreatePipe(&hInFile, &hOutFile, &sa, 2048L);
if (!fRet)
Fatal("cannot open pipe \"%s\" (%s)", cmd, strerror(errno));
@ -1572,7 +1571,7 @@ valid_filename(char *s)
//
FILE *
fdopen (int fd, const char *mode)
myfdopen (int fd, const char *mode)
{
FILE *fp;
char sockbuf[80];
@ -1580,6 +1579,8 @@ fdopen (int fd, const char *mode)
int retval;
extern int errno;
//fprintf(stderr, "myfdopen()\n");
retval = getsockopt((SOCKET)fd, SOL_SOCKET, SO_TYPE, sockbuf, &optlen);
if (retval == SOCKET_ERROR) {
int iRet;
@ -1951,8 +1952,10 @@ mysocket (int af, int type, int protocol)
if (!NtSocketsInitialized++) {
StartSockets();
}
if ((s = socket (af, type, protocol)) == INVALID_SOCKET)
if ((s = socket (af, type, protocol)) == INVALID_SOCKET) {
errno = WSAGetLastError();
//fprintf(stderr, "socket fail (%d)", WSAGetLastError());
}
return s;
}

View file

@ -147,6 +147,29 @@ extern char *NtGetLib(void);
extern char *NtGetBin(void);
extern FILE *mypopen(char *, char *);
extern int flock(int fd, int oper);
extern FILE * myfdopen(int, char*);
extern SOCKET myaccept(SOCKET, struct sockaddr *, int *);
extern int mybind(SOCKET, struct sockaddr *, int);
extern int myconnect(SOCKET, struct sockaddr *, int);
extern int mygetpeername(SOCKET, struct sockaddr *, int *);
extern int mygetsockname(SOCKET, struct sockaddr *, int *);
extern int mygetsockopt(SOCKET, int, int, char *, int *);
extern int myioctlsocket(SOCKET, long, u_long *);
extern int mylisten(SOCKET, int);
extern int myrecv(SOCKET, char *, int, int);
extern int myrecvfrom(SOCKET, char *, int, int, struct sockaddr *, int *);
extern int mysend(SOCKET, char *, int, int);
extern int mysendto(SOCKET, char *, int, int, struct sockaddr *, int);
extern int mysetsockopt(SOCKET, int, int, char *, int);
extern int myshutdown(SOCKET, int);
extern SOCKET mysocket(int, int, int);
extern struct hostent * mygethostbyaddr(char *, int, int);
extern struct hostent * mygethostbyname(char *);
extern int mygethostname(char *, int);
extern struct protoent * mygetprotobyname(char *);
extern struct protoent * mygetprotobynumber(int);
extern struct servent * mygetservbyname(char *, char *);
extern struct servent * mygetservbyport(int, char *);
//
// define this so we can do inplace editing
@ -222,4 +245,118 @@ extern char *mystrerror(int);
#undef va_start
#undef va_end
#ifdef fdopen
#undef fdopen
#endif
#define fdopen myfdopen
#ifdef accept
#undef accept
#endif
#define accept myaccept
#ifdef bind
#undef bind
#endif
#define bind mybind
#ifdef connect
#undef connect
#endif
#define connect myconnect
#ifdef getpeername
#undef getpeername
#endif
#define getpeername mygetpeername
#ifdef getsockname
#undef getsockname
#endif
#define getsockname mygetsockname
#ifdef getsockopt
#undef getsockopt
#endif
#define getsockopt mygetsockopt
#ifdef ioctlsocket
#undef ioctlsocket
#endif
#define ioctlsocket myioctlsocket
#ifdef listen
#undef listen
#endif
#define listen mylisten
#ifdef recv
#undef recv
#endif
#define recv myrecv
#ifdef recvfrom
#undef recvfrom
#endif
#define recvfrom myrecvfrom
#ifdef send
#undef send
#endif
#define send mysend
#ifdef sendto
#undef sendto
#endif
#define sendto mysendto
#ifdef setsockopt
#undef setsockopt
#endif
#define setsockopt mysetsockopt
#ifdef shutdown
#undef shutdown
#endif
#define shutdown myshutdown
#ifdef socket
#undef socket
#endif
#define socket mysocket
#ifdef gethostbyaddr
#undef gethostbyaddr
#endif
#define gethostbyaddr mygethostbyaddr
#ifdef gethostbyname
#undef gethostbyname
#endif
#define gethostbyname mygethostbyname
#ifdef gethostname
#undef gethostname
#endif
#define gethostname mygethostname
#ifdef getprotobyname
#undef getprotobyname
#endif
#define getprotobyname mygetprotobyname
#ifdef getprotobynumber
#undef getprotobynumber
#endif
#define getprotobynumber mygetprotobynumber
#ifdef getservbyname
#undef getservbyname
#endif
#define getservbyname mygetservbyname
#ifdef getservbyport
#undef getservbyport
#endif
#define getservbyport mygetservbyport
#endif

View file

@ -16,6 +16,10 @@ extern char **origenviron;
char *strdup();
#endif
#ifdef USE_WIN32_RTL_ENV
#include <stdlib.h>
#endif
static int
envix(nam)
char *nam;
@ -29,9 +33,11 @@ char *nam;
return i;
}
#ifndef WIN32
void
setenv(nam,val)
setenv(nam,val, n)
char *nam, *val;
int n;
{
register int i=envix(nam); /* where does it go? */
@ -75,3 +81,69 @@ char *nam, *val;
(void)sprintf(environ[i] + strlen(nam),"=%s",val);
#endif /* MSDOS */
}
#else /* if WIN32 */
void
setenv(nam,val, n)
char *nam, *val;
int n;
{
#ifdef USE_WIN32_RTL_ENV
register char *envstr;
STRLEN namlen = strlen(nam);
STRLEN vallen;
char *oldstr = environ[envix(nam)];
/* putenv() has totally broken semantics in both the Borland
* and Microsoft CRTLs. They either store the passed pointer in
* the environment without making a copy, or make a copy and don't
* free it. And on top of that, they dont free() old entries that
* are being replaced/deleted. This means the caller must
* free any old entries somehow, or we end up with a memory
* leak every time setenv() is called. One might think
* one could directly manipulate environ[], like the UNIX code
* above, but direct changes to environ are not allowed when
* calling putenv(), since the RTLs maintain an internal
* *copy* of environ[]. Bad, bad, *bad* stink.
* GSAR 97-06-07
*/
if (!val) {
if (!oldstr)
return;
val = "";
vallen = 0;
}
else
vallen = strlen(val);
envstr = ALLOC_N(char, namelen + vallen + 3);
(void)sprintf(envstr,"%s=%s",nam,val);
(void)putenv(envstr);
if (oldstr)
free(oldstr);
#ifdef _MSC_VER
free(envstr); /* MSVCRT leaks without this */
#endif
#else /* !USE_WIN32_RTL_ENV */
/* The sane way to deal with the environment.
* Has these advantages over putenv() & co.:
* * enables us to store a truly empty value in the
* environment (like in UNIX).
* * we don't have to deal with RTL globals, bugs and leaks.
* * Much faster.
* Why you may want to enable USE_WIN32_RTL_ENV:
* * environ[] and RTL functions will not reflect changes,
* which might be an issue if extensions want to access
* the env. via RTL. This cuts both ways, since RTL will
* not see changes made by extensions that call the Win32
* functions directly, either.
* GSAR 97-06-07
*/
SetEnvironmentVariable(nam,val);
#endif
}
#endif /* WIN32 */