/* Gwrapc.c wrap libc functions for mc. Copyright (C) 2005-2023 Free Software Foundation, Inc. Contributed by Gaius Mulley . This file is part of GNU Modula-2. GNU Modula-2 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, or (at your option) any later version. GNU Modula-2 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 GNU Modula-2; see the file COPYING3. If not see . */ #include "config.h" #include "system.h" #include "ansidecl.h" #include "gm2-libs-host.h" #ifdef __cplusplus extern "C" { #endif /* strtime returns the address of a string which describes the local time. */ char * wrapc_strtime (void) { #if defined(HAVE_CTIME) time_t clock = time ((time_t *)0); char *string = ctime (&clock); string[24] = (char)0; return string; #else return ""; #endif } int wrapc_filesize (int f, unsigned int *low, unsigned int *high) { struct stat s; int res = fstat (f, (struct stat *)&s); if (res == 0) { *low = (unsigned int)s.st_size; *high = (unsigned int)(s.st_size >> (sizeof (unsigned int) * 8)); } return res; } /* filemtime returns the mtime of a file, f. */ int wrapc_filemtime (int f) { struct stat s; if (fstat (f, (struct stat *)&s) == 0) return s.st_mtime; else return -1; } /* getrand returns a random number between 0..n-1 */ int wrapc_getrand (int n) { return rand () % n; } #if defined(HAVE_PWD_H) #include char * wrapc_getusername (void) { return getpwuid (getuid ())->pw_gecos; } /* getnameuidgid fills in the, uid, and, gid, which represents user, name. */ void wrapc_getnameuidgid (char *name, int *uid, int *gid) { struct passwd *p = getpwnam (name); if (p == NULL) { *uid = -1; *gid = -1; } else { *uid = p->pw_uid; *gid = p->pw_gid; } } #else char * wrapc_getusername (void) { return "unknown"; } void wrapc_getnameuidgid (char *name, int *uid, int *gid) { *uid = -1; *gid = -1; } #endif int wrapc_signbit (double r) { #if defined(HAVE_SIGNBIT) /* signbit is a macro which tests its argument against sizeof(float), sizeof(double). */ return signbit (r); #else return 0; #endif } int wrapc_signbitl (long double r) { #if defined(HAVE_SIGNBITL) /* signbit is a macro which tests its argument against sizeof(float), sizeof(double). */ return signbitl (r); #else return 0; #endif } int wrapc_signbitf (float r) { #if defined(HAVE_SIGNBITF) /* signbit is a macro which tests its argument against sizeof(float), sizeof(double). */ return signbitf (r); #else return 0; #endif } /* init constructor for the module. */ void _M2_wrapc_init () { } /* finish deconstructor for the module. */ void _M2_wrapc_finish () { } #ifdef __cplusplus } #endif