⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tlib.cxx

📁 安装 H323需要的pwlib库
💻 CXX
📖 第 1 页 / 共 2 页
字号:
  if (username[0] == '#') {    PString s = username.Mid(1);    if (strspn(s, "1234567890") == strlen(s))      uid = s.AsInteger();  }  else {#if defined(P_PTHREADS) && !defined(P_THREAD_SAFE_CLIB)    struct passwd pwd;    char buffer[1024];    struct passwd * pw = NULL;#if defined (P_LINUX) || defined (P_AIX) || defined(P_IRIX) || (__GNUC__>=3 && defined(P_SOLARIS)) || defined(P_RTEMS)    ::getpwnam_r(username, &pwd, buffer, 1024, &pw);#else    pw = ::getpwnam_r(username, &pwd, buffer, 1024);#endif#else    struct passwd * pw = ::getpwnam(username);#endif    if (pw != NULL && pw->pw_name != NULL)      uid = pw->pw_uid;    else {      if (strspn(username, "1234567890") == strlen(username))       uid = username.AsInteger();    }  }  if (uid < 0)    return FALSE;  if (permanent)    return setuid(uid) != -1;      return seteuid(uid) != -1;#endif // P_VXWORKS}/////////////////////////////////////////////////////////////////////////////////// PProcess//// Return the effective group name of the process, eg "wheel" etc.PString PProcess::GetGroupName() const{#ifdef P_VXWORKS  return PString("VxWorks");#else#if defined(P_PTHREADS) && !defined(P_THREAD_SAFE_CLIB)  struct group grp;  char buffer[1024];  struct group * gr = NULL;#if defined (P_LINUX) || defined (P_AIX) || defined(P_IRIX) || (__GNUC__>=3 && defined(P_SOLARIS)) || defined(P_RTEMS)  ::getgrgid_r(getegid(), &grp, buffer, 1024, &gr);#else  gr = ::getgrgid_r(getegid(), &grp, buffer, 1024);#endif#else  struct group * gr = ::getgrgid(getegid());#endif  char * ptr;  if (gr != NULL && gr->gr_name != NULL)    return PString(gr->gr_name);  else if ((ptr = getenv("GROUP")) != NULL)    return PString(ptr);  else    return PString("group");#endif // P_VXWORKS}BOOL PProcess::SetGroupName(const PString & groupname, BOOL permanent){#ifdef P_VXWORKS  PAssertAlways("PProcess::SetGroupName - not implemented for VxWorks");  return FALSE;#else  if (groupname.IsEmpty())    return setegid(getgid()) != -1;  int gid = -1;  if (groupname[0] == '#') {    PString s = groupname.Mid(1);    if (strspn(s, "1234567890") == strlen(s))      gid = s.AsInteger();  }  else {#if defined(P_PTHREADS) && !defined(P_THREAD_SAFE_CLIB)    struct group grp;    char buffer[1024];    struct group * gr = NULL;#if defined (P_LINUX) || defined (P_AIX) || defined(P_IRIX) || (__GNUC__>=3 && defined(P_SOLARIS)) || defined(P_RTEMS)    ::getgrnam_r(groupname, &grp, buffer, 1024, &gr);#else    gr = ::getgrnam_r(groupname, &grp, buffer, 1024);#endif#else    struct group * gr = ::getgrnam(groupname);#endif    if (gr != NULL && gr->gr_name != NULL)      gid = gr->gr_gid;    else {      if (strspn(groupname, "1234567890") == strlen(groupname))       gid = groupname.AsInteger();    }  }  if (gid < 0)    return FALSE;  if (permanent)    return setgid(gid) != -1;      return setegid(gid) != -1;#endif // P_VXWORKS}void PProcess::PXShowSystemWarning(PINDEX num){  PXShowSystemWarning(num, "");}void PProcess::PXShowSystemWarning(PINDEX num, const PString & str){  PProcess::Current()._PXShowSystemWarning(num, str);}void PProcess::_PXShowSystemWarning(PINDEX code, const PString & str){  PError << "PWLib " << GetOSClass() << " error #" << code << '-' << str << endl;}void PXSignalHandler(int sig){#ifdef SIGNALS_DEBUG  fprintf(stderr,"\nSIGNAL<%u>\n",sig);#endif  PProcess & process = PProcess::Current();  process.pxSignals |= 1 << sig;  process.PXOnAsyncSignal(sig);#if defined(P_MAC_MPTHREADS)  process.SignalTimerChange();#elif defined(P_PTHREADS)  // Inform house keeping thread we have a signal to be processed  BYTE ch;  write(process.timerChangePipe[1], &ch, 1);#endif  signal(sig, PXSignalHandler);}void PProcess::PXCheckSignals(){  if (pxSignals == 0)    return;#ifdef SIGNALS_DEBUG  fprintf(stderr,"\nCHKSIG<%x>\n",pxSignals);#endif  for (int sig = 0; sig < 32; sig++) {    int bit = 1 << sig;    if ((pxSignals&bit) != 0) {      pxSignals &= ~bit;      PXOnSignal(sig);    }  }}void SetSignals(void (*handler)(int)){#ifdef SIGNALS_DEBUG  fprintf(stderr,"\nSETSIG<%x>\n",(INT)handler);#endif  if (handler == NULL)    handler = SIG_DFL;#ifdef SIGHUP  signal(SIGHUP, handler);#endif#ifdef SIGINT  signal(SIGINT, handler);#endif#ifdef SIGUSR1  signal(SIGUSR1, handler);#endif#ifdef SIGUSR2  signal(SIGUSR2, handler);#endif#ifdef SIGPIPE  signal(SIGPIPE, handler);#endif#ifdef SIGTERM  signal(SIGTERM, handler);#endif#ifdef SIGWINCH  signal(SIGWINCH, handler);#endif#ifdef SIGPROF  signal(SIGPROF, handler);#endif}void PProcess::PXOnAsyncSignal(int sig){#ifdef SIGNALS_DEBUG  fprintf(stderr,"\nASYNCSIG<%u>\n",sig);#endif  switch (sig) {    case SIGINT:    case SIGTERM:    case SIGHUP:      raise(SIGKILL);      break;    default:      return;  }}void PProcess::PXOnSignal(int sig){#ifdef SIGNALS_DEBUG  fprintf(stderr,"\nSYNCSIG<%u>\n",sig);#endif}void PProcess::CommonConstruct(){  // Setup signal handlers  pxSignals = 0;  SetSignals(&PXSignalHandler);#if !defined(P_VXWORKS) && !defined(P_RTEMS)  // initialise the timezone information  tzset();#endif  CreateConfigFilesDictionary();}void PProcess::CommonDestruct(){  delete configFiles;  configFiles = NULL;  SetSignals(NULL);}// rtems fixes#ifdef P_RTEMSextern "C" {#include <netinet/in.h>#include <rtems/rtems_bsdnet.h>	int socketpair(int d, int type, int protocol, int sv[2]){    static int port_count = IPPORT_USERRESERVED;    int s;    int addrlen;    struct sockaddr_in addr1, addr2;    static int network_status = 1;        if (network_status>0)    {        printf("\"Network\" initializing!\n");        network_status = rtems_bsdnet_initialize_network();	if (network_status == 0)	    printf("\"Network\" initialized!\n");	else	{	    printf("Error: %s\n", strerror(errno));	    return -1;	}    }    /* prepare sv */    sv[0]=sv[1]=-1;    /* make socket */    s = socket( d, type, protocol);    if (s<0)         return -1;    memset(&addr1, 0, sizeof addr1);    addr1.sin_family = d;    addr1.sin_port = htons(++port_count);    addr1.sin_addr.s_addr = htonl(INADDR_LOOPBACK);    if (bind(s, (struct sockaddr *)&addr1, sizeof addr1) < 0)     {	close(s);        return -1;    }    if (listen(s, 2) < 0 )     {	close(s);        return -1;    }        sv[0] = socket(d, type, protocol);    if (sv[0] < 0)     {	close(s);        return -1;    }        memset(&addr2, 0, sizeof addr2);    addr2.sin_family = d;    addr2.sin_port = htons(++port_count);    addr2.sin_addr.s_addr = htonl(INADDR_LOOPBACK);    if (bind(sv[0], (struct sockaddr *)&addr2, sizeof addr2) < 0)    {	close(s);	close(sv[0]);	sv[0]=-1;        return -1;    }    if (connect(sv[0], (struct sockaddr *)&addr1, sizeof addr1) < 0)    {	close(s);	close(sv[0]);	sv[0]=-1;        return -1;    }        sv[1] = accept(s, (struct sockaddr *)&addr2, &addrlen);    if (sv[1] < 0)    {	close(s);	close(sv[0]);	sv[0]=-1;        return -1;    }    close(s);    return 0;}/* * Loopback interface */extern int rtems_bsdnet_loopattach(rtems_bsdnet_ifconfig *);static struct rtems_bsdnet_ifconfig loopback_config = {    "lo0",                          /* name */    rtems_bsdnet_loopattach,        /* attach function */    NULL,                           /* link to next interface */    "127.0.0.1",                    /* IP address */    "255.0.0.0",                    /* IP net mask */};#include <bsp.h>#warning Change lines below to match Your system settings/* * Default network interface */static struct rtems_bsdnet_ifconfig netdriver_config = {    RTEMS_BSP_NETWORK_DRIVER_NAME,          /* name */    RTEMS_BSP_NETWORK_DRIVER_ATTACH,        /* attach function */    &loopback_config,                       /* link to next interface */    "10.0.0.2",                             /* IP address */    "255.255.255.0",                        /* IP net mask */    NULL,                                   /* Driver supplies hardware address */    0                                       /* Use default driver parameters */};/* * Network configuration */struct rtems_bsdnet_config rtems_bsdnet_config = {    &netdriver_config,    NULL,                   /* no bootp function */    1,                      /* Default network task priority */    0,                      /* Default mbuf capacity */    0,                      /* Default mbuf cluster capacity */    "computer.name",        /* Host name */    "domain.name",          /* Domain name */    "10.0.0.1",             /* Gateway */    "10.0.0.1",             /* Log host */    {"10.0.0.1" },          /* Name server(s) */    {"10.0.0.1" },          /* NTP server(s) */};#define CONFIGURE_TEST_NEEDS_CONSOLE_DRIVER#define CONFIGURE_TEST_NEEDS_CLOCK_DRIVER#define CONFIGURE_TEST_NEEDS_TIMER_DRIVER#define CONFIGURE_MICROSECONDS_PER_TICK                         1000#define CONFIGURE_TICKS_PER_TIMESLICE                             50#define CONFIGURE_MAXIMUM_TASKS          rtems_resource_unlimited(50)#define CONFIGURE_MAXIMUM_TIMERS         rtems_resource_unlimited(50)#define CONFIGURE_MAXIMUM_SEMAPHORES     rtems_resource_unlimited(50)#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES rtems_resource_unlimited(50)#define CONFIGURE_MAXIMUM_MUTEXES        rtems_resource_unlimited(50)#define CONFIGURE_MAXIMUM_POSIX_THREADS                          500#define CONFIGURE_MAXIMUM_POSIX_MUTEXES                          500#define CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES              500#define CONFIGURE_MAXIMUM_POSIX_KEYS                             500#define CONFIGURE_MAXIMUM_POSIX_TIMERS                           500#define CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS                   500#define CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES                   500#define CONFIGURE_MAXIMUM_POSIX_SEMAPHORES                       500#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS                 500#define CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM#define CONFIGURE_POSIX_INIT_THREAD_TABLE#define CONFIGURE_INIT_TASK_INITIAL_MODES (RTEMS_PREEMPT | RTEMS_TIMESLICE)#ifdef DEBUG#define STACK_CHECKER_ON#endifvoid* POSIX_Init(void*);#define CONFIGURE_INIT#include <confdefs.h>}#endif // P_RTEMS//////////////////////////////////////////////////////////////////////  Non-PTHREAD based routines//#if defined(P_MAC_MPTHREADS)#include "tlibmpthrd.cxx"#elif defined(P_PTHREADS)#include "tlibthrd.cxx"#elif defined(BE_THREADS)#include "tlibbe.cxx"#elif defined(VX_TASKS)#include "tlibvx.cxx"#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -