blob: b22e5f1805fd283ef5b509b2f36a8bb0166b472e [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
#include <ctype.h>
#include <errno.h>
#include <grp.h>
#include <math.h>
#include <mntent.h>
#include <netdb.h>
#include <pthread.h>
#include <pwd.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int sigemptyset(sigset_t* set)
{
if (set == NULL) {
errno = EINVAL;
return -1;
}
memset(set, 0, sizeof(sigset_t));
return 0;
}
int sigfillset(sigset_t* set)
{
if (set == NULL) {
errno = EINVAL;
return -1;
}
memset(set, ~0, sizeof(sigset_t));
return 0;
}
int sigaddset(sigset_t* set, int signum)
{
int bit = signum - 1; // Signal numbers start at 1, but bit positions start at 0.
unsigned long* local_set = reinterpret_cast<unsigned long*>(set);
if (set == NULL || bit < 0 || bit >= static_cast<int>(8 * sizeof(sigset_t))) {
errno = EINVAL;
return -1;
}
local_set[bit / LONG_BIT] |= 1UL << (bit % LONG_BIT);
return 0;
}
int sigdelset(sigset_t* set, int signum)
{
int bit = signum - 1; // Signal numbers start at 1, but bit positions start at 0.
unsigned long* local_set = reinterpret_cast<unsigned long*>(set);
if (set == NULL || bit < 0 || bit >= static_cast<int>(8 * sizeof(sigset_t))) {
errno = EINVAL;
return -1;
}
local_set[bit / LONG_BIT] &= ~(1UL << (bit % LONG_BIT));
return 0;
}
int getpagesize()
{
// We dont use sysconf(3) here because that drags in stdio, which makes static binaries fat.
return PAGE_SIZE;
}
size_t __ctype_get_mb_cur_max(void){
return 1;
}
long double strtold(const char*p, char**end) {
return strtod(p, end);
}
float strtof(const char* p, char** end) {
return (float) strtod(p, end);
}
void srandom(unsigned int __s) { srand48(__s); }
int isinf(double n)
{
return __builtin_isinf(n);
}
int posix_memalign(void** memptr, size_t alignment, size_t bytes)
{
if (!memptr)
return EINVAL;
*memptr = memalign(alignment, bytes);
if (!*memptr)
return ENOMEM;
return 0;
}
int sigismember(const sigset_t* set, int signum)
{
int bit = signum - 1; // Signal numbers start at 1, but bit positions start at 0.
const unsigned long* local_set = reinterpret_cast<const unsigned long*>(set);
if (set == NULL || bit < 0 || bit >= static_cast<int>(8 * sizeof(sigset_t))) {
errno = EINVAL;
return -1;
}
return static_cast<int>((local_set[bit / LONG_BIT] >> (bit % LONG_BIT)) & 1);
}
int abs(int j)
{
return(j < 0 ? -j : j);
}
long labs(long j)
{
return(j < 0 ? -j : j);
}
double log2(double n)
{
// log(n)/log(2) is log2
return log(n) / log(2);
}