From a64c61e3d3b54477f313f99aa68b8732c52b5b83 Mon Sep 17 00:00:00 2001 From: _cry64 Date: Mon, 13 Apr 2026 20:30:28 +1000 Subject: [PATCH] fix get/set global_settings --- nixide/src/nix_settings.rs | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/nixide/src/nix_settings.rs b/nixide/src/nix_settings.rs index 21dd9a3..3c98051 100644 --- a/nixide/src/nix_settings.rs +++ b/nixide/src/nix_settings.rs @@ -1,21 +1,26 @@ -use std::ffi::c_void; +use std::ffi::{CString, c_void}; use crate::NixideResult; -use crate::errors::ErrorContext; -use crate::stdext::AsCPtr as _; +use crate::errors::{AsNixideResult as _, ErrorContext}; use crate::util::wrap; use crate::util::wrappers::AsInnerPtr as _; +// DEBUG: should this really be unsafe? /// # Note /// This function is intentionally marked unsafe to discourage its use. /// Please prefer [nixide::FlakeSettings] and [nixide::FetchersSettings]. /// -pub unsafe fn get_global_setting>(key: S) -> NixideResult { - let key = key.as_c_ptr()?; +pub unsafe fn get_global_setting(key: &str) -> NixideResult { + let key = CString::new(key).to_nixide_result()?; wrap::nix_string_callback!( |callback, userdata: *mut __UserData, ctx: &ErrorContext| unsafe { - sys::nix_setting_get(ctx.as_ptr(), key, Some(callback), userdata as *mut c_void); + sys::nix_setting_get( + ctx.as_ptr(), + key.as_ptr(), + Some(callback), + userdata as *mut c_void, + ); } ) } @@ -24,14 +29,12 @@ pub unsafe fn get_global_setting>(key: S) -> NixideResult /// This function is intentionally marked unsafe to discourage its use. /// Please prefer [nixide::FlakeSettings] and [nixide::FetchersSettings]. /// -pub unsafe fn set_global_setting, T: AsRef>( - key: S, - value: T, -) -> NixideResult<()> { - let key = key.as_c_ptr()?; - let value = value.as_c_ptr()?; +pub unsafe fn set_global_setting(key: &str, value: &str) -> NixideResult<()> { + // DEBUG: TODO: write a convenient way to convert this to NixideResult + let key = CString::new(key).unwrap(); + let value = CString::new(value).unwrap(); wrap::nix_fn!(|ctx: &ErrorContext| unsafe { - sys::nix_setting_set(ctx.as_ptr(), key, value); + sys::nix_setting_set(ctx.as_ptr(), key.as_ptr(), value.as_ptr()); }) }