From: Tulio A M Mendes Date: Fri, 3 Apr 2026 19:52:43 +0000 (-0300) Subject: fix(ulibc): rename __environ to environ for POSIX compliance X-Git-Url: https://projects.tadryanom.me/?a=commitdiff_plain;h=8027c33bfb39f6329456a93c73c5258a7950716b;p=AdrOS.git fix(ulibc): rename __environ to environ for POSIX compliance Replace __environ with environ as the primary environment pointer symbol throughout ulibc and userland commands. POSIX specifies 'environ' as the standard name (IEEE Std 1003.1). Files changed: - user/ulibc/src/stdlib.c: environ as primary symbol, update getenv() - user/ulibc/src/environ.c: all references updated - user/ulibc/src/execvp.c: pass environ to execve() - user/ulibc/include/unistd.h: declare extern environ - user/cmds/env/env.c: use environ - user/cmds/printenv/printenv.c: use environ --- diff --git a/user/cmds/env/env.c b/user/cmds/env/env.c index f81a359e..f02177d2 100644 --- a/user/cmds/env/env.c +++ b/user/cmds/env/env.c @@ -12,19 +12,19 @@ #include #include -extern char** __environ; +extern char** environ; int main(int argc, char** argv) { if (argc <= 1) { /* Print all environment variables */ - if (__environ) { - for (int i = 0; __environ[i]; i++) - printf("%s\n", __environ[i]); + if (environ) { + for (int i = 0; environ[i]; i++) + printf("%s\n", environ[i]); } return 0; } /* env COMMAND ARGS... — run command with current environment */ - execve(argv[1], &argv[1], __environ); + execve(argv[1], &argv[1], environ); fprintf(stderr, "env: %s: not found\n", argv[1]); return 127; } diff --git a/user/cmds/printenv/printenv.c b/user/cmds/printenv/printenv.c index 2921bcec..841a7165 100644 --- a/user/cmds/printenv/printenv.c +++ b/user/cmds/printenv/printenv.c @@ -11,21 +11,21 @@ #include #include -extern char** __environ; +extern char** environ; int main(int argc, char** argv) { - if (!__environ) return 1; + if (!environ) return 1; if (argc <= 1) { - for (int i = 0; __environ[i]; i++) - printf("%s\n", __environ[i]); + for (int i = 0; environ[i]; i++) + printf("%s\n", environ[i]); return 0; } for (int i = 1; i < argc; i++) { int found = 0; int nlen = (int)strlen(argv[i]); - for (int j = 0; __environ[j]; j++) { - if (strncmp(__environ[j], argv[i], (size_t)nlen) == 0 && __environ[j][nlen] == '=') { - printf("%s\n", __environ[j] + nlen + 1); + for (int j = 0; environ[j]; j++) { + if (strncmp(environ[j], argv[i], (size_t)nlen) == 0 && environ[j][nlen] == '=') { + printf("%s\n", environ[j] + nlen + 1); found = 1; break; } diff --git a/user/ulibc/include/unistd.h b/user/ulibc/include/unistd.h index a4af376b..31244d0d 100644 --- a/user/ulibc/include/unistd.h +++ b/user/ulibc/include/unistd.h @@ -121,7 +121,7 @@ int tcsetpgrp(int fd, int pgrp); long confstr(int name, char* buf, size_t len); void* sbrk(int increment); -/* Environment pointer (set by crt0) */ -extern char** __environ; +/* Environment pointer (set by crt0) — POSIX standard name */ +extern char** environ; #endif diff --git a/user/ulibc/src/environ.c b/user/ulibc/src/environ.c index a6c1d660..bffafe69 100644 --- a/user/ulibc/src/environ.c +++ b/user/ulibc/src/environ.c @@ -12,7 +12,7 @@ #include "errno.h" #include -extern char** __environ; +extern char** environ; static char* _env_storage[128]; static int _env_owned = 0; @@ -20,14 +20,14 @@ static int _env_owned = 0; static void _ensure_own_environ(void) { if (_env_owned) return; int count = 0; - if (__environ) { - for (; __environ[count]; count++) { + if (environ) { + for (; environ[count]; count++) { if (count >= 126) break; - _env_storage[count] = __environ[count]; + _env_storage[count] = environ[count]; } } _env_storage[count] = (char*)0; - __environ = _env_storage; + environ = _env_storage; _env_owned = 1; } @@ -41,8 +41,8 @@ int setenv(const char* name, const char* value, int overwrite) { size_t nlen = strlen(name); /* Check if already exists */ - for (int i = 0; __environ[i]; i++) { - if (strncmp(__environ[i], name, nlen) == 0 && __environ[i][nlen] == '=') { + for (int i = 0; environ[i]; i++) { + if (strncmp(environ[i], name, nlen) == 0 && environ[i][nlen] == '=') { if (!overwrite) return 0; /* Replace in-place */ size_t vlen = strlen(value); @@ -51,14 +51,14 @@ int setenv(const char* name, const char* value, int overwrite) { memcpy(buf, name, nlen); buf[nlen] = '='; memcpy(buf + nlen + 1, value, vlen + 1); - __environ[i] = buf; + environ[i] = buf; return 0; } } /* Count entries */ int count = 0; - while (__environ[count]) count++; + while (environ[count]) count++; if (count >= 126) { errno = ENOMEM; return -1; } size_t vlen = strlen(value); @@ -68,8 +68,8 @@ int setenv(const char* name, const char* value, int overwrite) { buf[nlen] = '='; memcpy(buf + nlen + 1, value, vlen + 1); - __environ[count] = buf; - __environ[count + 1] = (char*)0; + environ[count] = buf; + environ[count + 1] = (char*)0; return 0; } @@ -82,11 +82,11 @@ int unsetenv(const char* name) { _ensure_own_environ(); size_t nlen = strlen(name); - for (int i = 0; __environ[i]; i++) { - if (strncmp(__environ[i], name, nlen) == 0 && __environ[i][nlen] == '=') { + for (int i = 0; environ[i]; i++) { + if (strncmp(environ[i], name, nlen) == 0 && environ[i][nlen] == '=') { /* Shift remaining entries down */ - for (int j = i; __environ[j]; j++) - __environ[j] = __environ[j + 1]; + for (int j = i; environ[j]; j++) + environ[j] = environ[j + 1]; return 0; } } @@ -104,17 +104,17 @@ int putenv(char* string) { size_t nlen = (size_t)(eq - string); /* Replace existing or append */ - for (int i = 0; __environ[i]; i++) { - if (strncmp(__environ[i], string, nlen + 1) == 0) { - __environ[i] = string; + for (int i = 0; environ[i]; i++) { + if (strncmp(environ[i], string, nlen + 1) == 0) { + environ[i] = string; return 0; } } int count = 0; - while (__environ[count]) count++; + while (environ[count]) count++; if (count >= 126) { errno = ENOMEM; return -1; } - __environ[count] = string; - __environ[count + 1] = (char*)0; + environ[count] = string; + environ[count + 1] = (char*)0; return 0; } diff --git a/user/ulibc/src/execvp.c b/user/ulibc/src/execvp.c index 94b91f3b..2ffbdbf5 100644 --- a/user/ulibc/src/execvp.c +++ b/user/ulibc/src/execvp.c @@ -13,14 +13,14 @@ #include "errno.h" #include -extern char** __environ; +extern char** environ; int execvp(const char* file, char* const argv[]) { if (!file || !*file) { errno = ENOENT; return -1; } /* If file contains '/', use it directly */ if (strchr(file, '/')) - return execve(file, argv, __environ); + return execve(file, argv, environ); /* Search PATH */ const char* path = getenv("PATH"); @@ -44,7 +44,7 @@ int execvp(const char* file, char* const argv[]) { buf[dlen] = '/'; memcpy(buf + dlen + 1, file, flen + 1); - execve(buf, argv, __environ); + execve(buf, argv, environ); /* If ENOENT, try next; otherwise fail */ if (errno != ENOENT) return -1; @@ -79,5 +79,5 @@ int execl(const char* path, const char* arg, ...) { p++; } args[i] = (const char*)0; - return execve(path, (char* const*)args, __environ); + return execve(path, (char* const*)args, environ); } diff --git a/user/ulibc/src/stdlib.c b/user/ulibc/src/stdlib.c index 90de1c2b..56f49655 100644 --- a/user/ulibc/src/stdlib.c +++ b/user/ulibc/src/stdlib.c @@ -11,8 +11,9 @@ #include "unistd.h" #include "string.h" -/* Global environment pointer — set by crt0 from execve stack layout */ -char** __environ = 0; +/* Global environment pointer — set by crt0 from execve stack layout. + * POSIX name is 'environ'. */ +char** environ = 0; /* * Free-list allocator using brk() syscall. @@ -253,10 +254,10 @@ long strtol(const char* nptr, char** endptr, int base) { } char* getenv(const char* name) { - extern char** __environ; - if (!name || !__environ) return (char*)0; + extern char** environ; + if (!name || !environ) return (char*)0; size_t len = strlen(name); - for (char** e = __environ; *e; e++) { + for (char** e = environ; *e; e++) { if (strncmp(*e, name, len) == 0 && (*e)[len] == '=') return *e + len + 1; }