mirror of
https://github.com/php/frankenphp.git
synced 2026-03-23 16:42:13 +01:00
Introduces C-side interned string registry (frankenphp_strings) and a frankenphp_server_vars struct to bulk-register known $_SERVER variables with pre-sized hashtable capacity.
38 lines
819 B
Go
38 lines
819 B
Go
package frankenphp
|
|
|
|
// #include "frankenphp.h"
|
|
// #include "types.h"
|
|
import "C"
|
|
import (
|
|
"os"
|
|
"strings"
|
|
)
|
|
|
|
var lengthOfEnv = 0
|
|
|
|
//export go_init_os_env
|
|
func go_init_os_env(mainThreadEnv *C.zend_array) {
|
|
fullEnv := os.Environ()
|
|
lengthOfEnv = len(fullEnv)
|
|
|
|
for _, envVar := range fullEnv {
|
|
key, val, _ := strings.Cut(envVar, "=")
|
|
zkey := newPersistentZendString(key)
|
|
zStr := newPersistentZendString(val)
|
|
C.__hash_update_string__(mainThreadEnv, zkey, zStr)
|
|
}
|
|
}
|
|
|
|
//export go_putenv
|
|
func go_putenv(name *C.char, nameLen C.int, val *C.char, valLen C.int) C.bool {
|
|
goName := C.GoStringN(name, nameLen)
|
|
|
|
if val == nil {
|
|
// If no "=" is present, unset the environment variable
|
|
return C.bool(os.Unsetenv(goName) == nil)
|
|
}
|
|
|
|
goVal := C.GoStringN(val, valLen)
|
|
return C.bool(os.Setenv(goName, goVal) == nil)
|
|
}
|