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:
parent
f12baed5df
commit
fd1d8cdc09
78 changed files with 7894 additions and 7806 deletions
|
@ -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 */
|
||||
|
|
15
missing/nt.c
15
missing/nt.c
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
137
missing/nt.h
137
missing/nt.h
|
@ -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
|
||||
|
|
|
@ -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 */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue