From 51175189c6d7313a3b84019e39496f957c4e6164 Mon Sep 17 00:00:00 2001 From: Stefano Karapetsas Date: Sun, 11 Dec 2011 12:55:19 +0100 Subject: moved from Mate-Extra --- src/egg-string.c | 453 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 453 insertions(+) create mode 100644 src/egg-string.c (limited to 'src/egg-string.c') diff --git a/src/egg-string.c b/src/egg-string.c new file mode 100644 index 0000000..204e6d9 --- /dev/null +++ b/src/egg-string.c @@ -0,0 +1,453 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- + * + * Copyright (C) 2007-2008 Richard Hughes + * + * Licensed under the GNU General Public License Version 2 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +/** + * SECTION:pk-common + * @short_description: Common utility functions for PackageKit + * + * This file contains functions that may be useful. + */ + +#include "config.h" + +#include +#include + +#include +#include +#include +#include + +#ifdef HAVE_UNISTD_H +#include +#endif /* HAVE_UNISTD_H */ + +#include + +#include "egg-debug.h" +#include "egg-string.h" + +/** + * egg_strtoint: + * @text: The text the convert + * @value: The return numeric return value + * + * Converts a string into a signed integer value in a safe way. + * + * Return value: %TRUE if the string was converted correctly + **/ +gboolean +egg_strtoint (const gchar *text, gint *value) +{ + gchar *endptr = NULL; + gint64 value_raw; + + /* invalid */ + if (text == NULL) + return FALSE; + + /* parse */ + value_raw = g_ascii_strtoll (text, &endptr, 10); + + /* parsing error */ + if (endptr == text) + return FALSE; + + /* out of range */ + if (value_raw > G_MAXINT || value_raw < G_MININT) + return FALSE; + + /* cast back down to value */ + *value = (gint) value_raw; + return TRUE; +} + +/** + * egg_strtouint: + * @text: The text the convert + * @value: The return numeric return value + * + * Converts a string into a unsigned integer value in a safe way. + * + * Return value: %TRUE if the string was converted correctly + **/ +gboolean +egg_strtouint (const gchar *text, guint *value) +{ + gchar *endptr = NULL; + guint64 value_raw; + + /* invalid */ + if (text == NULL) + return FALSE; + + /* parse */ + value_raw = g_ascii_strtoull (text, &endptr, 10); + + /* parsing error */ + if (endptr == text) + return FALSE; + + /* out of range */ + if (value_raw > G_MAXINT) + return FALSE; + + /* cast back down to value */ + *value = (guint) value_raw; + return TRUE; +} + +/** + * egg_strzero: + * @text: The text to check + * + * This function is a much safer way of doing "if (strlen (text) == 0))" + * as it does not rely on text being NULL terminated. It's also much + * quicker as it only checks the first byte rather than scanning the whole + * string just to verify it's not zero length. + * + * Return value: %TRUE if the string was converted correctly + **/ +gboolean +egg_strzero (const gchar *text) +{ + if (text == NULL) + return TRUE; + if (text[0] == '\0') + return TRUE; + return FALSE; +} + +/** + * egg_strlen: + * @text: The text to check + * @len: The maximum length of the string + * + * This function is a much safer way of doing strlen as it checks for NULL and + * a stupidly long string. + * + * Return value: the length of the string, or len if the string is too long. + **/ +guint +egg_strlen (const gchar *text, guint len) +{ + guint i; + + /* common case */ + if (text == NULL || text[0] == '\0') + return 0; + + /* only count up to len */ + for (i=1; i