diff options
Diffstat (limited to 'camel')
-rw-r--r-- | camel/Makefile.am | 8 | ||||
-rw-r--r-- | camel/camel-folder.c | 84 | ||||
-rw-r--r-- | camel/camel-folder.h | 6 | ||||
-rw-r--r-- | camel/camel-log.c | 39 | ||||
-rw-r--r-- | camel/camel-log.h | 43 | ||||
-rw-r--r-- | camel/gstring-util.c | 159 | ||||
-rw-r--r-- | camel/gstring-util.h | 53 |
7 files changed, 388 insertions, 4 deletions
diff --git a/camel/Makefile.am b/camel/Makefile.am index 3f51452430..2e8d987404 100644 --- a/camel/Makefile.am +++ b/camel/Makefile.am @@ -12,10 +12,14 @@ INCLUDES = -I.. -I$(srcdir)/.. -I$(includedir) \ $(GTK_INCLUDEDIR) libcamel_la_SOURCES = \ - camel-folder.c + camel-log.c \ + camel-folder.c \ + gstring-util.c libcamelinclude_HEADERS = \ - camel-folder.h + camel-log.h \ + camel-folder.h \ + gstring-util.h libcamel_la_LDFLAGS = -version-info 0:0:0 -rpath $(libdir) diff --git a/camel/camel-folder.c b/camel/camel-folder.c index e7598b0d42..c1af6c7bbe 100644 --- a/camel/camel-folder.c +++ b/camel/camel-folder.c @@ -30,6 +30,11 @@ static void camel_folder_open(CamelFolder *folder); static void camel_folder_close(CamelFolder *folder, gboolean expunge); static void camel_folder_set_name(CamelFolder *folder, GString *name_string); static GString *camel_folder_get_name(CamelFolder *folder); +static gboolean camel_folder_can_hold_folders(CamelFolder *folder); +static gboolean camel_folder_can_hold_messages(CamelFolder *folder); +static gboolean camel_folder_exists(CamelFolder *folder); +static gboolean camel_folder_is_open(CamelFolder *folder); +static CamelFolder *camel_folder_get_folder(CamelFolder *folder, GString *folderName); static void camel_folder_class_init (CamelFolderClass *camel_folder_class) @@ -41,7 +46,11 @@ camel_folder_class_init (CamelFolderClass *camel_folder_class) camel_folder_class->close = camel_folder_close; camel_folder_class->set_name = camel_folder_set_name; camel_folder_class->get_name = camel_folder_get_name; - + camel_folder_class->can_hold_folders = camel_folder_can_hold_folders; + camel_folder_class->can_hold_messages = camel_folder_can_hold_messages; + camel_folder_class->exists = camel_folder_exists; + camel_folder_class->is_open = camel_folder_is_open; + camel_folder_class->get_folder = camel_folder_get_folder; /* virtual method overload */ } @@ -125,7 +134,7 @@ camel_folder_set_name(CamelFolder *folder, GString *name_string) /** - * getName : get the (short) name of the folder + * camel_folder_get_name : get the (short) name of the folder * * get the name of the folder. The fully qualified name * can be obtained with the get_full_ame method (not implemented) @@ -138,3 +147,74 @@ camel_folder_get_name(CamelFolder *folder) { return folder->name; } + + +/** + * camel_folder_can_hold_folders : tests if the folder can contain other folders + * + **/ +static gboolean +camel_folder_can_hold_folders(CamelFolder *folder) +{ + return folder->can_hold_folders; +} + + + +/** + * camel_folder_can_hold_messages : tests if the folder can contain messages + * + **/ +static gboolean +camel_folder_can_hold_messages(CamelFolder *folder) +{ + return folder->can_hold_messages; +} + + + +/** + * camel_folder_exists : tests if the folder object exists on the store. + * + **/ +static gboolean +camel_folder_exists(CamelFolder *folder) +{ + return folder->exists_on_store; +} + + + +/** + * camel_folder_is_open : test if the folder is open + * + **/ +static gboolean +camel_folder_is_open(CamelFolder *folder) +{ + return (folder->open_state==FOLDER_OPEN); +} + + + + +/** + * camel_folder_get_folder: return the (sub)folder object that + * is specified. + * + * This method returns a folder objects. This folder + * is necessarily a subfolder of the current folder. + * It is an error to ask a folder begining with the + * folder separator character. + * + * @folderName: subfolder path. NULL if the subfolder object + * could not be created + **/ +static CamelFolder * +camel_folder_get_folder(CamelFolder *folder, GString *folderName) +{ + g_warning("getFolder called on the abstract CamelFolder class\n"); + return NULL; +} + + diff --git a/camel/camel-folder.h b/camel/camel-folder.h index b46d6907ff..e08b0ab618 100644 --- a/camel/camel-folder.h +++ b/camel/camel-folder.h @@ -81,6 +81,12 @@ typedef struct { void (*close) (CamelFolder *folder, gboolean expunge); void (*set_name) (CamelFolder *folder, GString *name_string); GString * (*get_name) (CamelFolder *folder); + gboolean (*can_hold_folders) (CamelFolder *folder); + gboolean (*can_hold_messages) (CamelFolder *folder); + gboolean (*exists) (CamelFolder *folder); + gboolean (*is_open) (CamelFolder *folder); + CamelFolder * (*get_folder) (CamelFolder *folder, GString *folderName); + } CamelFolderClass; diff --git a/camel/camel-log.c b/camel/camel-log.c new file mode 100644 index 0000000000..fba71e9414 --- /dev/null +++ b/camel/camel-log.c @@ -0,0 +1,39 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ + +/* + * + * 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 "camel-log.h" + +int camel_debug_level = 10; +FILE *camel_log_file_descriptor = stderr; + +void +camel_log(CamelLogLevel level, const gchar *format, ... ) +{ + va_list args; + if (level<=camel_debug_level) + { + va_start(args, format); + vfprintf(camel_log_file_descriptor, format, args); + va_end (args); + } +} diff --git a/camel/camel-log.h b/camel/camel-log.h new file mode 100644 index 0000000000..fd96461258 --- /dev/null +++ b/camel/camel-log.h @@ -0,0 +1,43 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ + +/* + * + * 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 + */ + +#ifndef CAMEL_LOG_H +#define CAMEL_LOG_H + + +#include <stdarg.h> +#include <glib.h> +#include <stdio.h> + +extern int camel_debug_level; +extern FILE *camel_log_file_descriptor; + +typedef enum { + NO_LOG = 0, + FULL_DEBUG = 10 +} CamelLogLevel; + +#define CAMEL_LOG(level, args...) camel_log(level,##args) + +extern void camel_log(CamelLogLevel level, const gchar *format, ... ); + +#endif /* CAMEL_LOG_H */ 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'; +} + diff --git a/camel/gstring-util.h b/camel/gstring-util.h new file mode 100644 index 0000000000..6f6adde14f --- /dev/null +++ b/camel/gstring-util.h @@ -0,0 +1,53 @@ +/* -*- 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 + */ + + + +#ifndef GSTRING_UTIL_H +#define GSTRING_UTIL_H 1 + + +#ifdef __cplusplus +extern "C" { +#pragma } +#endif /* __cplusplus }*/ + +#include <glib.h> + +typedef enum { + NONE = 0, + STRIP_TRAILING = 1, + STRIP_LEADING = 2 + +} DichotomyOption; + + +gboolean g_string_equals(GString *string1, GString *string2); +GString *g_string_clone(GString *string); + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* GSTRING_UTIL_H */ |