Projects
openEuler:Mainline
glib2
Sign Up
Log In
Username
Password
We truncated the diff of some files because they were too big. If you want to see the full diff for every file,
click here
.
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 7
View file
_service:tar_scm:glib2.spec
Changed
@@ -1,12 +1,13 @@ Name: glib2 Version: 2.74.4 -Release: 2 +Release: 3 Summary: The core library that forms the basis for projects such as GTK+ and GNOME License: LGPLv2+ URL: https://www.gtk.org Source0: https://download.gnome.org/sources/glib/2.74/glib-%{version}.tar.xz patch6001: backport-gdbusinterfaceskeleton-Fix-a-use-after-free-of-a-GDBusMethodInvocation.patch +patch6002: backport-Align-G_FILE_MEASURE_APPARENT_SIZE-behaviour-with-du-from-GNU-coreutils.patch BuildRequires: chrpath gcc gcc-c++ gettext perl-interpreter BUildRequires: glibc-devel libattr-devel libselinux-devel meson @@ -203,6 +204,9 @@ %endif %changelog +* Sat Jul 15 2023 hanhuihui <hanhuihui5@huawei.com> - 2.74.4-3 +- Align G_FILE_MEASURE_APPARENT_SIZE behaviour with du from GNU coreutils + * Tue Mar 14 2023 hanhuihui <hanhuihui5@huawei.com> - 2.74.4-2 - fix a use-after-free of a GDBusMethodInvocation
View file
_service:tar_scm:backport-Align-G_FILE_MEASURE_APPARENT_SIZE-behaviour-with-du-from-GNU-coreutils.patch
Added
@@ -0,0 +1,258 @@ +From 011fe5ebb2516f0673819e6076d4d58d2618c2ea Mon Sep 17 00:00:00 2001 +From: Joan Bruguera <joanbrugueram@gmail.com> +Date: Thu, 23 Mar 2023 02:24:30 +0000 +Subject: PATCH 1/2 glocalfile: Sum apparent size only for files and symlinks + +Since GNU Coreutils 9.2 (commit 110bcd28386b1f47a4cd876098acb708fdcbbb25), +`du --apparent-size` (including `du --bytes`) no longer counts all kinds of +files (directories, FIFOs, etc.), but only those for which `st_size` in +`struct stat` is defined by POSIX, namely regular files and symlinks +(and also rarely supported memory objects). + +This aligns the behaviour of GLib's `G_FILE_MEASURE_APPARENT_SIZE` flag +with the new GNU Coreutils `du` and correct POSIX use. + +Note that this may be a breaking change for some uses. + +Link: https://lists.gnu.org/archive/html/bug-coreutils/2023-03/msg00007.html +Fixes: https://gitlab.gnome.org/GNOME/glib/-/issues/2965 +--- + gio/gioenums.h | 3 +++ + gio/glocalfile.c | 37 +++++++++++++++++++++++++++++++++++++ + 2 files changed, 40 insertions(+) + +diff --git a/gio/gioenums.h b/gio/gioenums.h +index 7fd74a43ea..c820cd36d4 100644 +--- a/gio/gioenums.h ++++ b/gio/gioenums.h +@@ -224,6 +224,9 @@ typedef enum { + * sizes. Normally, the block-size is used, if available, as this is a + * more accurate representation of disk space used. + * Compare with `du --apparent-size`. ++ * Since GLib 2.78. and similarly to `du` since GNU Coreutils 9.2, this will ++ * ignore the sizes of file types other than regular files and links, as the ++ * sizes of other file types are not specified in a standard way. + * @G_FILE_MEASURE_NO_XDEV: Do not cross mount point boundaries. + * Compare with `du -x`. + * +diff --git a/gio/glocalfile.c b/gio/glocalfile.c +index 67d4b99fb7..dbb56902d5 100644 +--- a/gio/glocalfile.c ++++ b/gio/glocalfile.c +@@ -86,6 +86,9 @@ + #define FILE_READ_ONLY_VOLUME 0x00080000 + #endif + ++#ifndef S_ISREG ++#define S_ISREG(m) (((m) & _S_IFMT) == _S_IFREG) ++#endif + #ifndef S_ISDIR + #define S_ISDIR(m) (((m) & _S_IFMT) == _S_IFDIR) + #endif +@@ -2777,6 +2780,39 @@ g_local_file_measure_size_of_contents (gint fd, + MeasureState *state, + GError **error); + ++/* ++ * _g_stat_is_size_usable: ++ * @buf: a #GLocalFileStat. ++ * ++ * Checks if the file type is such that the `st_size` field of `struct stat` is ++ * well-defined by POSIX. ++ * (see https://pubs.opengroup.org/onlinepubs/009696799/basedefs/sys/stat.h.html) ++ * ++ * This behaviour is aligned with `du` from GNU Coreutils 9.2+ ++ * (see https://lists.gnu.org/archive/html/bug-coreutils/2023-03/msg00007.html) ++ * and makes apparent size sums well-defined; formerly, they depended on the ++ * implementation, and could differ across filesystems. ++ * ++ * Returns: %TRUE if the size field is well-defined, %FALSE otherwise. ++ **/ ++inline static gboolean ++_g_stat_is_size_usable (const GLocalFileStat *buf) ++{ ++#ifndef HAVE_STATX ++ /* Memory objects are defined by POSIX, but are not supported by statx nor Windows */ ++#ifdef S_TYPEISSHM ++ if (S_TYPEISSHM (buf)) ++ return TRUE; ++#endif ++#ifdef S_TYPEISTMO ++ if (S_TYPEISTMO (buf)) ++ return TRUE; ++#endif ++#endif ++ ++ return S_ISREG (_g_stat_mode (buf)) || S_ISLNK (_g_stat_mode (buf)); ++} ++ + static gboolean + g_local_file_measure_size_of_file (gint parent_fd, + GSList *name, +@@ -2836,6 +2872,7 @@ g_local_file_measure_size_of_file (gint parent_fd, + state->disk_usage += _g_stat_blocks (&buf) * G_GUINT64_CONSTANT (512); + else + #endif ++ if (_g_stat_is_size_usable (&buf)) + state->disk_usage += _g_stat_size (&buf); + + if (S_ISDIR (_g_stat_mode (&buf))) +-- +GitLab + + +From d901b551288156e8dff2e6c7a4ecabbd76394710 Mon Sep 17 00:00:00 2001 +From: Joan Bruguera <joanbrugueram@gmail.com> +Date: Thu, 23 Mar 2023 02:19:03 +0000 +Subject: PATCH 2/2 tests/file: Do not rely on du --bytes behaviour + +As explained in the previous commit, GNU Coreutils 9.2 changes the behaviour +of `du --bytes` to only count regular files and symlinks. + +The previous commit makes the test pass with GNU Coreutils >=9.2, but the +machine running the tests may have an older version, or perhaps even a +reimplementation such as uutils. So we can't rely on the size returned by `du` +to be the consistent across systems any more. + +However, the plus side of the new behaviour is that the size reported by `du` +/ `G_FILE_MEASURE_APPARENT_SIZE` is now well-defined across filesystems +(as the sum of the sizes of regular files & symlinks), so we can hardcode it. + +Fixes: https://gitlab.gnome.org/GNOME/glib/-/issues/2965 +--- + gio/tests/file.c | 85 ++---------------------------------------------- + 1 file changed, 3 insertions(+), 82 deletions(-) + +diff --git a/gio/tests/file.c b/gio/tests/file.c +index d16eda5c0b..ad2f945f93 100644 +--- a/gio/tests/file.c ++++ b/gio/tests/file.c +@@ -2515,75 +2515,10 @@ test_copy_preserve_mode (void) + #endif + } + +-static gchar * +-splice_to_string (GInputStream *stream, +- GError **error) +-{ +- GMemoryOutputStream *buffer = NULL; +- char *ret = NULL; +- +- buffer = (GMemoryOutputStream*)g_memory_output_stream_new (NULL, 0, g_realloc, g_free); +- if (g_output_stream_splice ((GOutputStream*)buffer, stream, 0, NULL, error) < 0) +- goto out; +- +- if (!g_output_stream_write ((GOutputStream*)buffer, "\0", 1, NULL, error)) +- goto out; +- +- if (!g_output_stream_close ((GOutputStream*)buffer, NULL, error)) +- goto out; +- +- ret = g_memory_output_stream_steal_data (buffer); +- out: +- g_clear_object (&buffer); +- return ret; +-} +- +-static gboolean +-get_size_from_du (const gchar *path, guint64 *size) +-{ +- GSubprocess *du; +- gboolean ok; +- gchar *result; +- gchar *endptr; +- GError *error = NULL; +- gchar *du_path = NULL; +- +-#ifndef HAVE_COCOA +- du_path = g_find_program_in_path ("du"); +-#endif +- +- /* If we can’t find du, don’t try and run the test. */ +- if (du_path == NULL) +- return FALSE; +- +- g_free (du_path); +- +- du = g_subprocess_new (G_SUBPROCESS_FLAGS_STDOUT_PIPE, +- &error, +- "du", "--bytes", "-s", path, NULL); +- g_assert_no_error (error); +- +- result = splice_to_string (g_subprocess_get_stdout_pipe (du), &error); +- g_assert_no_error (error); +- +- *size = g_ascii_strtoll (result, &endptr, 10); +- +- g_subprocess_wait (du, NULL, &error); +- g_assert_no_error (error); +- +- ok = g_subprocess_get_successful (du); +- +- g_object_unref (du); +- g_free (result); +- +- return ok; +-} +- + static void + test_measure (void)
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2