Skip to content

Commit d76eb0d

Browse files
steadmoncalvin-wan-google
authored andcommitted
libgit-sys: also export some config_set functions
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]>
1 parent e7f8bf1 commit d76eb0d

File tree

3 files changed

+76
-1
lines changed

3 files changed

+76
-1
lines changed

contrib/libgit-sys/public_symbol_export.c

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,47 @@
55
*/
66

77
#include "git-compat-util.h"
8+
#include "config.h"
89
#include "contrib/libgit-sys/public_symbol_export.h"
910
#include "version.h"
1011

1112
#pragma GCC visibility push(default)
1213

14+
struct libgit_config_set {
15+
struct config_set cs;
16+
};
17+
18+
struct libgit_config_set *libgit_configset_alloc(void)
19+
{
20+
struct libgit_config_set *cs =
21+
xmalloc(sizeof(struct libgit_config_set));
22+
git_configset_init(&cs->cs);
23+
return cs;
24+
}
25+
26+
void libgit_configset_free(struct libgit_config_set *cs)
27+
{
28+
git_configset_clear(&cs->cs);
29+
free(cs);
30+
}
31+
32+
int libgit_configset_add_file(struct libgit_config_set *cs, const char *filename)
33+
{
34+
return git_configset_add_file(&cs->cs, filename);
35+
}
36+
37+
int libgit_configset_get_int(struct libgit_config_set *cs, const char *key,
38+
int *dest)
39+
{
40+
return git_configset_get_int(&cs->cs, key, dest);
41+
}
42+
43+
int libgit_configset_get_string(struct libgit_config_set *cs, const char *key,
44+
char **dest)
45+
{
46+
return git_configset_get_string(&cs->cs, key, dest);
47+
}
48+
1349
const char *libgit_user_agent(void)
1450
{
1551
return git_user_agent();

contrib/libgit-sys/public_symbol_export.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,16 @@
11
#ifndef PUBLIC_SYMBOL_EXPORT_H
22
#define PUBLIC_SYMBOL_EXPORT_H
33

4+
struct libgit_config_set *libgit_configset_alloc(void);
5+
6+
void libgit_configset_free(struct libgit_config_set *cs);
7+
8+
int libgit_configset_add_file(struct libgit_config_set *cs, const char *filename);
9+
10+
int libgit_configset_get_int(struct libgit_config_set *cs, const char *key, int *dest);
11+
12+
int libgit_configset_get_string(struct libgit_config_set *cs, const char *key, char **dest);
13+
414
const char *libgit_user_agent(void);
515

616
const char *libgit_user_agent_sanitized(void);

contrib/libgit-sys/src/lib.rs

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,44 @@
11
#[cfg(has_std__ffi__c_char)]
2-
use std::ffi::c_char;
2+
use std::ffi::{c_char, c_int};
33

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

8+
#[cfg(not(has_std__ffi__c_char))]
9+
#[allow(non_camel_case_types)]
10+
pub type c_int = i32;
11+
812
extern crate libz_sys;
913

14+
#[allow(non_camel_case_types)]
15+
#[repr(C)]
16+
pub struct libgit_config_set {
17+
_data: [u8; 0],
18+
_marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
19+
}
20+
1021
extern "C" {
1122
pub fn libgit_user_agent() -> *const c_char;
1223
pub fn libgit_user_agent_sanitized() -> *const c_char;
24+
25+
pub fn libgit_configset_alloc() -> *mut libgit_config_set;
26+
pub fn libgit_configset_free(cs: *mut libgit_config_set);
27+
28+
pub fn libgit_configset_add_file(cs: *mut libgit_config_set, filename: *const c_char) -> c_int;
29+
30+
pub fn libgit_configset_get_int(
31+
cs: *mut libgit_config_set,
32+
key: *const c_char,
33+
int: *mut c_int,
34+
) -> c_int;
35+
36+
pub fn libgit_configset_get_string(
37+
cs: *mut libgit_config_set,
38+
key: *const c_char,
39+
dest: *mut *mut c_char,
40+
) -> c_int;
41+
1342
}
1443

1544
#[cfg(test)]

0 commit comments

Comments
 (0)