aboutsummaryrefslogtreecommitdiffstats
path: root/camel/gstring-util.c
diff options
context:
space:
mode:
authorbertrand <Bertrand.Guiheneuf@inria.fr>1999-04-18 18:44:38 +0800
committerBertrand Guiheneuf <bertrand@src.gnome.org>1999-04-18 18:44:38 +0800
commit0057293c1cb3f3d001ba3dd262ac3e715378452a (patch)
tree2f7899e813d6a8bf2237c18729889f45020e6632 /camel/gstring-util.c
parent8fcb90785fb673c5dc14c36b54af45502ae65b83 (diff)
downloadgsoc2013-evolution-0057293c1cb3f3d001ba3dd262ac3e715378452a.tar.gz
gsoc2013-evolution-0057293c1cb3f3d001ba3dd262ac3e715378452a.tar.zst
gsoc2013-evolution-0057293c1cb3f3d001ba3dd262ac3e715378452a.zip
some work log system for camel some utilities for GString objects
1999-04-18 bertrand <Bertrand.Guiheneuf@inria.fr> * camel/camel-folder.c: some work * camel/camel-log.c: log system for camel * camel/gstring-util.c: some utilities for GString objects Work on obmail translation. Bertrand svn path=/trunk/; revision=851
Diffstat (limited to 'camel/gstring-util.c')
-rw-r--r--camel/gstring-util.c159
1 files changed, 159 insertions, 0 deletions
diff --git a/camel/gstring-util.c b/camel/gstring-util.c
new file mode 100644
index 0000000000..9a1357babd
--- /dev/null
+++ b/camel/gstring-util.c
@@ -0,0 +1,159 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/* gstring-util : utilities for gstring object */
+
+/*
+ *
+ * Copyright (C) 1999 Bertrand Guiheneuf <Bertrand.Guiheneuf@inria.fr> .
+ *
+ * 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
+ */
+
+
+
+
+#include "gstring-util.h"
+#include "camel-log.h"
+
+
+/**
+ * g_string_equals : test if two string are equal
+ *
+ * @string1 : first string
+ * @string2 : second string
+ *
+ * @Return Value : true if the strings equal, false otherwise
+ **/
+gboolean
+g_string_equals(GString *string1, GString *string2)
+{
+ g_assert(string1);
+ g_assert(string2);
+ return !strcmp(string1->str, string2->str);
+}
+
+
+
+/**
+ * g_string_clone : clone a GString
+ *
+ * @string : the string to clone
+ *
+ * @Return Value : the clone ...
+ **/
+GString *
+g_string_clone(GString *string)
+{
+ return g_string_new( g_strdup(string->str) );
+}
+
+
+
+
+/**
+ * right_dichotomy : return the strings before and/or after
+ * the last occurence of the specified separator
+ *
+ * This routine returns the string before and/or after
+ * a character given as an argument.
+ * if the separator is the last character, prefix and/or
+ * suffix is set to NULL and result is set to 'l'
+ * if the separator is not in the list, prefix and/or
+ * suffix is set to NULL and result is set to 'n'
+ * When the operation succedeed, the return value is 'o'
+ *
+ * @sep : separator
+ * @prefix: pointer to be field by the prefix object
+ * the prefix is not returned when the given pointer is NULL
+ * @suffix: pointer to be field by the suffix object
+ * the suffix is not returned when the given pointer is NULL
+ *
+ * @Return Value : result of the operation ('o', 'l' or 'n')
+ *
+ **/
+gchar
+g_string_right_dichotomy( GString *string, gchar sep, GString **prefix, GString **suffix, DichotomyOption options)
+{
+ gchar *str, *tmp;
+ gint pos, len, first;
+
+ CAMEL_LOG(FULL_DEBUG,\
+ "Entering rightDichotomy: \n\tseparator=%c \n\tprefix=%p \n\tsuffix=%p \n\toptions=%ld\n",\
+ sep, prefix, suffix, options);
+ g_assert( tmp=string->str );
+ len = strlen(tmp);
+ if (!len) {
+ if (prefix) *prefix=NULL;
+ if (suffix) *suffix=NULL;
+ CAMEL_LOG(FULL_DEBUG,"rightDichotomy: string is empty\n");
+ return 'n';
+ }
+ first = 0;
+
+ if ( (options & STRIP_LEADING ) && (tmp[first] == sep) )
+ do {first++;} while ( (first<len) && (tmp[first] == sep) );
+
+ if (options & STRIP_TRAILING )
+ while (tmp[len-1] == sep)
+ len--;
+
+ if (first==len) {
+ if (prefix) *prefix=NULL;
+ if (suffix) *suffix=NULL;
+ CAMEL_LOG(FULL_DEBUG,"rightDichotomy: after stripping, string is empty\n");
+ return 'n';
+ }
+
+ pos = len;
+
+ do {
+ pos--;
+ } while ((pos>=first) && (tmp[pos]!=sep));
+
+
+ if (pos<first)
+ {
+ if (suffix) *suffix=NULL;
+ if (prefix) *prefix=NULL;
+ CAMEL_LOG(FULL_DEBUG,"rightDichotomy: separator not found\n");
+ return 'n';
+ }
+
+ /* if we have stripped trailongs separators, we should */
+ /* never enter here */
+ if (pos==len-1)
+ {
+ if (suffix) *suffix=NULL;
+ if (prefix) *prefix=NULL;
+ CAMEL_LOG(FULL_DEBUG,"rightDichotomy: separator is last character\n");
+ return 'l';
+ }
+
+ if (prefix) /* return the prefix */
+ {
+ str = g_strndup(tmp,pos);
+ *prefix = g_string_new(str);
+ g_free(str);
+ }
+ if (suffix) /* return the suffix */
+ {
+ str = g_strdup(tmp+pos+1);
+ *suffix = g_string_new(str);
+ g_free(str);
+ }
+
+ return 'o';
+}
+