/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* string-util : utilities for gchar* strings */ /* * * Authors: Bertrand Guiheneuf * Jeffrey Stedfast * * Copyright 1999, 2000 Ximian, Inc. (www.ximian.com) * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA */ #ifdef HAVE_CONFIG_H #include #endif #include "string-utils.h" #include "string.h" gboolean string_equal_for_glist (gconstpointer v, gconstpointer v2) { return (!strcmp ( ((const gchar *)v), ((const gchar*)v2))) == 0; } /* utility func : frees a gchar element in a GList */ static void __string_list_free_string (gpointer data, gpointer user_data) { gchar *string = (gchar *)data; g_free (string); } void string_list_free (GList *string_list) { if (string_list == NULL) return; g_list_foreach (string_list, __string_list_free_string, NULL); g_list_free (string_list); } GList * string_split (const gchar *string, char sep, const gchar *trim_chars, StringTrimOption trim_options) { GList *result = NULL; gint first, last, pos; gchar *new_string; g_assert (string); first = 0; last = strlen(string) - 1; /* strip leading and trailing separators */ while ( (first<=last) && (string[first]==sep) ) first++; while ( (first<=last) && (string[last]==sep) ) last--; while (first<=last) { pos = first; /* find next separator */ while ((pos<=last) && (string[pos]!=sep)) pos++; if (first != pos) { new_string = g_strndup (string+first, pos-first); /* could do trimming in line to speed up this code */ if (trim_chars) string_trim (new_string, trim_chars, trim_options); result = g_list_append (result, new_string); } first = pos + 1; } return result; } void string_trim (gchar *string, const gchar *trim_chars, StringTrimOption options) { gint first_ok; gint last_ok; guint length; g_return_if_fail (string); length = strlen (string); if (length==0) return; first_ok = 0; last_ok = length - 1; if (options & STRING_TRIM_STRIP_LEADING) while ( (first_ok <= last_ok) && (strchr (trim_chars, string[first_ok])!=NULL) ) first_ok++; if (options & STRING_TRIM_STRIP_TRAILING) while ( (first_ok <= last_ok) && (strchr (trim_chars, string[last_ok])!=NULL) ) last_ok--; if (first_ok > 0) memmove (string, string+first_ok, last_ok - first_ok + 1); string[last_ok - first_ok +1] = '\0'; } /** * remove_suffix: remove a suffix from a string * @s: the string to remove the suffix from. * @suffix: the suffix to remove * @suffix_found : suffix found flag * * Remove a suffix from a string. If the * string ends with the full suffix, a copy * of the string without the suffix is returned and * @suffix_found is set to %TRUE. * Otherwise, NULL is returned and * @suffix_found is set to %FALSE. * * Return value: an allocated copy of the string without the suffix or NULL if the suffix was not found. **/ gchar * string_prefix (const gchar *s, const gchar *suffix, gboolean *suffix_found) { guint s_len, suf_len; guint suffix_pos; char *result_string; g_assert (s); g_assert (suffix); g_assert (suffix_found); s_len = strlen (s); suf_len = strlen (suffix); /* if the string is shorter than the suffix, do nothing */ if (s_len < suf_len) { *suffix_found = FALSE; return NULL; } /* theoretical position of the prefix */ suffix_pos = s_len - suf_len; /* compare the right hand side of the string with the suffix */ if (!strncmp (s+suffix_pos, suffix, suf_len)) { /* if the suffix matches, check that there are characters before */ if (suffix_pos == 0) { result_string = NULL; *suffix_found = TRUE; } else { result_string = g_strndup (s, suffix_pos); *suffix_found = TRUE; } } else { result_string = NULL; *suffix_found = FALSE; } return result_string; } void string_unquote (gchar *string) { /* if the string is quoted, unquote it */ g_return_if_fail (string != NULL); if (*string == '"' && *(string + strlen (string) - 1) == '"') { *(string + strlen (string) - 1) = '\0'; if (*string) memmove (string, string+1, strlen (string)); } } gchar * strip (gchar *string, gchar c) { /* strip all occurances of c from the string */ gchar *src, *dst; g_return_val_if_fail (string != NULL, NULL); for (src = dst = string; *src; src++) if (*src != c) *dst++ = *src; *dst = '\0'; return string; } char * strstrcase (char *haystack, const char *needle) { /* find the needle in the haystack neglecting case */ const char *ptr; guint len; g_return_val_if_fail (haystack != NULL, NULL); g_return_val_if_fail (needle != NULL, NULL); len = strlen (needle); if (len > strlen (haystack)) return NULL; if (len == 0) return (char *) haystack; for (ptr = haystack; *(ptr + len - 1) != '\0'; ptr++) if (!g_strncasecmp (ptr, needle, len)) return (char *) ptr; return NULL; } 3ab0e219db685aff'>treecommitdiffstats
Commit message (Expand)AuthorAgeFilesLines
* Split the postgresql ports into a server and a client part.girgen2005-01-311-23/+6
* Clean up SQLite and related ports.nork2004-12-231-1/+2
* Use new INSTALLS_OMF.mezz2004-11-232-2/+1
* Fix WITHOUT_FIREBIRD case.netchild2004-11-081-1/+1
* Fix MySQL backend support build with gcc 3.4bland2004-08-151-0/+30
* Fix build with GCC 3.4.marcus2004-07-176-0/+93
* Update to 1.0.4.marcus2004-04-193-4/+7
* Fix build with firebird support. FreeBSD doesn't have nor does it needmarcus2004-04-071-0/+11
* Chase the glib20 update, and bump all affected ports' PORTREVISIONs.marcus2004-04-051-1/+1
* - Add SIZE to GNOME portspav2004-03-181-0/+1
* Bump PORTREVISION on all ports that depend on gettext to aid with upgrading.marcus2004-02-041-0/+1
* Update to 1.0.3.adamw2004-01-174-25/+16
* Udpate to 1.0.2.adamw2004-01-043-3/+15
* USE_REINPLACE need be defined only when REINPLACE_CMD is used.trevor2003-11-171-1/+0
* Chase the libxslt shared lib version with a PORTREVISION bump.marcus2003-11-051-1/+1
* Add missed gthread-2.0 and gmodule-2.0 pkgconfig dependencies.bland2003-11-012-0/+12
* s/pqeasy/pgeasy/marcus2003-10-141-1/+1
* Update to 1.0.1.adamw2003-10-133-3/+3
* Fix reference in .omf file to html documentation. So it can be navigatedbland2003-10-022-0/+12
* Update to 1.0.0.adamw2003-09-254-21/+7
* * Use USE_MYSQL [1]marcus2003-08-302-142/+118
* Depend on openldap20-client as openldap20 no longer exists.marcus2003-08-171-1/+1
* Fix build on -STABLE.marcus2003-08-071-0/+12
* Update to 0.91.0.marcus2003-08-064-20/+19
* Update to 0.90.marcus2003-07-043-3/+17
* * Update to 0.12.1 [1]marcus2003-06-134-28/+193
* Remove REINPLACE commands that were rolled into gnomehack.adamw2003-06-121-4/+0
* Remove two stale plist entries.marcus2003-06-031-1/+0
* Update to 0.12.0.marcus2003-06-013-24/+23
* Remove dependency on gbdm. libgda2 does not use it.marcus2003-05-181-3/+3
* Convert to new GNOME infrastructure.marcus2003-04-221-4/+1
* Remove USE_GNOMENG.marcus2003-04-191-1/+0
* Update to 0.11.0.marcus2003-04-043-3/+5
* Clear moonlight beckons.ade2003-03-072-1/+1
* Point dependencies on net/openldap2 to net/openldap20edwin2003-02-241-1/+1
* Replace calls to atoll with strtoll which fixes MySQL and PostgreSQL databasemarcus2003-02-182-0/+22
* Update to GNOME 2.2.marcus2003-02-086-25/+94
* Update to 0.9.0.marcus2003-01-203-15/+6
* Remove share/gnome/idl/libgda.marcus2003-01-131-0/+1
* Chase libpq version bump.seanc2003-01-041-1/+2
* chase gdbm lib versionijliao2003-01-031-1/+1
* Update to 0.8.199.marcus2002-10-253-2/+10
* Make this fetchable.marcus2002-09-231-1/+1
* GNOME has just changed the layout of their FTP site. This resulted inmarcus2002-09-211-1/+1
* Add missing dependency on scrollkeeper.marcus2002-09-191-0/+2
* Update to 0.8.193.marcus2002-09-153-3/+25
* s/-pthread/${PTHREAD_LIBS}/marcus2002-08-151-1/+1
* cvs add a patch missing from the last commit.marcus2002-07-281-0/+11
* * Update to 0.8.192marcus2002-07-274-18/+23
* Use USE_REINPLACE.sobomax2002-07-111-5/+6
* Adding missing dependency on popt.marcus2002-06-201-1/+2
* Fix the Postgres dependency.marcus2002-06-191-1/+1
* Add missing dependency.marcus2002-06-131-1/+2
* Add glade2 and GNOME DB 2 to the tree. These are still beta versions of themarcus2002-06-1211-306/+227