mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-15 23:07:16 +01:00
add documentation for G_OPTION_ARG_INT64
2006-05-11 Bastien Nocera <hadess@hadess.net> * glib/tmpl/option.sgml: add documentation for G_OPTION_ARG_INT64 2006-05-11 Bastien Nocera <hadess@hadess.net> * glib/goption.c: (parse_int64), (parse_arg), (free_changes_list): * glib/goption.h: * tests/option-test.c: (arg_test6), (main): add an int64 type for GOption (G_OPTION_ARG_INT64) (#341237)
This commit is contained in:
parent
268084caf9
commit
93ec25ad67
@ -1,3 +1,10 @@
|
|||||||
|
2006-05-11 Bastien Nocera <hadess@hadess.net>
|
||||||
|
|
||||||
|
* glib/goption.c: (parse_int64), (parse_arg), (free_changes_list):
|
||||||
|
* glib/goption.h:
|
||||||
|
* tests/option-test.c: (arg_test6), (main): add an int64 type for
|
||||||
|
GOption (G_OPTION_ARG_INT64) (#341237)
|
||||||
|
|
||||||
2006-05-10 Sebastian Wilhelmi <wilhelmi@google.com>
|
2006-05-10 Sebastian Wilhelmi <wilhelmi@google.com>
|
||||||
|
|
||||||
* glib/gthread.h, gthread/gthread-impl.c: Make the magic and
|
* glib/gthread.h, gthread/gthread-impl.c: Make the magic and
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
|
2006-05-11 Bastien Nocera <hadess@hadess.net>
|
||||||
|
|
||||||
|
* glib/goption.c: (parse_int64), (parse_arg), (free_changes_list):
|
||||||
|
* glib/goption.h:
|
||||||
|
* tests/option-test.c: (arg_test6), (main): add an int64 type for
|
||||||
|
GOption (G_OPTION_ARG_INT64) (#341237)
|
||||||
|
|
||||||
2006-05-10 Sebastian Wilhelmi <wilhelmi@google.com>
|
2006-05-10 Sebastian Wilhelmi <wilhelmi@google.com>
|
||||||
|
|
||||||
* glib/gthread.h, gthread/gthread-impl.c: Make the magic and
|
* glib/gthread.h, gthread/gthread-impl.c: Make the magic and
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
2006-05-11 Bastien Nocera <hadess@hadess.net>
|
||||||
|
|
||||||
|
* glib/tmpl/option.sgml: add documentation for G_OPTION_ARG_INT64
|
||||||
|
|
||||||
2006-05-10 Matthias Clasen <mclasen@redhat.com>
|
2006-05-10 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
* gobject/tmpl/gtype.sgml: Updates
|
* gobject/tmpl/gtype.sgml: Updates
|
||||||
|
@ -259,6 +259,10 @@ or combined in a single argument: <option>--name=arg</option>.
|
|||||||
multiple uses of the option are collected into an array of strings.
|
multiple uses of the option are collected into an array of strings.
|
||||||
@G_OPTION_ARG_DOUBLE: The option takes a double argument. The argument
|
@G_OPTION_ARG_DOUBLE: The option takes a double argument. The argument
|
||||||
can be formatted either for the user's locale or for the "C" locale. Since 2.12
|
can be formatted either for the user's locale or for the "C" locale. Since 2.12
|
||||||
|
@G_OPTION_ARG_INT64: The option takes a 64-bit integer. Like %G_OPTION_ARG_INT
|
||||||
|
but for larger numbers. The number can be in decimal base, or in hexadecimal
|
||||||
|
(when prefixed with <literal>0x</literal>, for example, <literal>0xffffffff</literal>).
|
||||||
|
Since 2.12
|
||||||
|
|
||||||
<!-- ##### ENUM GOptionFlags ##### -->
|
<!-- ##### ENUM GOptionFlags ##### -->
|
||||||
<para>
|
<para>
|
||||||
|
@ -51,6 +51,7 @@ typedef struct
|
|||||||
gchar *str;
|
gchar *str;
|
||||||
gchar **array;
|
gchar **array;
|
||||||
gdouble dbl;
|
gdouble dbl;
|
||||||
|
gint64 int64;
|
||||||
} prev;
|
} prev;
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
@ -716,6 +717,41 @@ parse_double (const gchar *arg_name,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
parse_int64 (const gchar *arg_name,
|
||||||
|
const gchar *arg,
|
||||||
|
gint64 *result,
|
||||||
|
GError **error)
|
||||||
|
{
|
||||||
|
gchar *end;
|
||||||
|
gint64 tmp;
|
||||||
|
|
||||||
|
errno = 0;
|
||||||
|
tmp = strtoll (arg, &end, 0);
|
||||||
|
|
||||||
|
if (*arg == '\0' || *end != '\0')
|
||||||
|
{
|
||||||
|
g_set_error (error,
|
||||||
|
G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE,
|
||||||
|
_("Cannot parse integer value '%s' for %s"),
|
||||||
|
arg, arg_name);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
if (errno == ERANGE)
|
||||||
|
{
|
||||||
|
g_set_error (error,
|
||||||
|
G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE,
|
||||||
|
_("Integer value '%s' for %s out of range"),
|
||||||
|
arg, arg_name);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
*result = tmp;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static Change *
|
static Change *
|
||||||
get_change (GOptionContext *context,
|
get_change (GOptionContext *context,
|
||||||
GOptionArg arg_type,
|
GOptionArg arg_type,
|
||||||
@ -953,6 +989,23 @@ parse_arg (GOptionContext *context,
|
|||||||
*(gdouble *)entry->arg_data = data;
|
*(gdouble *)entry->arg_data = data;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case G_OPTION_ARG_INT64:
|
||||||
|
{
|
||||||
|
gint64 data;
|
||||||
|
|
||||||
|
if (!parse_int64 (option_name, value,
|
||||||
|
&data,
|
||||||
|
error))
|
||||||
|
{
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
change = get_change (context, G_OPTION_ARG_INT64,
|
||||||
|
entry->arg_data);
|
||||||
|
change->prev.int64 = *(gint64 *)entry->arg_data;
|
||||||
|
*(gint64 *)entry->arg_data = data;
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
g_assert_not_reached ();
|
g_assert_not_reached ();
|
||||||
}
|
}
|
||||||
@ -1220,6 +1273,9 @@ free_changes_list (GOptionContext *context,
|
|||||||
case G_OPTION_ARG_DOUBLE:
|
case G_OPTION_ARG_DOUBLE:
|
||||||
*(gdouble *)change->arg_data = change->prev.dbl;
|
*(gdouble *)change->arg_data = change->prev.dbl;
|
||||||
break;
|
break;
|
||||||
|
case G_OPTION_ARG_INT64:
|
||||||
|
*(gint64 *)change->arg_data = change->prev.int64;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
g_assert_not_reached ();
|
g_assert_not_reached ();
|
||||||
}
|
}
|
||||||
|
@ -50,7 +50,8 @@ typedef enum
|
|||||||
G_OPTION_ARG_FILENAME,
|
G_OPTION_ARG_FILENAME,
|
||||||
G_OPTION_ARG_STRING_ARRAY,
|
G_OPTION_ARG_STRING_ARRAY,
|
||||||
G_OPTION_ARG_FILENAME_ARRAY,
|
G_OPTION_ARG_FILENAME_ARRAY,
|
||||||
G_OPTION_ARG_DOUBLE
|
G_OPTION_ARG_DOUBLE,
|
||||||
|
G_OPTION_ARG_INT64
|
||||||
} GOptionArg;
|
} GOptionArg;
|
||||||
|
|
||||||
typedef gboolean (*GOptionArgFunc) (const gchar *option_name,
|
typedef gboolean (*GOptionArgFunc) (const gchar *option_name,
|
||||||
|
@ -12,6 +12,8 @@ gchar *arg_test2_string;
|
|||||||
gchar *arg_test3_filename;
|
gchar *arg_test3_filename;
|
||||||
gdouble arg_test4_double;
|
gdouble arg_test4_double;
|
||||||
gdouble arg_test5_double;
|
gdouble arg_test5_double;
|
||||||
|
gint64 arg_test6_int64;
|
||||||
|
gint64 arg_test6_int64_2;
|
||||||
|
|
||||||
gchar *callback_test1_string;
|
gchar *callback_test1_string;
|
||||||
int callback_test2_int;
|
int callback_test2_int;
|
||||||
@ -407,6 +409,36 @@ arg_test5 (void)
|
|||||||
g_option_context_free (context);
|
g_option_context_free (context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
arg_test6 (void)
|
||||||
|
{
|
||||||
|
GOptionContext *context;
|
||||||
|
gboolean retval;
|
||||||
|
GError *error = NULL;
|
||||||
|
gchar **argv;
|
||||||
|
int argc;
|
||||||
|
GOptionEntry entries [] =
|
||||||
|
{ { "test", 0, 0, G_OPTION_ARG_INT64, &arg_test6_int64, NULL, NULL },
|
||||||
|
{ "test2", 0, 0, G_OPTION_ARG_INT64, &arg_test6_int64_2, NULL, NULL },
|
||||||
|
{ NULL } };
|
||||||
|
|
||||||
|
context = g_option_context_new (NULL);
|
||||||
|
g_option_context_add_main_entries (context, entries, NULL);
|
||||||
|
|
||||||
|
/* Now try parsing */
|
||||||
|
argv = split_string ("program --test 4294967297 --test 4294967296 --test2 0xfffffffff", &argc);
|
||||||
|
|
||||||
|
retval = g_option_context_parse (context, &argc, &argv, &error);
|
||||||
|
g_assert (retval);
|
||||||
|
|
||||||
|
/* Last arg specified is the one that should be stored */
|
||||||
|
g_assert (arg_test6_int64 == 4294967296LL);
|
||||||
|
g_assert (arg_test6_int64_2 == 0xfffffffffLL);
|
||||||
|
|
||||||
|
g_strfreev (argv);
|
||||||
|
g_option_context_free (context);
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
callback_parse1 (const gchar *option_name, const gchar *value,
|
callback_parse1 (const gchar *option_name, const gchar *value,
|
||||||
gpointer data, GError **error)
|
gpointer data, GError **error)
|
||||||
@ -1370,6 +1402,7 @@ main (int argc, char **argv)
|
|||||||
arg_test3 ();
|
arg_test3 ();
|
||||||
arg_test4 ();
|
arg_test4 ();
|
||||||
arg_test5 ();
|
arg_test5 ();
|
||||||
|
arg_test6 ();
|
||||||
|
|
||||||
/* Test string arrays */
|
/* Test string arrays */
|
||||||
array_test1 ();
|
array_test1 ();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user