1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-25 00:29:09 -05:00

feat(unstable): add Deno.getGid (#14528)

This commit is contained in:
James Bradlee 2022-05-31 10:42:44 +02:00 committed by GitHub
parent d9ed5e905c
commit c41544ac7b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 45 additions and 0 deletions

View file

@ -317,6 +317,18 @@ declare namespace Deno {
*/ */
export function getUid(): number | null; export function getUid(): number | null;
/** **Unstable** new API. yet to be vetted.
*
* Returns the group id of the process on POSIX platforms. Returns null on windows.
*
* ```ts
* console.log(Deno.getGid());
* ```
*
* Requires `allow-env` permission.
*/
export function getGid(): number | null;
/** All possible types for interfacing with foreign functions */ /** All possible types for interfacing with foreign functions */
export type NativeType = export type NativeType =
| "void" | "void"

View file

@ -204,3 +204,13 @@ Deno.test({ permissions: { env: true } }, function getUid() {
assert(uid > 0); assert(uid > 0);
} }
}); });
Deno.test({ permissions: { env: true } }, function getGid() {
if (Deno.build.os === "windows") {
assertEquals(Deno.getGid(), null);
} else {
const gid = Deno.getGid();
assert(typeof gid === "number");
assert(gid > 0);
}
});

View file

@ -30,6 +30,10 @@
return core.opSync("op_network_interfaces"); return core.opSync("op_network_interfaces");
} }
function getGid() {
return core.opSync("op_getgid");
}
function getUid() { function getUid() {
return core.opSync("op_getuid"); return core.opSync("op_getuid");
} }
@ -94,6 +98,7 @@
env, env,
execPath, execPath,
exit, exit,
getGid,
getUid, getUid,
hostname, hostname,
loadavg, loadavg,

View file

@ -124,6 +124,7 @@
osRelease: __bootstrap.os.osRelease, osRelease: __bootstrap.os.osRelease,
systemMemoryInfo: __bootstrap.os.systemMemoryInfo, systemMemoryInfo: __bootstrap.os.systemMemoryInfo,
networkInterfaces: __bootstrap.os.networkInterfaces, networkInterfaces: __bootstrap.os.networkInterfaces,
getGid: __bootstrap.os.getGid,
getUid: __bootstrap.os.getUid, getUid: __bootstrap.os.getUid,
sleepSync: __bootstrap.timers.sleepSync, sleepSync: __bootstrap.timers.sleepSync,
listen: __bootstrap.netUnstable.listen, listen: __bootstrap.netUnstable.listen,

View file

@ -22,6 +22,7 @@ pub fn init(maybe_exit_code: Option<Arc<AtomicI32>>) -> Extension {
op_exit::decl(), op_exit::decl(),
op_delete_env::decl(), op_delete_env::decl(),
op_get_env::decl(), op_get_env::decl(),
op_getgid::decl(),
op_getuid::decl(), op_getuid::decl(),
op_hostname::decl(), op_hostname::decl(),
op_loadavg::decl(), op_loadavg::decl(),
@ -225,6 +226,22 @@ fn op_system_memory_info(
} }
} }
#[cfg(not(windows))]
#[op]
fn op_getgid(state: &mut OpState) -> Result<Option<u32>, AnyError> {
super::check_unstable(state, "Deno.getGid");
state.borrow_mut::<Permissions>().env.check_all()?;
unsafe { Ok(Some(libc::getgid())) }
}
#[cfg(windows)]
#[op]
fn op_getgid(state: &mut OpState) -> Result<Option<u32>, AnyError> {
super::check_unstable(state, "Deno.getGid");
state.borrow_mut::<Permissions>().env.check_all()?;
Ok(None)
}
#[cfg(not(windows))] #[cfg(not(windows))]
#[op] #[op]
fn op_getuid(state: &mut OpState) -> Result<Option<u32>, AnyError> { fn op_getuid(state: &mut OpState) -> Result<Option<u32>, AnyError> {