opuntiaOS - an operating system targeting x86 and ARMv7
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

[all] Covered Env with a test

+81 -5
+1 -1
kernel/kernel/tasking/tasking.c
··· 250 250 251 251 // Inlined part of kmem_bring_to_kernel_ptrarr 252 252 for (int i = start_with; i < *kargc; i++) { 253 - res[i] = kmem_bring_to_kernel(argv[i - 1], strlen(argv[i - 1]) + 1); 253 + res[i] = kmem_bring_to_kernel(argv[i - start_with], strlen(argv[i - start_with]) + 1); 254 254 } 255 255 256 256 *kargv = res;
+3 -3
libs/libc/stdlib/env.c
··· 17 17 continue; 18 18 } 19 19 size_t curlen = (size_t)(eqpos - envv); 20 - if (curlen == len && strncmp(name, envv, len)) { 20 + if (curlen == len && strncmp(name, envv, len) == 0) { 21 21 return (char*)&envv[len + 1]; 22 22 } 23 23 } ··· 70 70 } 71 71 72 72 char** new_environ = (char**)malloc(sizeof(char*) * (env_i + 2)); 73 - for (int i = 0; environ[i]; i++) { 73 + for (int i = 0; i < env_i; i++) { 74 74 new_environ[i] = environ[i]; 75 75 } 76 76 new_environ[env_i] = string; 77 - new_environ[env_i] = NULL; 77 + new_environ[env_i + 1] = NULL; 78 78 79 79 extern int __environ_malloced; 80 80 if (__environ_malloced) {
+1
test/kernel/BUILD.gn
··· 4 4 5 5 group("test_kernel") { 6 6 deps = [ 7 + "//test/kernel/env:env", 7 8 "//test/kernel/fs:fs", 8 9 "//test/kernel/signal:signal", 9 10 ]
+8
test/kernel/env/BUILD.gn
··· 1 + import("//build/test/TEMPLATE.gni") 2 + 3 + opuntiaOS_test("env") { 4 + test_bundle = "kernel/env" 5 + sources = [ "main.c" ] 6 + configs = [ "//build/userland:userland_flags" ] 7 + deplibs = [ "libc" ] 8 + }
+32
test/kernel/env/main.c
··· 1 + #include <signal.h> 2 + #include <stdio.h> 3 + #include <stdlib.h> 4 + #include <string.h> 5 + #include <unistd.h> 6 + 7 + int main(int argc, char** argv) 8 + { 9 + if (getenv("OSTEST")) { 10 + char* res = getenv("GO"); 11 + if (!res) { 12 + TestErr("Empty GO env var."); 13 + } 14 + if (strncmp(res, "go", 2)) { 15 + TestErr("Different value in GO env var."); 16 + } 17 + return 0; 18 + } 19 + 20 + if (argc > 1) { 21 + TestErr("Loop while executing test."); 22 + } 23 + 24 + char* argvs[] = { 25 + "loop" 26 + }; 27 + 28 + setenv("OSTEST", "1", 1); 29 + setenv("GO", "go", 1); 30 + execve(argv[0], argvs, environ); 31 + return 1; 32 + }
+36 -1
userland/shell/onesh/main.c
··· 31 31 enum internal_cmd_code { 32 32 CMD_NONE = 0, 33 33 CMD_CD, 34 + CMD_SET, 35 + CMD_UNSET, 36 + CMD_ENV, 34 37 }; 35 38 36 39 uint32_t _is_cmd_internal() ··· 38 41 if (memcmp(_cmd_buffer, "cd", 2) == 0) { 39 42 return CMD_CD; 40 43 } 44 + if (memcmp(_cmd_buffer, "set", 3) == 0) { 45 + return CMD_SET; 46 + } 47 + if (memcmp(_cmd_buffer, "env", 3) == 0) { 48 + return CMD_ENV; 49 + } 50 + if (memcmp(_cmd_buffer, "unset", 5) == 0) { 51 + return CMD_UNSET; 52 + } 41 53 return CMD_NONE; 42 54 } 43 55 ··· 45 57 { 46 58 if (code == CMD_CD) { 47 59 return chdir(_cmd_parsed_buffer[1]); 60 + } 61 + if (code == CMD_SET) { 62 + char* eqpos = strchr(_cmd_parsed_buffer[1], '='); 63 + if (!eqpos) { 64 + return 0; 65 + } 66 + *eqpos = '\0'; 67 + return setenv(_cmd_parsed_buffer[1], (char*)(eqpos + 1), 1); 68 + } 69 + if (code == CMD_UNSET) { 70 + return unsetenv(_cmd_parsed_buffer[1]); 71 + } 72 + if (code == CMD_ENV) { 73 + for (int i = 0; environ[i]; i++) { 74 + const char* envv = environ[i]; 75 + char* eqpos = strchr(envv, '='); 76 + if (!eqpos) { 77 + continue; 78 + } 79 + size_t len = strlen(envv); 80 + write(STDOUT, envv, len); 81 + write(STDOUT, "\n", 1); 82 + } 48 83 } 49 84 return 0; 50 85 } ··· 106 141 int res = fork(); 107 142 if (!res) { 108 143 // We don't pass an app name to args. 109 - execve(_cmd_app, &_cmd_parsed_buffer[1], 0); 144 + execve(_cmd_app, &_cmd_parsed_buffer[1], environ); 110 145 exit(-1); 111 146 } else { 112 147 running_job = res;