Skip to content

Commit

Permalink
libgit-sys: also export some config_set functions
Browse files Browse the repository at this point in the history
In preparation for implementing a higher-level Rust API for accessing
Git configs, export some of the upstream configset API via libgitpub and
libgit-sys. Since this will be exercised as part of the higher-level API
in the next commit, no tests have been added for libgit-sys.

While we're at it, add git_configset_alloc() and git_configset_free()
functions in libgitpub so that callers can manage config_set structs on
the heap. This also allows non-C external consumers to treat config_sets
as opaque structs.

Co-authored-by: Calvin Wan <[email protected]>
Signed-off-by: Calvin Wan <[email protected]>
Signed-off-by: Josh Steadmon <[email protected]>
Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
2 people authored and gitster committed Jan 28, 2025
1 parent 9857a64 commit 31d5ab2
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 1 deletion.
29 changes: 29 additions & 0 deletions contrib/libgit-sys/public_symbol_export.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,40 @@
*/

#include "git-compat-util.h"
#include "config.h"
#include "contrib/libgit-sys/public_symbol_export.h"
#include "version.h"

#pragma GCC visibility push(default)

struct libgit_config_set *libgit_configset_alloc(void)
{
struct config_set *cs = xmalloc(sizeof(struct config_set));
git_configset_init(cs);
return (struct libgit_config_set *) cs;
}

void libgit_configset_free(struct libgit_config_set *cs)
{
git_configset_clear((struct config_set *) cs);
free((struct config_set *) cs);
}

int libgit_configset_add_file(struct libgit_config_set *cs, const char *filename)
{
return git_configset_add_file((struct config_set *) cs, filename);
}

int libgit_configset_get_int(struct libgit_config_set *cs, const char *key, int *dest)
{
return git_configset_get_int((struct config_set *) cs, key, dest);
}

int libgit_configset_get_string(struct libgit_config_set *cs, const char *key, char **dest)
{
return git_configset_get_string((struct config_set *) cs, key, dest);
}

const char *libgit_user_agent(void)
{
return git_user_agent();
Expand Down
10 changes: 10 additions & 0 deletions contrib/libgit-sys/public_symbol_export.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,16 @@
#ifndef PUBLIC_SYMBOL_EXPORT_H
#define PUBLIC_SYMBOL_EXPORT_H

struct libgit_config_set *libgit_configset_alloc(void);

void libgit_configset_free(struct libgit_config_set *cs);

int libgit_configset_add_file(struct libgit_config_set *cs, const char *filename);

int libgit_configset_get_int(struct libgit_config_set *cs, const char *key, int *dest);

int libgit_configset_get_string(struct libgit_config_set *cs, const char *key, char **dest);

const char *libgit_user_agent(void);

const char *libgit_user_agent_sanitized(void);
Expand Down
31 changes: 30 additions & 1 deletion contrib/libgit-sys/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,15 +1,44 @@
#[cfg(has_std__ffi__c_char)]
use std::ffi::c_char;
use std::ffi::{c_char, c_int};

#[cfg(not(has_std__ffi__c_char))]
#[allow(non_camel_case_types)]
pub type c_char = i8;

#[cfg(not(has_std__ffi__c_char))]
#[allow(non_camel_case_types)]
pub type c_int = i32;

extern crate libz_sys;

#[allow(non_camel_case_types)]
#[repr(C)]
pub struct libgit_config_set {
_data: [u8; 0],
_marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
}

extern "C" {
pub fn libgit_user_agent() -> *const c_char;
pub fn libgit_user_agent_sanitized() -> *const c_char;

pub fn libgit_configset_alloc() -> *mut libgit_config_set;
pub fn libgit_configset_free(cs: *mut libgit_config_set);

pub fn libgit_configset_add_file(cs: *mut libgit_config_set, filename: *const c_char) -> c_int;

pub fn libgit_configset_get_int(
cs: *mut libgit_config_set,
key: *const c_char,
int: *mut c_int,
) -> c_int;

pub fn libgit_configset_get_string(
cs: *mut libgit_config_set,
key: *const c_char,
dest: *mut *mut c_char,
) -> c_int;

}

#[cfg(test)]
Expand Down

0 comments on commit 31d5ab2

Please sign in to comment.