Get OS name from uname()

This implies that OS names have changed. Unix-like OS names are now
capitalized. "macos" is now "Darwin". Windows is now all-lowecase "windows".
"win32" is gone. "win64" was not used in the original code despite a reference
to it.
This commit is contained in:
Lassi Kortela 2019-08-10 00:35:16 +03:00
parent be6a18175f
commit 2ec07684d2
6 changed files with 25 additions and 18 deletions

1
c/env.h Normal file
View File

@ -0,0 +1 @@
const char *env_get_os_name(void);

17
c/env_unix.c Normal file
View File

@ -0,0 +1,17 @@
#include <sys/utsname.h>
#include <string.h>
static const struct utsname *get_global_uname(void)
{
static struct utsname buf;
if (!buf.sysname[0]) {
if (uname(&buf) == -1) {
memset(&buf, 0, sizeof(buf));
}
}
return &buf;
}
const char *env_get_os_name(void) { return get_global_uname()->sysname; }

1
c/env_windows.c Normal file
View File

@ -0,0 +1 @@
const char *env_get_os_name(void) { return "windows"; }

View File

@ -63,8 +63,9 @@
#include "flisp.h"
#include "opcodes.h"
#include "argcount.h"
#include "env.h"
#include "opcodes.h"
static char *builtin_names[] = {
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
@ -2622,19 +2623,7 @@ static void lisp_init(size_t initial_heapsize)
setc(symbol("procedure?"), builtin(OP_FUNCTIONP));
setc(symbol("top-level-bound?"), builtin(OP_BOUNDP));
#ifdef LINUX
set(symbol("*os-name*"), symbol("linux"));
#elif defined(_WIN32)
set(symbol("*os-name*"), symbol("win32"));
#elif defined(MACOSX)
set(symbol("*os-name*"), symbol("macos"));
#elif defined(OPENBSD)
set(symbol("*os-name*"), symbol("openbsd"));
#elif defined(FREEBSD)
set(symbol("*os-name*"), symbol("freebsd"));
#else
set(symbol("*os-name*"), symbol("unknown"));
#endif
set(symbol("*os-name*"), symbol(env_get_os_name()));
the_empty_vector = tagptr(alloc_words(1), TAG_VECTOR);
vector_setsize(the_empty_vector, 0);

View File

@ -1056,9 +1056,7 @@
; initialize globals that need to be set at load time
(define (__init_globals)
(if (or (eq? *os-name* 'win32)
(eq? *os-name* 'win64)
(eq? *os-name* 'windows))
(if (eq? *os-name* 'windows)
(begin (set! *directory-separator* "\\")
(set! *linefeed* "\r\n"))
(begin (set! *directory-separator* "/")

View File

@ -21,6 +21,7 @@ $CC $CFLAGS -c ../c/bitvector-ops.c
$CC $CFLAGS -c ../c/bitvector.c
$CC $CFLAGS -c ../c/builtins.c
$CC $CFLAGS -c ../c/dump.c
$CC $CFLAGS -c ../c/env_unix.c
$CC $CFLAGS -c ../c/equalhash.c
$CC $CFLAGS -c ../c/flisp.c
$CC $CFLAGS -c ../c/flmain.c
@ -40,7 +41,7 @@ $CC $CFLAGS -c ../c/table.c
$CC $CFLAGS -c ../c/time_unix.c
$CC $CFLAGS -c ../c/utf8.c
$CC $LFLAGS -o flisp -lm \
bitvector-ops.o bitvector.o builtins.o dump.o \
bitvector-ops.o bitvector.o builtins.o dump.o env_unix.o \
equalhash.o flisp.o flmain.o fs_"$os".o fs_unix.o \
hashing.o htable.o int2str.o \
ios.o iostream.o lltinit.o ptrhash.o random.o socket.o \