ostree_kernel_args_contains for OstreeKernelArgs
authorRafael Garcia Ruiz <rafael.garcia@collabora.com>
Thu, 17 Nov 2022 13:49:08 +0000 (14:49 +0100)
committerRafael Garcia Ruiz <rafael.garcia@collabora.com>
Fri, 18 Nov 2022 12:52:08 +0000 (13:52 +0100)
Check if an argument is present in OstreeKernelArgs. This is a way to
make easier idempotent append and delete operations.
ostree_kernel_args_append_if_missing uses it to avoid inserting a
duplicate key.

Closes #2329

Signed-off-by: Rafael Garcia Ruiz <rafael.garcia@collabora.com>
Makefile-libostree.am
apidoc/ostree-sections.txt
rust-bindings/sys/src/lib.rs
src/libostree/libostree-devel.sym
src/libostree/ostree-kernel-args.c
src/libostree/ostree-kernel-args.h

index ea5e8ed5ed160bc288cedad036dfe7fc72919fb0..98e37706a9c2afb460cda5bfbd8b9b5f06a39061 100644 (file)
@@ -171,9 +171,9 @@ endif # USE_GPGME
 symbol_files = $(top_srcdir)/src/libostree/libostree-released.sym
 
 # Uncomment this include when adding new development symbols.
-#if BUILDOPT_IS_DEVEL_BUILD
-#symbol_files += $(top_srcdir)/src/libostree/libostree-devel.sym
-#endif
+if BUILDOPT_IS_DEVEL_BUILD
+symbol_files += $(top_srcdir)/src/libostree/libostree-devel.sym
+endif
 
 # http://blog.jgc.org/2007/06/escaping-comma-and-space-in-gnu-make.html
 wl_versionscript_arg = -Wl,--version-script=
index 900e17043045f2a7e771fc0ffe43b7489591cd19..d9f9120856a76702b1b0604dcb36599a7e481e2f 100644 (file)
@@ -738,6 +738,7 @@ ostree_kernel_args_get_last_value
 ostree_kernel_args_from_string
 ostree_kernel_args_to_strv
 ostree_kernel_args_to_string
+ostree_kernel_args_contains
 </SECTION>
 
 <SECTION>
index 1d28759a84e2a6a5104c9411201e73e13de17e25..df245a6c3c954384a326a207d462a53291dc2dd7 100644 (file)
@@ -1313,6 +1313,12 @@ extern "C" {
     #[cfg(any(feature = "v2022_5", feature = "dox"))]
     #[cfg_attr(feature = "dox", doc(cfg(feature = "v2022_5")))]
     pub fn ostree_kernel_args_append_if_missing(kargs: *mut OstreeKernelArgs, arg: *const c_char);
+    #[cfg(any(feature = "v2022_7", feature = "dox"))]
+    #[cfg_attr(feature = "dox", doc(cfg(feature = "v2022_7")))]
+    pub fn ostree_kernel_args_contains(
+        kargs: *mut OstreeKernelArgs,
+        arg: *const c_char,
+    ) -> gboolean;
     #[cfg(any(feature = "v2019_3", feature = "dox"))]
     #[cfg_attr(feature = "dox", doc(cfg(feature = "v2019_3")))]
     pub fn ostree_kernel_args_append_proc_cmdline(
index eef5cba0b79ce805d9e9e4810ff7dc6f649c9ab9..2926fe626a0e67136718454c0b25966c5fff09bf 100644 (file)
    - uncomment the include in Makefile-libostree.am
 */
 
+LIBOSTREE_2022.7 {
+global:
+  ostree_kernel_args_contains;
+} LIBOSTREE_2022.5;
 
 /* Stub section for the stable release *after* this development one; don't
  * edit this other than to update the year.  This is just a copy/paste
index 08dcf992f11eae991278009baf52f5c9d5ff3037..b5fe4def909442325e1f70fc524963e217fa80f1 100644 (file)
@@ -820,12 +820,31 @@ void
 ostree_kernel_args_append_if_missing (OstreeKernelArgs  *kargs,
                                       const char *arg)
 {
-  g_autofree char *key = g_strdup (arg);
-  split_keyeq (key);
   // Don't insert a duplicate key.
-  if (g_hash_table_contains (kargs->table, key))
+  if (ostree_kernel_args_contains (kargs, arg))
     return;
  
   ostree_kernel_args_append (kargs, arg);
 }
+
+/**
+ * ostree_kernel_args_contains:
+ * @kargs: a OstreeKernelArgs instance
+ * @arg: key or key/value pair to check
+ *
+ * Search for @arg which is in the form of key=value pair at the hash table kargs->table
+ * and returns true if finds it.
+ *
+ *Returns: %TRUE if @arg is contained in @kargs, %FALSE otherwise.
+ *
+ * Since: 2022.7
+ **/
+gboolean
+ostree_kernel_args_contains (OstreeKernelArgs  *kargs,
+                             const char *arg)
+{
+  g_autofree char *key = g_strdup (arg);
+  split_keyeq (key);
+
+  return g_hash_table_contains (kargs->table, key);
+}
index 2e1b249a957b34d8ff8b622598629d5369cb20f4..94c494f6557f1403744d3c6176d73c4db9152987 100644 (file)
@@ -134,4 +134,8 @@ _OSTREE_PUBLIC
 void ostree_kernel_args_append_if_missing (OstreeKernelArgs *kargs, 
                                            const char *arg);
 
+_OSTREE_PUBLIC
+gboolean ostree_kernel_args_contains (OstreeKernelArgs *kargs,
+                                      const char *arg);
+
 G_END_DECLS