Ctrl K
ComunidadGuías…

std/env.zc

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
import "./core.zc"
import "./option.zc"
import "./string.zc"

import "sys/env.zc"

// Cross-platform environment variable handling

extern fn _z_setenv(name: const char*, value: const char*, overwrite: int) -> int;
extern fn _z_unsetenv(name: const char*) -> int;

@derive(Eq)
enum EnvRes {
    ERR,
    OK,
}

struct Env {}

impl Env {
    /// Returns the value of an environment variable, or `None`.
    fn get(name: string) -> Option<string> {
        let value: string = getenv(name);
        if (value == NULL) {
            return Option<string>::None();
        }

        return Option<string>::Some(value);
    }

    /// Returns an owned copy of an environment variable value.
    fn get_dup(name: string) -> Option<String> {
        let value: string = getenv(name);
        if (value == NULL) {
            return Option<String>::None();
        }

        let v = String::from(value);
        let o = Option<String>::Some(v);
        v.forget();

        return o;
    }

    /// Sets an environment variable.
    fn set(name: string, value: string) -> EnvRes {
        let ret: int = _z_setenv(name, value, 1);

        if (ret == 0) {
            return EnvRes::OK();
        }
        return EnvRes::ERR();
    }

    /// Removes an environment variable.
    fn unset(name: string) -> EnvRes {
        let ret: int = _z_unsetenv(name);

        return (ret == 0) ? EnvRes::OK() : EnvRes::ERR();
    }
}