os: add os.uname()
							parent
							
								
									2ef0f15b34
								
							
						
					
					
						commit
						206e64d72c
					
				|  | @ -1358,3 +1358,12 @@ pub fn create(path string) ?File { | |||
| 		opened: true | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| pub struct Uname { | ||||
| pub mut: | ||||
| 	sysname  string | ||||
| 	nodename string | ||||
| 	release  string | ||||
| 	version  string | ||||
| 	machine  string | ||||
| } | ||||
|  |  | |||
|  | @ -5,6 +5,7 @@ import strings | |||
| #include <dirent.h> | ||||
| #include <unistd.h> | ||||
| #include <fcntl.h> | ||||
| #include <sys/utsname.h> | ||||
| 
 | ||||
| pub const ( | ||||
| 	path_separator = '/' | ||||
|  | @ -17,8 +18,32 @@ const ( | |||
| 	stderr_value = 2 | ||||
| ) | ||||
| 
 | ||||
| struct C.utsname { | ||||
| mut: | ||||
| 	sysname  charptr | ||||
| 	nodename charptr | ||||
| 	release  charptr | ||||
| 	version  charptr | ||||
| 	machine  charptr | ||||
| } | ||||
| 
 | ||||
| fn C.uname(name voidptr) int | ||||
| fn C.symlink(charptr, charptr) int | ||||
| 
 | ||||
| pub fn uname() Uname { | ||||
| 	mut u := Uname{} | ||||
| 	d := &C.utsname( malloc(int(sizeof(C.utsname))) ) | ||||
| 	if C.uname(d) == 0 { | ||||
| 		u.sysname = cstring_to_vstring(d.sysname) | ||||
| 		u.nodename = cstring_to_vstring(d.nodename) | ||||
| 		u.release = cstring_to_vstring(d.release) | ||||
| 		u.version = cstring_to_vstring(d.version) | ||||
| 		u.machine = cstring_to_vstring(d.machine) | ||||
| 	} | ||||
| 	free(d) | ||||
| 	return u | ||||
| } | ||||
| 
 | ||||
| fn init_os_args(argc int, argv &&byte) []string { | ||||
| 	mut args := []string{} | ||||
| 	//mut args := []string(make(0, argc, sizeof(string)))
 | ||||
|  |  | |||
|  | @ -343,3 +343,12 @@ fn test_basedir() { | |||
| 	} | ||||
| 	assert os.base_dir('filename') == 'filename' | ||||
| } | ||||
| 
 | ||||
| fn test_uname() { | ||||
| 	u := os.uname() | ||||
| 	assert u.sysname.len > 0 | ||||
| 	assert u.nodename.len > 0 | ||||
| 	assert u.release.len > 0 | ||||
| 	assert u.version.len > 0 | ||||
| 	assert u.machine.len > 0 | ||||
| } | ||||
|  |  | |||
|  | @ -317,7 +317,7 @@ pub: | |||
| 	// status_ constants
 | ||||
| 	code u32 | ||||
| 	flags u32 | ||||
| 	 | ||||
| 
 | ||||
| 	record &ExceptionRecord | ||||
| 	address voidptr | ||||
| 	param_count u32 | ||||
|  | @ -353,3 +353,15 @@ pub fn add_vectored_exception_handler(first bool, handler VectoredExceptionHandl | |||
| pub fn debugger_present() bool { | ||||
| 	return C.IsDebuggerPresent() | ||||
| } | ||||
| 
 | ||||
| pub fn uname() Uname { | ||||
| 	// TODO: implement `os.uname()` for windows
 | ||||
| 	unknown := 'unknown' | ||||
| 	return Uname{ | ||||
| 		sysname: unknown | ||||
| 		nodename: unknown | ||||
| 		release: unknown | ||||
| 		version: unknown | ||||
| 		machine: unknown | ||||
| 	} | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue