~ chicken-core (chicken-5) f2c96809de45db2bbd373301737ce006979105b3
commit f2c96809de45db2bbd373301737ce006979105b3 Author: felix <felix@call-with-current-continuation.org> AuthorDate: Thu Jul 27 17:13:17 2017 +0200 Commit: Evan Hanson <evhan@foldling.org> CommitDate: Sat Aug 5 10:01:35 2017 +1200 Removed sysinfo stuff (`get-host-name' and `system-information') Signed-off-by: Evan Hanson <evhan@foldling.org> diff --git a/library.scm b/library.scm index 0c296847..6cff6796 100644 --- a/library.scm +++ b/library.scm @@ -5744,9 +5744,6 @@ EOF repository-path installation-repository register-feature! unregister-feature! software-type software-version - - ;;; TODO, move these from posix: - ;; get-host-name system-information ) (import scheme chicken chicken.fixnum chicken.foreign chicken.keyword) diff --git a/posix.scm b/posix.scm index ec89380d..8115bfd3 100644 --- a/posix.scm +++ b/posix.scm @@ -56,7 +56,7 @@ file-select file-size file-stat file-test-lock file-truncate file-type file-unlock file-write file-write-access? fileno/stderr fileno/stdin fileno/stdout get-environment-variables - get-host-name local-time->seconds local-timezone-abbreviation + local-time->seconds local-timezone-abbreviation open-input-file* open-input-pipe open-output-file* open-output-pipe open/append open/binary open/creat open/excl open/fsync open/noctty open/noinherit open/nonblock open/rdonly open/rdwr open/read @@ -80,7 +80,7 @@ signal/usr1 signal/usr2 signal/vtalrm signal/winch signal/xcpu signal/xfsz signals-list socket? spawn/detach spawn/nowait spawn/nowaito spawn/overlay spawn/wait string->time symbolic-link? - system-information terminal-name terminal-port? terminal-size + terminal-name terminal-port? terminal-size time->string unset-environment-variable! user-information utc-time->seconds with-input-from-pipe with-output-to-pipe) diff --git a/posixunix.scm b/posixunix.scm index 9376c2bc..170e6494 100644 --- a/posixunix.scm +++ b/posixunix.scm @@ -38,7 +38,6 @@ static C_TLS int C_wait_status; #include <sys/time.h> #include <sys/wait.h> -#include <sys/utsname.h> #include <sys/ioctl.h> #include <fcntl.h> #include <dirent.h> @@ -94,7 +93,6 @@ extern char **environ; # define FILENAME_MAX 1024 #endif -static C_TLS struct utsname C_utsname; static C_TLS struct flock C_flock; static C_TLS DIR *temphandle; static C_TLS struct passwd *C_user; @@ -109,7 +107,6 @@ static C_TLS struct passwd *C_user; static C_TLS int C_pipefds[ 2 ]; static C_TLS time_t C_secs; static C_TLS struct timeval C_timeval; -static C_TLS char C_hostbuf[ 256 ]; static C_TLS struct stat C_statbuf; #define C_fchdir(fd) C_fix(fchdir(C_unfix(fd))) @@ -147,7 +144,6 @@ static C_TLS struct stat C_statbuf; #define C_pipe(d) C_fix(pipe(C_pipefds)) #define C_truncate(f, n) C_fix(truncate((char *)C_data_pointer(f), C_num_to_int(n))) #define C_ftruncate(f, n) C_fix(ftruncate(C_unfix(f), C_num_to_int(n))) -#define C_uname C_fix(uname(&C_utsname)) #define C_alarm alarm #define C_test_access(fn, m) C_fix(access((char *)C_data_pointer(fn), C_unfix(m))) #define C_close(fd) C_fix(close(C_unfix(fd))) @@ -788,25 +784,7 @@ static C_word C_i_fifo_p(C_word name) (posix-error #:process-error 'signal-unmask! "cannot unblock signal") ) ) -;;; Getting system-, group- and user-information: - -(define-foreign-variable _uname int "C_uname") -(define-foreign-variable _uname-sysname nonnull-c-string "C_utsname.sysname") -(define-foreign-variable _uname-nodename nonnull-c-string "C_utsname.nodename") -(define-foreign-variable _uname-release nonnull-c-string "C_utsname.release") -(define-foreign-variable _uname-version nonnull-c-string "C_utsname.version") -(define-foreign-variable _uname-machine nonnull-c-string "C_utsname.machine") - -(define system-information - (lambda () - (when (fx< _uname 0) - (##sys#update-errno) - (##sys#error 'system-information "cannot retrieve system information") ) - (list _uname-sysname - _uname-nodename - _uname-release - _uname-version - _uname-machine) ) ) +;;; Getting group- and user-information: (define current-user-id (getter-with-setter @@ -1317,17 +1295,6 @@ static C_word C_i_fifo_p(C_word name) (posix-error #:error 'terminal-size "Unable to get size of terminal" port)))))) -(define get-host-name - (let ([getit - (foreign-lambda* c-string () - "if(gethostname(C_hostbuf, 256) == -1) C_return(NULL);" - "else C_return(C_hostbuf);") ] ) - (lambda () - (let ([host (getit)]) - (unless host - (posix-error #:error 'get-host-name "cannot retrieve host-name") ) - host) ) ) ) - ;;; Process handling: diff --git a/posixwin.scm b/posixwin.scm index b20ef2e4..a5bb6904 100644 --- a/posixwin.scm +++ b/posixwin.scm @@ -101,15 +101,8 @@ static C_TLS char C_rdbuf; /* one-char buffer for read */ static C_TLS int C_exstatus; /* platform information; initialized for cached testing */ -static C_TLS char C_hostname[256] = ""; -static C_TLS char C_osver[16] = ""; -static C_TLS char C_osrel[16] = ""; -static C_TLS char C_processor[16] = ""; static C_TLS char C_shlcmd[256] = ""; -/* Windows NT or better */ -static int C_isNT = 0; - /* Current user name */ static C_TLS TCHAR C_username[255 + 1] = ""; @@ -352,127 +345,52 @@ process_wait(C_word h, C_word t) #define C_process_wait(p, t) (process_wait(C_unfix(p), C_truep(t)) ? C_SCHEME_TRUE : C_SCHEME_FALSE) -static int C_fcall -get_hostname() -{ - /* Do we already have hostname? */ - if (strlen(C_hostname)) - { - return 1; - } - else - { - WSADATA wsa; - if (WSAStartup(MAKEWORD(1, 1), &wsa) == 0) - { - int nok = gethostname(C_hostname, sizeof(C_hostname)); - WSACleanup(); - return !nok; - } - return 0; - } -} + +static C_TLS int C_isNT = 0; + static int C_fcall -sysinfo() +C_windows_nt() { - /* Do we need to build the sysinfo? */ - if (!strlen(C_osrel)) - { - OSVERSIONINFO ovf; - ZeroMemory(&ovf, sizeof(ovf)); - ovf.dwOSVersionInfoSize = sizeof(ovf); - if (get_hostname() && GetVersionEx(&ovf)) - { - SYSTEM_INFO si; - _snprintf(C_osver, sizeof(C_osver) - 1, "%lu.%lu.%lu", - ovf.dwMajorVersion, ovf.dwMinorVersion, ovf.dwBuildNumber); - strncpy(C_osrel, "Win", sizeof(C_osrel) - 1); - switch (ovf.dwPlatformId) - { - case VER_PLATFORM_WIN32s: - strncpy(C_osrel, "Win32s", sizeof(C_osrel) - 1); - break; - case VER_PLATFORM_WIN32_WINDOWS: - if (ovf.dwMajorVersion == 4) - { - if (ovf.dwMinorVersion == 0) - strncpy(C_osrel, "Win95", sizeof(C_osrel) - 1); - else if (ovf.dwMinorVersion == 10) - strncpy(C_osrel, "Win98", sizeof(C_osrel) - 1); - else if (ovf.dwMinorVersion == 90) - strncpy(C_osrel, "WinMe", sizeof(C_osrel) - 1); - } - break; - case VER_PLATFORM_WIN32_NT: - C_isNT = 1; - if (ovf.dwMajorVersion == 6) - strncpy(C_osrel, "WinVista", sizeof(C_osrel) - 1); - else if (ovf.dwMajorVersion == 5) - { - if (ovf.dwMinorVersion == 2) - strncpy(C_osrel, "WinServer2003", sizeof(C_osrel) - 1); - else if (ovf.dwMinorVersion == 1) - strncpy(C_osrel, "WinXP", sizeof(C_osrel) - 1); - else if ( ovf.dwMinorVersion == 0) - strncpy(C_osrel, "Win2000", sizeof(C_osrel) - 1); - } - else if (ovf.dwMajorVersion <= 4) - strncpy(C_osrel, "WinNT", sizeof(C_osrel) - 1); - break; - } - GetSystemInfo(&si); - strncpy(C_processor, "Unknown", sizeof(C_processor) - 1); - switch (si.wProcessorArchitecture) - { - case PROCESSOR_ARCHITECTURE_INTEL: - strncpy(C_processor, "x86", sizeof(C_processor) - 1); - break; -# ifdef PROCESSOR_ARCHITECTURE_IA64 - case PROCESSOR_ARCHITECTURE_IA64: - strncpy(C_processor, "IA64", sizeof(C_processor) - 1); - break; -# endif -# ifdef PROCESSOR_ARCHITECTURE_AMD64 - case PROCESSOR_ARCHITECTURE_AMD64: - strncpy(C_processor, "x64", sizeof(C_processor) - 1); - break; -# endif -# ifdef PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 - case PROCESSOR_ARCHITECTURE_IA32_ON_WIN64: - strncpy(C_processor, "WOW64", sizeof(C_processor) - 1); - break; -# endif - } - } - else - return set_last_errno(); + static int has_info = 0; + + if(!has_info) { + OSVERSIONINFO ovf; + ZeroMemory(&ovf, sizeof(ovf)); + ovf.dwOSVersionInfoSize = sizeof(ovf); + has_info = 1; + + if(GetVersionEx(&ovf)) { + SYSTEM_INFO si; + + switch (ovf.dwPlatformId) { + case VER_PLATFORM_WIN32_NT: + return C_isNT = 1; + } } - return 1; + } + + return C_isNT; } + static int C_fcall get_shlcmd() { /* Do we need to build the shell command pathname? */ if (!strlen(C_shlcmd)) { - if (sysinfo()) /* for C_isNT */ - { - char *cmdnam = C_isNT ? "\\cmd.exe" : "\\command.com"; - UINT len = GetSystemDirectory(C_shlcmd, sizeof(C_shlcmd) - strlen(cmdnam)); - if (len) - C_strlcpy(C_shlcmd + len, cmdnam, sizeof(C_shlcmd)); - else - return set_last_errno(); - } - else - return 0; + char *cmdnam = C_windows_nt() ? "\\cmd.exe" : "\\command.com"; + UINT len = GetSystemDirectory(C_shlcmd, sizeof(C_shlcmd) - strlen(cmdnam)); + if (len) + C_strlcpy(C_shlcmd + len, cmdnam, sizeof(C_shlcmd)); + else + return set_last_errno(); } + return 1; } -#define C_get_hostname() (get_hostname() ? C_SCHEME_TRUE : C_SCHEME_FALSE) #define C_sysinfo() (sysinfo() ? C_SCHEME_TRUE : C_SCHEME_FALSE) #define C_get_shlcmd() (get_shlcmd() ? C_SCHEME_TRUE : C_SCHEME_FALSE) @@ -1212,27 +1130,8 @@ static int set_file_mtime(char *filename, C_word atime, C_word mtime) (values pid #t _exstatus) (values -1 #f #f) ) ) -(define-foreign-variable _hostname c-string "C_hostname") -(define-foreign-variable _osver c-string "C_osver") -(define-foreign-variable _osrel c-string "C_osrel") -(define-foreign-variable _processor c-string "C_processor") - -(define get-host-name - (lambda () - (if (##core#inline "C_get_hostname") - _hostname - (##sys#error 'get-host-name "cannot retrieve host-name") ) ) ) - -;;; Getting system-, group- and user-information: - -(define system-information - (lambda () - (if (##core#inline "C_sysinfo") - (list "windows" _hostname _osrel _osver _processor) - (begin - (##sys#update-errno) - (##sys#error 'system-information "cannot retrieve system-information") ) ) ) ) +;;; Getting group- and user-information: (define-foreign-variable _username c-string "C_username") diff --git a/types.db b/types.db index 5412a33d..1338a254 100644 --- a/types.db +++ b/types.db @@ -1977,7 +1977,6 @@ (chicken.posix#fileno/stderr fixnum) (chicken.posix#fileno/stdin fixnum) (chicken.posix#fileno/stdout fixnum) -(chicken.posix#get-host-name (#(procedure #:clean) chicken.posix#get-host-name () string)) (chicken.posix#local-time->seconds (#(procedure #:clean #:enforce) chicken.posix#local-time->seconds ((vector fixnum fixnum fixnum fixnum fixnum fixnum fixnum fixnum boolean fixnum)) integer)) (chicken.posix#local-timezone-abbreviation (#(procedure #:clean) chicken.posix#local-timezone-abbreviation () string)) (chicken.posix#open-input-file* (#(procedure #:clean #:enforce) chicken.posix#open-input-file* (fixnum #!optional symbol) input-port)) @@ -2094,7 +2093,6 @@ (chicken.posix#socket? (#(procedure #:clean #:enforce) chicken.posix#socket? ((or string fixnum)) boolean)) (chicken.posix#string->time (#(procedure #:clean #:enforce) chicken.posix#string->time (string #!optional string) (vector fixnum fixnum fixnum fixnum fixnum fixnum fixnum fixnum boolean fixnum))) (chicken.posix#symbolic-link? (#(procedure #:clean #:enforce) chicken.posix#symbolic-link? ((or string fixnum)) boolean)) -(chicken.posix#system-information (#(procedure #:clean) chicken.posix#system-information () list)) (chicken.posix#terminal-name (#(procedure #:clean #:enforce) chicken.posix#terminal-name (port) string)) (chicken.posix#terminal-port? (#(procedure #:clean #:enforce) chicken.posix#terminal-port? (port) boolean)) (chicken.posix#terminal-size (#(procedure #:clean #:enforce) chicken.posix#terminal-size (port) fixnum fixnum))Trap