2018-06-02 09:41:06 +00:00
|
|
|
/* -*-comment-start: "//";comment-end:""-*-
|
|
|
|
* Mes --- Maxwell Equations of Software
|
|
|
|
* Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
|
|
|
*
|
|
|
|
* This file is part of Mes.
|
|
|
|
*
|
|
|
|
* Mes is free software; you can redistribute it and/or modify it
|
|
|
|
* under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation; either version 3 of the License, or (at
|
|
|
|
* your option) any later version.
|
|
|
|
*
|
|
|
|
* Mes is distributed in the hope that it will be useful, but
|
|
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with Mes. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <libmes.h>
|
|
|
|
#include <stdint.h>
|
|
|
|
#include <time.h>
|
2018-06-03 16:54:26 +00:00
|
|
|
#include <sys/times.h>
|
2018-06-07 16:03:51 +00:00
|
|
|
#include <sys/time.h>
|
2018-06-02 09:41:06 +00:00
|
|
|
|
|
|
|
FILE *
|
|
|
|
freopen (char const *file_name, char const *opentype, FILE *stream)
|
|
|
|
{
|
|
|
|
fclose (stream);
|
|
|
|
return fopen (file_name, opentype);
|
|
|
|
}
|
|
|
|
|
|
|
|
clock_t
|
|
|
|
times (struct tms *buffer)
|
|
|
|
{
|
2018-06-10 12:07:19 +00:00
|
|
|
static int stub = 0;
|
|
|
|
if (__mes_debug () && !stub)
|
|
|
|
eputs ("times stub\n");
|
|
|
|
stub = 1;
|
2018-06-02 09:41:06 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
unsigned int
|
|
|
|
sleep (unsigned int seconds)
|
|
|
|
{
|
|
|
|
struct timespec requested_time;
|
|
|
|
struct timespec remaining;
|
|
|
|
requested_time.tv_sec = seconds;
|
|
|
|
requested_time.tv_nsec = 0;
|
|
|
|
return nanosleep (&requested_time, &remaining);
|
|
|
|
}
|
2018-06-06 15:02:01 +00:00
|
|
|
|
|
|
|
// gcc-3.2
|
|
|
|
double
|
|
|
|
__divdi3 (double a, double b)
|
|
|
|
{
|
2018-06-10 12:07:19 +00:00
|
|
|
static int stub = 0;
|
|
|
|
if (__mes_debug () && !stub)
|
|
|
|
eputs ("__divdi3 stub\n");
|
|
|
|
stub = 1;
|
2018-06-06 15:02:01 +00:00
|
|
|
return ((int)a / (int)b);
|
|
|
|
}
|
|
|
|
|
|
|
|
double
|
|
|
|
__moddi3 (double a, double b)
|
|
|
|
{
|
2018-06-10 12:07:19 +00:00
|
|
|
static int stub = 0;
|
|
|
|
if (__mes_debug () && !stub)
|
|
|
|
eputs ("__moddi3 stub\n");
|
|
|
|
stub = 1;
|
2018-06-06 15:02:01 +00:00
|
|
|
return ((int) a %(int)b);
|
|
|
|
}
|
2018-06-06 17:43:32 +00:00
|
|
|
|
|
|
|
// gcc-3.4
|
|
|
|
void
|
|
|
|
unsetenv (char const *name)
|
|
|
|
{
|
|
|
|
int length = strlen (name);
|
|
|
|
char **p = environ;
|
|
|
|
while (*p)
|
|
|
|
{
|
|
|
|
if (!strncmp (name, *p, length) && *(*p + length) == '=')
|
|
|
|
{
|
|
|
|
char **q = p;
|
|
|
|
q[0] = q[1];
|
|
|
|
while (*q++)
|
|
|
|
q[0] = q[1];
|
|
|
|
}
|
|
|
|
p++;
|
|
|
|
}
|
|
|
|
}
|
2018-06-07 16:02:21 +00:00
|
|
|
|
|
|
|
// gcc-3.0
|
|
|
|
int
|
|
|
|
atexit (void (*function) (void))
|
|
|
|
{
|
|
|
|
__call_at_exit = function;
|
|
|
|
}
|
|
|
|
|
2018-06-07 16:03:51 +00:00
|
|
|
unsigned int
|
|
|
|
alarm (unsigned int seconds)
|
|
|
|
{
|
|
|
|
#if !__MESC__
|
|
|
|
struct itimerval old;
|
|
|
|
struct itimerval new;
|
|
|
|
new.it_interval.tv_usec = 0;
|
|
|
|
new.it_interval.tv_sec = 0;
|
|
|
|
new.it_value.tv_usec = 0;
|
|
|
|
new.it_value.tv_sec = (long int) seconds;
|
|
|
|
if (setitimer (ITIMER_REAL, &new, &old) < 0)
|
|
|
|
return 0;
|
|
|
|
return old.it_value.tv_sec;
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
2018-06-07 16:04:17 +00:00
|
|
|
// gcc-2.95.3
|
|
|
|
|
|
|
|
struct passwd *
|
|
|
|
getpwnam (const char *NAME)
|
|
|
|
{
|
2018-06-10 12:07:19 +00:00
|
|
|
static int stub = 0;
|
|
|
|
if (__mes_debug () && !stub)
|
|
|
|
eputs ("getpwnam stub\n");
|
|
|
|
stub = 1;
|
2018-06-09 09:28:31 +00:00
|
|
|
errno = 0;
|
2018-06-07 16:04:17 +00:00
|
|
|
return 0;
|
|
|
|
}
|