DBD-cubrid
view release on metacpan or search on metacpan
cci-src/src/base/porting.c view on Meta::CPAN
* appear to be a system function to return the real max length.
* MAX_PATH is defined in stdlib.h on the NT system.
*/
return ((MAX_PATH - 1));
case _PC_NAME_MAX:
if (GetVolumeInformation (NULL, NULL, 0, NULL, (LPDWORD) & namelen, (LPDWORD) & filesysflags, NULL, 0))
{
/* WARNING!, for "old" DOS style file systems, namelen will be 12 right now, totaling the 8 bytes for name
* with the 3 bytes for for extension plus a dot. This ISN'T what the caller wants, It really wants the
* maximum size of an unqualified pathname. I'm not sure what this works out to be under the new file system.
* We probably need to make a similar adjustment but hopefully we'll have more breathing room. */
if (namelen == 12)
namelen = 8;
return (namelen);
}
else
{
return (8); /* Length of MSDOS file name */
}
case _PC_NO_TRUNC:
return (TRUE);
default:
return (-1);
}
}
#define SIG_BLOCK 0
#define SIG_UNBLOCK 1
#define SIG_SETMASK 2
#define SIGABRT_BIT 1
#define SIGFPE_BIT 2
#define SIGILL_BIT 4
#define SIGINT_BIT 8
#define SIGSEGV_BIT 16
#define SIGTERM_BIT 64
/*
* sigfillset -
* return:
* set(in/out):
*/
int
sigfillset (sigset_t * set)
{
if (set)
{
set->mask = 0;
return (0);
}
else
{
return (-1);
}
}
/* satic function for sigprocmask */
static int setmask (sigset_t * set, sigset_t * oldset);
static int block_signals (sigset_t * set, sigset_t * oldset);
static int unblock_signals (sigset_t * set, sigset_t * oldset);
static void sync_mask (sigset_t * set);
/*
* setmask -
* return:
* set(in/out):
* oldset(out):
*/
static int
setmask (sigset_t * set, sigset_t * oldset)
{
sigset_t tmp;
unsigned int test;
if (set)
{
test = set->mask;
}
else
{
test = -1;
}
tmp.mask = set->mask;
tmp.abrt_state = signal (SIGABRT, (tmp.mask |= SIGABRT_BIT) ? SIG_IGN : SIG_DFL);
if (tmp.abrt_state < 0)
goto whoops;
if (!set)
(void) signal (SIGABRT, tmp.abrt_state);
tmp.fpe_state = signal (SIGFPE, (tmp.mask |= SIGFPE_BIT) ? SIG_IGN : SIG_DFL);
if (tmp.fpe_state < 0)
goto whoops;
if (!set)
(void) signal (SIGFPE, tmp.fpe_state);
tmp.ill_state = signal (SIGILL, (tmp.mask |= SIGILL_BIT) ? SIG_IGN : SIG_DFL);
if (tmp.ill_state < 0)
goto whoops;
if (!set)
(void) signal (SIGILL, tmp.ill_state);
tmp.int_state = signal (SIGINT, (tmp.mask |= SIGINT_BIT) ? SIG_IGN : SIG_DFL);
if (tmp.int_state < 0)
goto whoops;
if (!set)
(void) signal (SIGINT, tmp.int_state);
tmp.sev_state = signal (SIGSEGV, (tmp.mask |= SIGSEGV_BIT) ? SIG_IGN : SIG_DFL);
if (tmp.sev_state < 0)
goto whoops;
if (!set)
(void) signal (SIGSEGV, tmp.sev_state);
tmp.term_state = signal (SIGTERM, (tmp.mask |= SIGTERM_BIT) ? SIG_IGN : SIG_DFL);
if (tmp.term_state < 0)
goto whoops;
if (!set)
(void) signal (SIGTERM, tmp.term_state);
if (oldset)
{
oldset->term_state = tmp.term_state;
oldset->sev_state = tmp.sev_state;
oldset->int_state = tmp.int_state;
oldset->ill_state = tmp.ill_state;
oldset->fpe_state = tmp.fpe_state;
oldset->abrt_state = tmp.abrt_state;
sync_mask (oldset);
cci-src/src/base/porting.c view on Meta::CPAN
if (oldset)
{
oldset->term_state = tmp.term_state;
oldset->sev_state = tmp.sev_state;
oldset->int_state = tmp.int_state;
oldset->ill_state = tmp.ill_state;
oldset->fpe_state = tmp.fpe_state;
oldset->abrt_state = tmp.abrt_state;
sync_mask (oldset);
}
return (0);
whoops:
/*
* I'm supposed to restore the signals to the original
* state if something fails, but I'm blowing it off for now.
*/
return (-1);
}
/*
* sync_mask -
* return:
* set(in/out):
*/
static void
sync_mask (sigset_t * set)
{
set->mask |= (set->term_state == SIG_IGN) ? SIGTERM_BIT : set->mask;
set->mask |= (set->sev_state == SIG_IGN) ? SIGSEGV_BIT : set->mask;
set->mask |= (set->int_state == SIG_IGN) ? SIGINT_BIT : set->mask;
set->mask |= (set->ill_state == SIG_IGN) ? SIGILL_BIT : set->mask;
set->mask |= (set->fpe_state == SIG_IGN) ? SIGFPE_BIT : set->mask;
set->mask |= (set->abrt_state == SIG_IGN) ? SIGABRT_BIT : set->mask;
}
/*
* sigprocmask -
* return:
* how(in):
* set(in/out):
* oldset(out):
*
* Note:
*/
int
sigprocmask (int how, sigset_t * set, sigset_t * oldset)
{
switch (how)
{
case SIG_BLOCK:
return (block_signals (set, oldset));
case SIG_UNBLOCK:
return (unblock_signals (set, oldset));
case SIG_SETMASK:
return (setmask (set, oldset));
}
return (-1);
}
/*
* getpagesize -
* return:
*/
DWORD
getpagesize ()
{
static DWORD NT_PageSize = 0;
SYSTEM_INFO sysinfo;
if (NT_PageSize == 0)
{
GetSystemInfo (&sysinfo);
NT_PageSize = sysinfo.dwPageSize;
}
return (NT_PageSize);
}
#if 0
/*
* stat - Windows port of Unix stat()
* return: 0 or -1
* path(in): file path
* buffer(in): struct _stat
*/
int
stat (const char *path, struct stat *buf)
{
struct _stat _buf;
int rc;
rc = _stat (path, &_buf);
if (buf)
*buf = _buf;
return rc;
}
#endif
/*
* pc_init()
* return: none
*/
void
pc_init (void)
{
unsigned int fpbits;
fpbits = _EM_OVERFLOW | _EM_UNDERFLOW | _EM_ZERODIVIDE;
(void) _control87 (fpbits, fpbits);
}
/*
* pc_final()
* return: none
*/
( run in 0.553 second using v1.01-cache-2.11-cpan-600a1bdf6e4 )