mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-24 03:02:10 +01:00
goption: implement platform_get_argv0() for OpenBSD
https://bugzilla.gnome.org/show_bug.cgi?id=669024
This commit is contained in:
parent
f6a7a70a1f
commit
0c550d4a61
@ -139,6 +139,13 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
|
#if defined __OpenBSD__
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <sys/param.h>
|
||||||
|
#include <sys/sysctl.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "goption.h"
|
#include "goption.h"
|
||||||
|
|
||||||
#include "gprintf.h"
|
#include "gprintf.h"
|
||||||
@ -1665,7 +1672,7 @@ free_pending_nulls (GOptionContext *context,
|
|||||||
static char *
|
static char *
|
||||||
platform_get_argv0 (void)
|
platform_get_argv0 (void)
|
||||||
{
|
{
|
||||||
#ifdef __linux
|
#if defined __linux
|
||||||
char *cmdline;
|
char *cmdline;
|
||||||
char *base_arg0;
|
char *base_arg0;
|
||||||
gsize len;
|
gsize len;
|
||||||
@ -1685,6 +1692,28 @@ platform_get_argv0 (void)
|
|||||||
base_arg0 = g_path_get_basename (cmdline);
|
base_arg0 = g_path_get_basename (cmdline);
|
||||||
g_free (cmdline);
|
g_free (cmdline);
|
||||||
return base_arg0;
|
return base_arg0;
|
||||||
|
#elif defined __OpenBSD__
|
||||||
|
char **cmdline = NULL;
|
||||||
|
char *base_arg0;
|
||||||
|
gsize len = PATH_MAX;
|
||||||
|
|
||||||
|
int mib[] = { CTL_KERN, KERN_PROC_ARGS, getpid(), KERN_PROC_ARGV };
|
||||||
|
|
||||||
|
cmdline = (char **) realloc (cmdline, len);
|
||||||
|
|
||||||
|
if (sysctl (mib, nitems (mib), cmdline, &len, NULL, 0) == -1)
|
||||||
|
{
|
||||||
|
g_free (cmdline);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* We could just return cmdline, but I think it's better
|
||||||
|
* to hold on to a smaller malloc block; the arguments
|
||||||
|
* could be large.
|
||||||
|
*/
|
||||||
|
base_arg0 = g_path_get_basename (*cmdline);
|
||||||
|
g_free (cmdline);
|
||||||
|
return base_arg0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#ifdef __linux
|
#if defined __linux || defined __OpenBSD__
|
||||||
static void
|
static void
|
||||||
test_platform_argv0 (void)
|
test_platform_argv0 (void)
|
||||||
{
|
{
|
||||||
@ -55,7 +55,7 @@ main (int argc,
|
|||||||
/* Note - we can't actually use g_test_* because g_test_init mutates
|
/* Note - we can't actually use g_test_* because g_test_init mutates
|
||||||
* g_get_prgname() which is exactly what we wanted to test =/
|
* g_get_prgname() which is exactly what we wanted to test =/
|
||||||
*/
|
*/
|
||||||
#ifdef __linux
|
#if defined __linux || defined __OpenBSD__
|
||||||
g_print ("/option/argv0: ");
|
g_print ("/option/argv0: ");
|
||||||
test_platform_argv0 ();
|
test_platform_argv0 ();
|
||||||
g_print ("OK\n");
|
g_print ("OK\n");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user