[glib] GCredentials: add getter/setter for the Unix process ID



commit 8f65536504a0902f1e90696eb18f8c2bd5bc1782
Author: Simon McVittie <simon mcvittie collabora co uk>
Date:   Thu Nov 8 14:08:24 2012 +0000

    GCredentials: add getter/setter for the Unix process ID
    
    Bug: https://bugzilla.gnome.org/show_bug.cgi?id=687920

 docs/reference/gio/gio-sections.txt |    1 +
 gio/gcredentials.c                  |   43 +++++++++++++++++++++++++++++++++++
 gio/gcredentials.h                  |    3 ++
 gio/gio.symbols                     |    1 +
 4 files changed, 48 insertions(+), 0 deletions(-)
---
diff --git a/docs/reference/gio/gio-sections.txt b/docs/reference/gio/gio-sections.txt
index a39f55f..23e95c3 100644
--- a/docs/reference/gio/gio-sections.txt
+++ b/docs/reference/gio/gio-sections.txt
@@ -2487,6 +2487,7 @@ g_credentials_set_native
 g_credentials_is_same_user
 g_credentials_get_unix_user
 g_credentials_set_unix_user
+g_credentials_get_unix_pid
 <SUBSECTION Standard>
 G_CREDENTIALS
 G_IS_CREDENTIALS
diff --git a/gio/gcredentials.c b/gio/gcredentials.c
index 42fd53e..ea59b47 100644
--- a/gio/gcredentials.c
+++ b/gio/gcredentials.c
@@ -442,6 +442,48 @@ g_credentials_get_unix_user (GCredentials    *credentials,
 }
 
 /**
+ * g_credentials_get_unix_pid:
+ * @credentials: A #GCredentials
+ * @error: Return location for error or %NULL.
+ *
+ * Tries to get the UNIX process identifier from @credentials. This
+ * method is only available on UNIX platforms.
+ *
+ * This operation can fail if #GCredentials is not supported on the
+ * OS or if the native credentials type does not contain information
+ * about the UNIX process ID.
+ *
+ * Returns: The UNIX process ID, or -1 if @error is set.
+ *
+ * Since: 2.36
+ */
+pid_t
+g_credentials_get_unix_pid (GCredentials    *credentials,
+                            GError         **error)
+{
+  pid_t ret;
+
+  g_return_val_if_fail (G_IS_CREDENTIALS (credentials), -1);
+  g_return_val_if_fail (error == NULL || *error == NULL, -1);
+
+#ifdef __linux__
+  ret = credentials->native.pid;
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
+  ret = credentials->native.cmcred_pid;
+#elif defined(__OpenBSD__)
+  ret = credentials->native.pid;
+#else
+  ret = -1;
+  g_set_error_literal (error,
+                       G_IO_ERROR,
+                       G_IO_ERROR_NOT_SUPPORTED,
+                       _("GCredentials does not contain a process ID on this OS"));
+#endif
+
+  return ret;
+}
+
+/**
  * g_credentials_set_unix_user:
  * @credentials: A #GCredentials.
  * @uid: The UNIX user identifier to set.
@@ -488,4 +530,5 @@ g_credentials_set_unix_user (GCredentials    *credentials,
 
   return ret;
 }
+
 #endif /* G_OS_UNIX */
diff --git a/gio/gcredentials.h b/gio/gcredentials.h
index 8e09f77..ae40972 100644
--- a/gio/gcredentials.h
+++ b/gio/gcredentials.h
@@ -64,6 +64,9 @@ gboolean         g_credentials_is_same_user       (GCredentials    *credentials,
                                                    GError         **error);
 
 #ifdef G_OS_UNIX
+GLIB_AVAILABLE_IN_2_36
+pid_t            g_credentials_get_unix_pid       (GCredentials    *credentials,
+                                                   GError         **error);
 uid_t            g_credentials_get_unix_user      (GCredentials    *credentials,
                                                    GError         **error);
 gboolean         g_credentials_set_unix_user      (GCredentials    *credentials,
diff --git a/gio/gio.symbols b/gio/gio.symbols
index 3096755..1950347 100644
--- a/gio/gio.symbols
+++ b/gio/gio.symbols
@@ -1228,6 +1228,7 @@ g_credentials_get_native
 g_credentials_set_native
 g_credentials_is_same_user
 #ifdef G_OS_UNIX
+g_credentials_get_unix_pid
 g_credentials_get_unix_user
 g_credentials_set_unix_user
 #endif



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]