📄 _win95.h
字号:
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- *//* * The contents of this file are subject to the Mozilla Public * License Version 1.1 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing * rights and limitations under the License. * * The Original Code is the Netscape Portable Runtime (NSPR). * * The Initial Developer of the Original Code is Netscape * Communications Corporation. Portions created by Netscape are * Copyright (C) 1998-2000 Netscape Communications Corporation. All * Rights Reserved. * * Contributor(s): * * Alternatively, the contents of this file may be used under the * terms of the GNU General Public License Version 2 or later (the * "GPL"), in which case the provisions of the GPL are applicable * instead of those above. If you wish to allow use of your * version of this file only under the terms of the GPL and not to * allow others to use your version of this file under the MPL, * indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by * the GPL. If you do not delete the provisions above, a recipient * may use your version of this file under either the MPL or the * GPL. */#ifndef nspr_win95_defs_h___#define nspr_win95_defs_h___#include "prio.h"#include <windows.h>#include <winsock.h>#include <errno.h>/* * Internal configuration macros */#define PR_LINKER_ARCH "win32"#define _PR_SI_SYSNAME "WIN95"#define _PR_SI_ARCHITECTURE "x86" /* XXXMB hardcode for now */#define HAVE_DLL#undef HAVE_THREAD_AFFINITY#define _PR_HAVE_ATOMIC_OPS#define PR_HAVE_WIN32_NAMED_SHARED_MEMORY/* --- Common User-Thread/Native-Thread Definitions --------------------- *//* --- Globals --- */extern struct PRLock *_pr_schedLock;/* --- Typedefs --- */typedef void (*FiberFunc)(void *);#define PR_NUM_GCREGS 8typedef PRInt32 PR_CONTEXT_TYPE[PR_NUM_GCREGS];#define GC_VMBASE 0x40000000#define GC_VMLIMIT 0x00FFFFFF#define _MD_MAGIC_THREAD 0x22222222#define _MD_MAGIC_THREADSTACK 0x33333333#define _MD_MAGIC_SEGMENT 0x44444444#define _MD_MAGIC_DIR 0x55555555#define _MD_MAGIC_CV 0x66666666struct _MDCPU { int unused;};struct _MDThread { HANDLE blocked_sema; /* Threads block on this when waiting * for IO or CondVar. */ PRBool inCVWaitQueue; /* PR_TRUE if the thread is in the * wait queue of some cond var. * PR_FALSE otherwise. */ HANDLE handle; /* Win32 thread handle */ PRUint32 id; void *sp; /* only valid when suspended */ PRUint32 magic; /* for debugging */ PR_CONTEXT_TYPE gcContext; /* Thread context for GC */ struct PRThread *prev, *next; /* used by the cvar wait queue to * chain the PRThread structures * together */};struct _MDThreadStack { PRUint32 magic; /* for debugging */};struct _MDSegment { PRUint32 magic; /* for debugging */};#undef PROFILE_LOCKSstruct _MDDir { HANDLE d_hdl; WIN32_FIND_DATA d_entry; PRBool firstEntry; /* Is this the entry returned * by FindFirstFile()? */ PRUint32 magic; /* for debugging */};struct _MDCVar { PRUint32 magic; struct PRThread *waitHead, *waitTail; /* the wait queue: a doubly- * linked list of threads * waiting on this condition * variable */ PRIntn nwait; /* number of threads in the * wait queue */};#define _MD_CV_NOTIFIED_LENGTH 6typedef struct _MDNotified _MDNotified;struct _MDNotified { PRIntn length; /* # of used entries in this * structure */ struct { struct _MDCVar *cv; /* the condition variable notified */ PRIntn times; /* and the number of times notified */ struct PRThread *notifyHead; /* list of threads to wake up */ } cv[_MD_CV_NOTIFIED_LENGTH]; _MDNotified *link; /* link to another of these, or NULL */};struct _MDLock { CRITICAL_SECTION mutex; /* this is recursive on NT */ /* * When notifying cvars, there is no point in actually * waking up the threads waiting on the cvars until we've * released the lock. So, we temporarily record the cvars. * When doing an unlock, we'll then wake up the waiting threads. */ struct _MDNotified notified; /* array of conditions notified */#ifdef PROFILE_LOCKS PRInt32 hitcount; PRInt32 misscount;#endif};struct _MDSemaphore { HANDLE sem;};struct _MDFileDesc { PRInt32 osfd; /* The osfd can come from one of three spaces: * - For stdin, stdout, and stderr, we are using * the libc file handle (0, 1, 2), which is an int. * - For files and pipes, we are using Win32 HANDLE, * which is a void*. * - For sockets, we are using Winsock SOCKET, which * is a u_int. */};struct _MDProcess { HANDLE handle; DWORD id;};/* --- Misc stuff --- */#define _MD_GET_SP(thread) (thread)->md.gcContext[6]/* --- NT security stuff --- */extern void _PR_NT_InitSids(void);extern void _PR_NT_FreeSids(void);extern PRStatus _PR_NT_MakeSecurityDescriptorACL( PRIntn mode, DWORD accessTable[], PSECURITY_DESCRIPTOR *resultSD, PACL *resultACL);extern void _PR_NT_FreeSecurityDescriptorACL( PSECURITY_DESCRIPTOR pSD, PACL pACL);/* --- IO stuff --- */#define _MD_OPEN _PR_MD_OPEN#define _MD_OPEN_FILE _PR_MD_OPEN_FILE#define _MD_READ _PR_MD_READ#define _MD_WRITE _PR_MD_WRITE#define _MD_WRITEV _PR_MD_WRITEV#define _MD_LSEEK _PR_MD_LSEEK#define _MD_LSEEK64 _PR_MD_LSEEK64extern PRInt32 _MD_CloseFile(PRInt32 osfd);#define _MD_CLOSE_FILE _MD_CloseFile#define _MD_GETFILEINFO _PR_MD_GETFILEINFO#define _MD_GETFILEINFO64 _PR_MD_GETFILEINFO64#define _MD_GETOPENFILEINFO _PR_MD_GETOPENFILEINFO#define _MD_GETOPENFILEINFO64 _PR_MD_GETOPENFILEINFO64#define _MD_STAT _PR_MD_STAT#define _MD_RENAME _PR_MD_RENAME #define _MD_ACCESS _PR_MD_ACCESS #define _MD_DELETE _PR_MD_DELETE #define _MD_MKDIR _PR_MD_MKDIR #define _MD_MAKE_DIR _PR_MD_MAKE_DIR#define _MD_RMDIR _PR_MD_RMDIR #define _MD_LOCKFILE _PR_MD_LOCKFILE#define _MD_TLOCKFILE _PR_MD_TLOCKFILE#define _MD_UNLOCKFILE _PR_MD_UNLOCKFILE/* --- Socket IO stuff --- */#define _MD_EACCES WSAEACCES#define _MD_EADDRINUSE WSAEADDRINUSE#define _MD_EADDRNOTAVAIL WSAEADDRNOTAVAIL#define _MD_EAFNOSUPPORT WSAEAFNOSUPPORT#define _MD_EAGAIN WSAEWOULDBLOCK#define _MD_EALREADY WSAEALREADY#define _MD_EBADF WSAEBADF#define _MD_ECONNREFUSED WSAECONNREFUSED#define _MD_ECONNRESET WSAECONNRESET#define _MD_EFAULT WSAEFAULT#define _MD_EINPROGRESS WSAEINPROGRESS#define _MD_EINTR WSAEINTR#define _MD_EINVAL EINVAL#define _MD_EISCONN WSAEISCONN#define _MD_ENETUNREACH WSAENETUNREACH#define _MD_ENOENT ENOENT#define _MD_ENOTCONN WSAENOTCONN#define _MD_ENOTSOCK WSAENOTSOCK#define _MD_EOPNOTSUPP WSAEOPNOTSUPP#define _MD_EWOULDBLOCK WSAEWOULDBLOCK#define _MD_GET_SOCKET_ERROR() WSAGetLastError()#define _MD_SET_SOCKET_ERROR(_err) WSASetLastError(_err)#define _MD_INIT_FILEDESC(fd)extern void _MD_MakeNonblock(PRFileDesc *f);#define _MD_MAKE_NONBLOCK _MD_MakeNonblock
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -