ruby-changes:20782
From: naruse <ko1@a...>
Date: Thu, 4 Aug 2011 00:43:06 +0900 (JST)
Subject: [ruby-changes:20782] naruse:r32830 (trunk): Mark a code is GPL or not.
naruse 2011-08-04 00:40:03 +0900 (Thu, 04 Aug 2011) New Revision: 32830 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=32830 Log: Mark a code is GPL or not. This is made the comparison between current and initial commit. Modified files: trunk/include/ruby/win32.h trunk/win32/win32.c Index: include/ruby/win32.h =================================================================== --- include/ruby/win32.h (revision 32829) +++ include/ruby/win32.h (revision 32830) @@ -717,6 +717,7 @@ #endif #ifdef __MINGW_ATTRIB_PURE +/* GPL */ /* get rid of bugs in math.h of mingw */ #define frexp(_X, _Y) __extension__ ({\ int intpart_frexp_bug = intpart_frexp_bug;\ @@ -724,6 +725,7 @@ *(_Y) = intpart_frexp_bug;\ result_frexp_bug;\ }) +/* GPL */ #define modf(_X, _Y) __extension__ ({\ double intpart_modf_bug = intpart_modf_bug;\ double result_modf_bug = modf((_X), &intpart_modf_bug);\ Index: win32/win32.c =================================================================== --- win32/win32.c (revision 32829) +++ win32/win32.c (revision 32830) @@ -209,6 +209,7 @@ { WSAEREMOTE, EREMOTE }, }; +/* non GPL */ int rb_w32_map_errno(DWORD winerr) { @@ -236,6 +237,7 @@ static OSVERSIONINFO osver; +/* GPL */ static void get_version(void) { @@ -245,6 +247,7 @@ } #ifdef _M_IX86 +/* GPL */ DWORD rb_w32_osid(void) { @@ -252,6 +255,7 @@ } #endif +/* GPL */ DWORD rb_w32_osver(void) { @@ -266,6 +270,7 @@ #define IfWin95(win95, winnt) (winnt) #endif +/* non GPL */ HANDLE GetCurrentThreadHandle(void) { @@ -284,6 +289,7 @@ /* simulate flock by locking a range on the file */ +/* GPL */ #define LK_ERR(f,i) \ do { \ if (f) \ @@ -300,6 +306,7 @@ } while (0) #define LK_LEN ULONG_MAX +/* GPL */ static uintptr_t flock_winnt(uintptr_t self, int argc, uintptr_t* argv) { @@ -337,6 +344,7 @@ } #ifdef WIN95 +/* GPL */ static uintptr_t flock_win95(uintptr_t self, int argc, uintptr_t* argv) { @@ -367,6 +375,7 @@ #undef LK_ERR +/* GPL */ int flock(int fd, int oper) { @@ -388,6 +397,7 @@ (DWORD)-1); } +/* non GPL */ static inline WCHAR * translate_wchar(WCHAR *p, int from, int to) { @@ -398,6 +408,7 @@ return p; } +/* non GPL */ static inline char * translate_char(char *p, int from, int to) { @@ -425,6 +436,7 @@ #define CSIDL_PROFILE 40 #endif +/* non GPL */ static BOOL get_special_folder(int n, WCHAR *env) { @@ -440,6 +452,7 @@ return f; } +/* non GPL */ static void regulate_path(WCHAR *path) { @@ -450,6 +463,7 @@ } } +/* non GPL */ static FARPROC get_proc_address(const char *module, const char *func, HANDLE *mh) { @@ -473,6 +487,7 @@ return ptr; } +/* non GPL */ static UINT get_system_directory(WCHAR *path, UINT len) { @@ -486,6 +501,7 @@ #define numberof(array) (sizeof(array) / sizeof(*array)) +/* non GPL */ VALUE rb_w32_special_folder(int type) { @@ -496,6 +512,7 @@ return rb_w32_conv_from_wchar(path, rb_filesystem_encoding()); } +/* non GPL */ UINT rb_w32_system_tmpdir(WCHAR *path, UINT len) { @@ -512,6 +529,7 @@ return p - path + numberof(temp) - 1; } +/* non GPL */ static void init_env(void) { @@ -578,6 +596,7 @@ typedef BOOL (WINAPI *cancel_io_t)(HANDLE); static cancel_io_t cancel_io = NULL; +/* non GPL */ static void init_func(void) { @@ -588,6 +607,7 @@ static void init_stdhandle(void); #if RT_VER >= 80 +/* non GPL */ static void invalid_parameter(const wchar_t *expr, const wchar_t *func, const wchar_t *file, unsigned int line, uintptr_t dummy) { @@ -596,6 +616,7 @@ int ruby_w32_rtc_error; +/* non GPL */ static int __cdecl rtc_error_handler(int e, const char *src, int line, const char *exe, const char *fmt, ...) { @@ -618,6 +639,7 @@ static st_table *socklist = NULL; static char *envarea; +/* non GPL */ static void exit_handler(void) { @@ -634,6 +656,7 @@ DeleteCriticalSection(&select_mutex); } +/* GPL */ static void StartSockets(void) { @@ -658,6 +681,7 @@ // // Initialization stuff // +/* non GPL */ void rb_w32_sysinit(int *argc, char ***argv) { @@ -705,16 +729,19 @@ #define MAXCHILDNUM 256 /* max num of child processes */ +/* non GPL */ static struct ChildRecord { HANDLE hProcess; /* process handle */ rb_pid_t pid; /* process id */ } ChildRecord[MAXCHILDNUM]; +/* non GPL */ #define FOREACH_CHILD(v) do { \ struct ChildRecord* v; \ for (v = ChildRecord; v < ChildRecord + sizeof(ChildRecord) / sizeof(ChildRecord[0]); ++v) #define END_FOREACH_CHILD } while (0) +/* non GPL */ static struct ChildRecord * FindChildSlot(rb_pid_t pid) { @@ -727,6 +754,7 @@ return NULL; } +/* non GPL */ static struct ChildRecord * FindChildSlotByHandle(HANDLE h) { @@ -739,6 +767,7 @@ return NULL; } +/* non GPL */ static void CloseChildHandle(struct ChildRecord *child) { @@ -748,6 +777,7 @@ CloseHandle(h); } +/* non GPL */ static struct ChildRecord * FindFreeChildSlot(void) { @@ -820,12 +850,14 @@ "\3" "vol" + 1, }; +/* non GPL */ static int internal_match(const void *key, const void *elem) { return strcmp(key, *(const char *const *)elem); } +/* non GPL */ static int is_command_com(const char *interp) { @@ -840,6 +872,7 @@ static int internal_cmd_match(const char *cmdname, int nt); +/* non GPL */ static int is_internal_cmd(const char *cmd, int nt) { @@ -868,6 +901,7 @@ return internal_cmd_match(cmdname, nt); } +/* non GPL */ static int internal_cmd_match(const char *cmdname, int nt) { @@ -882,12 +916,14 @@ return 1; } +/* non GPL */ SOCKET rb_w32_get_osfhandle(int fh) { return _get_osfhandle(fh); } +/* non GPL */ static int join_argv(char *cmd, char *const *argv, BOOL escape) { @@ -962,9 +998,11 @@ # define MAXPATHLEN 512 #endif +/* non GPL */ #define STRNDUPV(ptr, v, src, len) \ (((char *)memcpy(((ptr) = ALLOCV((v), (len) + 1)), (src), (len)))[len] = 0) +/* non GPL */ static int check_spawn_mode(int mode) { @@ -978,6 +1016,7 @@ } } +/* non GPL */ static rb_pid_t child_result(struct ChildRecord *child, int mode) { @@ -1000,6 +1039,7 @@ } } +/* non GPL */ static struct ChildRecord * CreateChild(const WCHAR *cmd, const WCHAR *prog, SECURITY_ATTRIBUTES *psa, HANDLE hInput, HANDLE hOutput, HANDLE hError) @@ -1085,6 +1125,7 @@ return child; } +/* non GPL */ static int is_batch(const char *cmd) { @@ -1107,6 +1148,7 @@ #define utf8_to_wstr(str, plen) mbstr_to_wstr(CP_UTF8, str, -1, plen) #define wstr_to_utf8(str, plen) wstr_to_mbstr(CP_UTF8, str, -1, plen) +/* GPL */ rb_pid_t rb_w32_spawn(int mode, const char *cmd, const char *prog) { @@ -1209,6 +1251,7 @@ return ret; } +/* GPL */ rb_pid_t rb_w32_aspawn(int mode, const char *prog, char *const *argv) { @@ -1275,6 +1318,7 @@ return ret; } +/* GPL */ typedef struct _NtCmdLineElement { struct _NtCmdLineElement *next; char *str; @@ -1290,6 +1334,7 @@ #define NTMALLOC 0x2 // string in element was malloc'ed #define NTSTRING 0x4 // element contains a quoted string +/* non GPL */ static int insert(const char *path, VALUE vinfo, void *enc) { @@ -1309,7 +1354,7 @@ return 0; } - +/* GPL */ static NtCmdLineElement ** cmdglob(NtCmdLineElement *patt, NtCmdLineElement **tail) { @@ -1342,6 +1387,7 @@ // characters that require it to be executed by a command interpreter // +/* GPL */ static int has_redirection(const char *cmd) { @@ -1389,6 +1435,7 @@ return FALSE; } +/* non GPL */ static inline char * skipspace(char *ptr) { @@ -1397,6 +1444,7 @@ return ptr; } +/* GPL */ int rb_w32_cmdvector(const char *cmd, char ***vec) { @@ -1643,6 +1691,7 @@ // return the pointer to the current file name. // +/* non GPL */ #define GetBit(bits, i) ((bits)[(i) / CHAR_BIT] & (1 << (i) % CHAR_BIT)) #define SetBit(bits, i) ((bits)[(i) / CHAR_BIT] |= (1 << (i) % CHAR_BIT)) @@ -1650,6 +1699,7 @@ #define BitOfIsRep(n) ((n) * 2 + 1) #define DIRENT_PER_CHAR (CHAR_BIT / 2) +/* GPL */ static HANDLE open_dir_handle(const WCHAR *filename, WIN32_FIND_DATAW *fd) { @@ -1683,6 +1733,7 @@ return fh; } +/* GPL */ static DIR * opendir_internal(WCHAR *wpath, const char *filename) { @@ -1767,6 +1818,7 @@ return p; } +/* non GPL */ static inline UINT filecp(void) { @@ -1774,6 +1826,7 @@ return cp; } +/* non GPL */ static char * wstr_to_mbstr(UINT cp, const WCHAR *wstr, int clen, long *plen) { @@ -1785,6 +1838,7 @@ return ptr; } +/* non GPL */ static WCHAR * mbstr_to_wstr(UINT cp, const char *str, int clen, long *plen) { @@ -1796,6 +1850,7 @@ return ptr; } +/* non GPL */ DIR * rb_w32_opendir(const char *filename) { @@ -1808,6 +1863,7 @@ return ret; } +/* non GPL */ DIR * rb_w32_uopendir(const char *filename) { @@ -1824,6 +1880,7 @@ // Move to next entry // +/* GPL */ static void move_to_next_entry(DIR *dirp) { @@ -1840,6 +1897,7 @@ // Readdir just returns the current string pointer and bumps the // string pointer to the next entry. // +/* non GPL */ static BOOL win32_direct_conv(const WCHAR *file, struct direct *entry, rb_encoding *dummy) { @@ -1848,6 +1906,7 @@ return TRUE; } +/* non GPL */ VALUE rb_w32_conv_from_wchar(const WCHAR *wstr, rb_encoding *enc) { @@ -1867,6 +1926,7 @@ return rb_str_encode(src, rb_enc_from_encoding(enc), ECONV_UNDEF_REPLACE, Qnil); } +/* non GPL */ char * rb_w32_conv_from_wstr(const WCHAR *wstr, long *lenp, rb_encoding *enc) { @@ -1881,6 +1941,7 @@ return ptr; } +/* non GPL */ static BOOL ruby_direct_conv(const WCHAR *file, struct direct *entry, rb_encoding *enc) { @@ -1889,6 +1950,7 @@ return TRUE; } +/* GPL */ static struct direct * readdir_internal(DIR *dirp, BOOL (*conv)(const WCHAR *, struct direct *, rb_encoding *), rb_encoding *enc) { @@ -1927,12 +1989,14 @@ return NULL; } +/* non GPL */ struct direct * rb_w32_readdir(DIR *dirp) { return readdir_internal(dirp, win32_direct_conv, NULL); } +/* non GPL */ struct direct * rb_w32_readdir_with_enc(DIR *dirp, rb_encoding *enc) { @@ -1946,6 +2010,7 @@ // Telldir returns the current string pointer position // +/* GPL */ long rb_w32_telldir(DIR *dirp) { @@ -1956,6 +2021,7 @@ // Seekdir moves the string pointer to a previously saved position // (Saved by telldir). +/* non GPL */ void rb_w32_seekdir(DIR *dirp, long loc) { @@ -1970,6 +2036,7 @@ // Rewinddir resets the string pointer to the start // +/* GPL */ void rb_w32_rewinddir(DIR *dirp) { @@ -1981,6 +2048,7 @@ // This just free's the memory allocated by opendir // +/* GPL */ void rb_w32_closedir(DIR *dirp) { @@ -2009,6 +2077,7 @@ # define STHREAD_ONLY(x) x #endif +/* non GPL */ typedef struct { intptr_t osfhnd; /* underlying OS file HANDLE */ char osfile; /* attributes of file (e.g., open in text mode?) */ @@ -2041,6 +2110,7 @@ #if RT_VER >= 80 static size_t pioinfo_extra = 0; /* workaround for VC++8 SP1 */ +/* non GPL */ static void set_pioinfo_extra(void) { @@ -2077,12 +2147,14 @@ static int is_socket(SOCKET); static int is_console(SOCKET); +/* non GPL */ int rb_w32_io_cancelable_p(int fd) { return cancel_io != NULL && (is_socket(TO_SOCKET(fd)) || !is_console(TO_SOCKET(fd))); } +/* non GPL */ static int rb_w32_open_osfhandle(intptr_t osfhandle, int flags) { @@ -2124,6 +2196,7 @@ return fh; /* return handle */ } +/* non GPL */ static void init_stdhandle(void) { @@ -2161,12 +2234,14 @@ #define _set_osfhnd(fh, osfh) (void)((fh), (osfh)) #define _set_osflags(fh, flags) (void)((fh), (flags)) +/* non GPL */ static void init_stdhandle(void) { } #endif +/* non GPL */ #ifdef __BORLANDC__ static int rb_w32_open_osfhandle(intptr_t osfhandle, int flags) @@ -2182,6 +2257,7 @@ #undef getsockopt +/* non GPL */ static int is_socket(SOCKET sock) { @@ -2191,6 +2267,7 @@ return FALSE; } +/* non GPL */ int rb_w32_is_socket(int fd) { @@ -2205,6 +2282,7 @@ #undef strerror +/* GPL */ char * rb_w32_strerror(int e) { @@ -2272,36 +2350,42 @@ #define ROOT_UID 0 #define ROOT_GID 0 +/* GPL */ rb_uid_t getuid(void) { return ROOT_UID; } +/* GPL */ rb_uid_t geteuid(void) { return ROOT_UID; } +/* GPL */ rb_gid_t getgid(void) { return ROOT_GID; } +/* GPL */ rb_gid_t getegid(void) { return ROOT_GID; } +/* GPL */ int setuid(rb_uid_t uid) { return (uid == ROOT_UID ? 0 : -1); } +/* GPL */ int setgid(rb_gid_t gid) { @@ -2312,6 +2396,7 @@ // File system stuff // +/* GPL */ int ioctl(int i, int u, ...) { @@ -2342,6 +2427,7 @@ #undef FD_CLR +/* non GPL */ void rb_w32_fdclr(int fd, fd_set *set) { @@ -2359,6 +2445,7 @@ #undef FD_ISSET +/* non GPL */ int rb_w32_fdisset(int fd, fd_set *set) { @@ -2370,6 +2457,7 @@ return ret; } +/* non GPL */ void rb_w32_fd_dup(rb_fdset_t *dst, const rb_fdset_t *src) { @@ -2390,6 +2478,7 @@ #undef select +/* non GPL */ static int extract_fd(rb_fdset_t *dst, fd_set *src, int (*func)(SOCKET)) { @@ -2431,6 +2520,7 @@ return dst ? dst->fdset->fd_count : m; } +/* non GPL */ static int copy_fd(fd_set *dst, fd_set *src) { @@ -2452,12 +2542,14 @@ return dst->fd_count; } +/* non GPL */ static int is_not_socket(SOCKET sock) { return !is_socket(sock); } +/* non GPL */ static int is_pipe(SOCKET sock) /* DONT call this for SOCKET! it clains it is PIPE. */ { @@ -2470,6 +2562,7 @@ return ret; } +/* non GPL */ static int is_readable_pipe(SOCKET sock) /* call this for pipe only */ { @@ -2488,6 +2581,7 @@ return ret; } +/* non GPL */ static int is_console(SOCKET sock) /* DONT call this for SOCKET! */ { @@ -2502,6 +2596,7 @@ return ret; } +/* non GPL */ static int is_readable_console(SOCKET sock) /* call this for console only */ { @@ -2524,12 +2619,14 @@ return ret; } +/* non GPL */ static int is_invalid_handle(SOCKET sock) { return (HANDLE)sock == INVALID_HANDLE_VALUE; } +/* GPL */ static int do_select(int nfds, fd_set *rd, fd_set *wr, fd_set *ex, struct timeval *timeout) @@ -2561,6 +2658,7 @@ * rest -= wait * return 0 if rest is smaller than wait. */ +/* non GPL */ int rb_w32_time_subtract(struct timeval *rest, const struct timeval *wait) { @@ -2579,6 +2677,7 @@ return rest->tv_sec != 0 || rest->tv_usec != 0; } +/* non GPL */ static inline int compare(const struct timeval *t1, const struct timeval *t2) { @@ -2598,6 +2697,7 @@ int rb_w32_check_interrupt(void *); /* @internal */ /* @internal */ +/* non GPL */ int rb_w32_select_with_thread(int nfds, fd_set *rd, fd_set *wr, fd_set *ex, struct timeval *timeout, void *th) @@ -2735,6 +2835,7 @@ return r; } +/* non GPL */ int WSAAPI rb_w32_select(int nfds, fd_set *rd, fd_set *wr, fd_set *ex, struct timeval *timeout) @@ -2742,6 +2843,7 @@ return rb_w32_select_with_thread(nfds, rd, wr, ex, timeout, 0); } +/* non GPL */ static FARPROC get_wsa_extension_function(SOCKET s, GUID *guid) { @@ -2757,6 +2859,7 @@ #undef accept +/* GPL */ int WSAAPI rb_w32_accept(int s, struct sockaddr *addr, int *addrlen) { @@ -2792,6 +2895,7 @@ #undef bind +/* GPL */ int WSAAPI rb_w32_bind(int s, const struct sockaddr *addr, int addrlen) { @@ -2810,6 +2914,7 @@ #undef connect +/* GPL */ int WSAAPI rb_w32_connect(int s, const struct sockaddr *addr, int addrlen) { @@ -2833,6 +2938,7 @@ #undef getpeername +/* GPL */ int WSAAPI rb_w32_getpeername(int s, struct sockaddr *addr, int *addrlen) { @@ -2850,6 +2956,7 @@ #undef getsockname +/* GPL */ int WSAAPI rb_w32_getsockname(int s, struct sockaddr *addr, int *addrlen) { @@ -2865,6 +2972,7 @@ return r; } +/* GPL */ int WSAAPI rb_w32_getsockopt(int s, int level, int optname, char *optval, int *optlen) { @@ -2882,6 +2990,7 @@ #undef ioctlsocket +/* GPL */ int WSAAPI rb_w32_ioctlsocket(int s, long cmd, u_long *argp) { @@ -2899,6 +3008,7 @@ #undef listen +/* GPL */ int WSAAPI rb_w32_listen(int s, int backlog) { @@ -2919,6 +3029,7 @@ #undef send #undef sendto +/* non GPL */ static int finish_overlapped_socket(SOCKET s, WSAOVERLAPPED *wol, int result, DWORD *len, DWORD size) { @@ -2957,6 +3068,7 @@ return result; } +/* GPL */ static int overlapped_socket_io(BOOL input, int fd, char *buf, int len, int flags, struct sockaddr *addr, int *addrlen) @@ -3026,12 +3138,14 @@ return r; } +/* non GPL */ int WSAAPI rb_w32_recv(int fd, char *buf, int len, int flags) { return overlapped_socket_io(TRUE, fd, buf, len, flags, NULL, NULL); } +/* non GPL */ int WSAAPI rb_w32_recvfrom(int fd, char *buf, int len, int flags, struct sockaddr *from, int *fromlen) @@ -3039,12 +3153,14 @@ return overlapped_socket_io(TRUE, fd, buf, len, flags, from, fromlen); } +/* non GPL */ int WSAAPI rb_w32_send(int fd, const char *buf, int len, int flags) { return overlapped_socket_io(FALSE, fd, (char *)buf, len, flags, NULL, NULL); } +/* non GPL */ int WSAAPI rb_w32_sendto(int fd, const char *buf, int len, int flags, const struct sockaddr *to, int tolen) @@ -3054,6 +3170,7 @@ } #if !defined(MSG_TRUNC) && !defined(__MINGW32__) +/* non GPL */ typedef struct { SOCKADDR *name; int namelen; @@ -3070,6 +3187,7 @@ #define WSAID_WSASENDMSG {0xa441e712,0x754f,0x43ca,{0x84,0xa7,0x0d,0xee,0x44,0xcf,0x60,0x6d}} #endif +/* non GPL */ #define msghdr_to_wsamsg(msg, wsamsg) \ do { \ int i; \ @@ -3086,6 +3204,7 @@ (wsamsg)->dwFlags = (msg)->msg_flags; \ } while (0) +/* non GPL */ int recvmsg(int fd, struct msghdr *msg, int flags) { @@ -3145,6 +3264,7 @@ return len; } +/* non GPL */ int sendmsg(int fd, const struct msghdr *msg, int flags) { @@ -3198,6 +3318,7 @@ #undef setsockopt +/* GPL */ int WSAAPI rb_w32_setsockopt(int s, int level, int optname, const char *optval, int optlen) { @@ -3215,6 +3336,7 @@ #undef shutdown +/* GPL */ int WSAAPI rb_w32_shutdown(int s, int how) { @@ -3230,6 +3352,7 @@ return r; } +/* non GPL */ static SOCKET open_ifs_socket(int af, int type, int protocol) { @@ -3279,6 +3402,7 @@ #undef socket +/* GPL */ int WSAAPI rb_w32_socket(int af, int type, int protocol) { @@ -3307,6 +3431,7 @@ #undef gethostbyaddr +/* GPL */ struct hostent * WSAAPI rb_w32_gethostbyaddr(const char *addr, int len, int type) { @@ -3324,6 +3449,7 @@ #undef gethostbyname +/* GPL */ struct hostent * WSAAPI rb_w32_gethostbyname(const char *name) { @@ -3341,6 +3467,7 @@ #undef gethostname +/* GPL */ int WSAAPI rb_w32_gethostname(char *name, int len) { @@ -3358,6 +3485,7 @@ #undef getprotobyname +/* GPL */ struct protoent * WSAAPI rb_w32_getprotobyname(const char *name) { @@ -3375,6 +3503,7 @@ #undef getprotobynumber +/* GPL */ struct protoent * WSAAPI rb_w32_getprotobynumber(int num) { @@ -3392,6 +3521,7 @@ #undef getservbyname +/* GPL */ struct servent * WSAAPI rb_w32_getservbyname(const char *name, const char *proto) { @@ -3409,6 +3539,7 @@ #undef getservbyport +/* GPL */ struct servent * WSAAPI rb_w32_getservbyport(int port, const char *proto) { @@ -3424,6 +3555,7 @@ return r; } +/* non GPL */ static int socketpair_internal(int af, int type, int protocol, SOCKET *sv) { @@ -3514,6 +3646,7 @@ return ret; } +/* non GPL */ int rb_w32_socketpair(int af, int type, int protocol, int *sv) { @@ -3566,6 +3699,7 @@ void setservent (int stayopen) {} +/* non GPL */ int fcntl(int fd, int cmd, ...) { @@ -3614,6 +3748,7 @@ #define WNOHANG -1 #endif +/* non GPL */ static rb_pid_t poll_child_status(struct ChildRecord *child, int *stat_loc) { @@ -3649,17 +3784,20 @@ return 0; } +/* GPL */ rb_pid_t waitpid(rb_pid_t pid, int *stat_loc, int options) { DWORD timeout; + /* GPL start */ if (options == WNOHANG) { timeout = 0; } else { timeout = INFINITE; } + /* GPL end */ if (pid == -1) { int count = 0; @@ -3710,6 +3848,7 @@ #include <sys/timeb.h> +/* non GPL */ stati (... truncated) -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/