Skip to content

glib-sys: fix struct size mismatches #1360

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Apr 17, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 31 additions & 1 deletion glib/sys/Gir.toml
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,6 @@ ignore = [
[[object]]
name = "GLib.*"
status = "generate"
ignore = true
[[object.function]]
pattern = "(fopen|creat|chmod|blow_chunks|utime|slice_debug_tree_statistics|rename|remove|open|mkdir|lstat|fsync|freopen|set_prgname_once)"
# see https://gitlab.gnome.org/GNOME/glib/-/issues/3231 + majority of those are available through std
Expand Down Expand Up @@ -111,3 +110,34 @@ status = "ignore"
name = "GLib.macro__has_attribute___noreturn__"
# C-only macro
status = "ignore"

[[object]]
name = "GLib.StaticMutex"
# deprecated type and also the layout is broken due to mismatching gir data
status = "ignore"
[[object.function]]
pattern = ".+"
ignore = true

[[object]]
name = "GLib.StaticPrivate"
# deprecated type, no longer needed
[[object.function]]
pattern = ".+"
ignore = true

[[object]]
name = "GLib.StaticRecMutex"
# deprecated type and also the layout is broken due to mismatching gir data
status = "ignore"
[[object.function]]
pattern = ".+"
ignore = true

[[object]]
name = "GLib.StaticRWLock"
# deprecated type and also the layout is broken due to mismatching gir data
status = "ignore"
[[object.function]]
pattern = ".+"
ignore = true
86 changes: 0 additions & 86 deletions glib/sys/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2195,66 +2195,6 @@ pub struct _GStatBuf {

pub type GStatBuf = _GStatBuf;

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GStaticMutex {
pub mutex: *mut GMutex,
}

impl ::std::fmt::Debug for GStaticMutex {
fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
f.debug_struct(&format!("GStaticMutex @ {self:p}"))
.field("mutex", &self.mutex)
.finish()
}
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GStaticPrivate {
pub index: c_uint,
}

impl ::std::fmt::Debug for GStaticPrivate {
fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
f.debug_struct(&format!("GStaticPrivate @ {self:p}"))
.finish()
}
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GStaticRWLock {
pub mutex: GStaticMutex,
pub read_cond: *mut GCond,
pub write_cond: *mut GCond,
pub read_counter: c_uint,
pub have_writer: gboolean,
pub want_to_read: c_uint,
pub want_to_write: c_uint,
}

impl ::std::fmt::Debug for GStaticRWLock {
fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
f.debug_struct(&format!("GStaticRWLock @ {self:p}"))
.finish()
}
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GStaticRecMutex {
pub mutex: GStaticMutex,
pub depth: c_uint,
}

impl ::std::fmt::Debug for GStaticRecMutex {
fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
f.debug_struct(&format!("GStaticRecMutex @ {self:p}"))
.finish()
}
}

#[derive(Copy, Clone)]
#[repr(C)]
pub struct GString {
Expand Down Expand Up @@ -5181,44 +5121,18 @@ extern "C" {
//=========================================================================
// GStaticMutex
//=========================================================================
pub fn g_static_mutex_free(mutex: *mut GStaticMutex);
pub fn g_static_mutex_get_mutex_impl(mutex: *mut GStaticMutex) -> *mut GMutex;
pub fn g_static_mutex_init(mutex: *mut GStaticMutex);

//=========================================================================
// GStaticPrivate
//=========================================================================
pub fn g_static_private_free(private_key: *mut GStaticPrivate);
pub fn g_static_private_get(private_key: *mut GStaticPrivate) -> gpointer;
pub fn g_static_private_init(private_key: *mut GStaticPrivate);
pub fn g_static_private_set(
private_key: *mut GStaticPrivate,
data: gpointer,
notify: GDestroyNotify,
);

//=========================================================================
// GStaticRWLock
//=========================================================================
pub fn g_static_rw_lock_free(lock: *mut GStaticRWLock);
pub fn g_static_rw_lock_init(lock: *mut GStaticRWLock);
pub fn g_static_rw_lock_reader_lock(lock: *mut GStaticRWLock);
pub fn g_static_rw_lock_reader_trylock(lock: *mut GStaticRWLock) -> gboolean;
pub fn g_static_rw_lock_reader_unlock(lock: *mut GStaticRWLock);
pub fn g_static_rw_lock_writer_lock(lock: *mut GStaticRWLock);
pub fn g_static_rw_lock_writer_trylock(lock: *mut GStaticRWLock) -> gboolean;
pub fn g_static_rw_lock_writer_unlock(lock: *mut GStaticRWLock);

//=========================================================================
// GStaticRecMutex
//=========================================================================
pub fn g_static_rec_mutex_free(mutex: *mut GStaticRecMutex);
pub fn g_static_rec_mutex_init(mutex: *mut GStaticRecMutex);
pub fn g_static_rec_mutex_lock(mutex: *mut GStaticRecMutex);
pub fn g_static_rec_mutex_lock_full(mutex: *mut GStaticRecMutex, depth: c_uint);
pub fn g_static_rec_mutex_trylock(mutex: *mut GStaticRecMutex) -> gboolean;
pub fn g_static_rec_mutex_unlock(mutex: *mut GStaticRecMutex);
pub fn g_static_rec_mutex_unlock_full(mutex: *mut GStaticRecMutex) -> c_uint;

//=========================================================================
// GString
Expand Down
28 changes: 0 additions & 28 deletions glib/sys/tests/abi.rs
Original file line number Diff line number Diff line change
Expand Up @@ -733,34 +733,6 @@ const RUST_LAYOUTS: &[(&str, Layout)] = &[
alignment: align_of::<GSpawnFlags>(),
},
),
(
"GStaticMutex",
Layout {
size: size_of::<GStaticMutex>(),
alignment: align_of::<GStaticMutex>(),
},
),
(
"GStaticPrivate",
Layout {
size: size_of::<GStaticPrivate>(),
alignment: align_of::<GStaticPrivate>(),
},
),
(
"GStaticRWLock",
Layout {
size: size_of::<GStaticRWLock>(),
alignment: align_of::<GStaticRWLock>(),
},
),
(
"GStaticRecMutex",
Layout {
size: size_of::<GStaticRecMutex>(),
alignment: align_of::<GStaticRecMutex>(),
},
),
(
"GString",
Layout {
Expand Down
4 changes: 0 additions & 4 deletions glib/sys/tests/layout.c
Original file line number Diff line number Diff line change
Expand Up @@ -83,10 +83,6 @@ int main() {
printf("%s;%zu;%zu\n", "GSourceFuncs", sizeof(GSourceFuncs), alignof(GSourceFuncs));
printf("%s;%zu;%zu\n", "GSpawnError", sizeof(GSpawnError), alignof(GSpawnError));
printf("%s;%zu;%zu\n", "GSpawnFlags", sizeof(GSpawnFlags), alignof(GSpawnFlags));
printf("%s;%zu;%zu\n", "GStaticMutex", sizeof(GStaticMutex), alignof(GStaticMutex));
printf("%s;%zu;%zu\n", "GStaticPrivate", sizeof(GStaticPrivate), alignof(GStaticPrivate));
printf("%s;%zu;%zu\n", "GStaticRWLock", sizeof(GStaticRWLock), alignof(GStaticRWLock));
printf("%s;%zu;%zu\n", "GStaticRecMutex", sizeof(GStaticRecMutex), alignof(GStaticRecMutex));
printf("%s;%zu;%zu\n", "GString", sizeof(GString), alignof(GString));
printf("%s;%zu;%zu\n", "GStrv", sizeof(GStrv), alignof(GStrv));
printf("%s;%zu;%zu\n", "GTestConfig", sizeof(GTestConfig), alignof(GTestConfig));
Expand Down
Loading