add exception handling everywhere in the store related functions

2000-01-21  bertrand  <bertrand@helixcode.com>

	* camel/camel-store.c: add exception handling everywhere in
	the store related functions arguments.
	* camel/providers/mbox/camel-mbox-folder.c: idem
	* camel/providers/mbox/camel-mbox-folder.h: idem
	* camel/providers/mbox/camel-mbox-store.h: idem

	* camel/providers/mbox/Makefile.am (libcamelmbox_la_SOURCES):
	added camel-mbox-provider.c to the mbox provider
	sources.

svn path=/trunk/; revision=1605
This commit is contained in:
bertrand
2000-01-22 01:35:11 +00:00
committed by Bertrand Guiheneuf
parent 8fbfb0ae48
commit e8a2fed920
12 changed files with 115 additions and 64 deletions
+6
View File
@@ -1,5 +1,11 @@
2000-01-21 bertrand <bertrand@helixcode.com>
* camel/camel-store.c: add exception handling everywhere in
the store related functions arguments.
* camel/providers/mbox/camel-mbox-folder.c: idem
* camel/providers/mbox/camel-mbox-folder.h: idem
* camel/providers/mbox/camel-mbox-store.h: idem
* camel/providers/mbox/Makefile.am (libcamelmbox_la_SOURCES):
added camel-mbox-provider.c to the mbox provider
sources.
+1 -1
View File
@@ -138,7 +138,7 @@ camel_folder_pt_proxy_class_init (CamelFolderPtProxyClass *camel_folder_pt_proxy
camel_folder_class->get_message_count = _get_message_count;
camel_folder_class->append_message = _append_message;
camel_folder_class->list_permanent_flags = _list_permanent_flags;
camel_folder_class->copy_message_to;
camel_folder_class->copy_message_to = _copy_message_to;
camel_folder_class->get_message_uid = _get_message_uid;
camel_folder_class->get_message_by_uid = _get_message_by_uid;
camel_folder_class->get_uid_list = _get_uid_list;
+10 -10
View File
@@ -156,7 +156,7 @@ camel_folder_class_init (CamelFolderClass *camel_folder_class)
camel_folder_class->get_message_count = _get_message_count;
camel_folder_class->append_message = _append_message;
camel_folder_class->list_permanent_flags = _list_permanent_flags;
camel_folder_class->copy_message_to;
camel_folder_class->copy_message_to = _copy_message_to;
camel_folder_class->get_message_uid = _get_message_uid;
camel_folder_class->get_message_by_uid = _get_message_by_uid;
camel_folder_class->get_uid_list = _get_uid_list;
@@ -496,7 +496,7 @@ _set_name (CamelFolder *folder,
return;
}
separator = camel_store_get_separator (folder->parent_store);
separator = camel_store_get_separator (folder->parent_store, ex);
camel_exception_clear (ex);
if (folder->parent_folder) {
parent_full_name = camel_folder_get_full_name (folder->parent_folder, ex);
@@ -776,7 +776,7 @@ _get_subfolder (CamelFolder *folder,
camel_exception_set (ex,
CAMEL_EXCEPTION_FOLDER_NULL,
"folder object is NULL");
return;
return NULL;
}
@@ -784,24 +784,24 @@ _get_subfolder (CamelFolder *folder,
camel_exception_set (ex,
CAMEL_EXCEPTION_INVALID_PARAM,
"folder_name parameter is NULL");
return;
return NULL;
}
if (!folder->parent_store) {
camel_exception_set (ex,
CAMEL_EXCEPTION_FOLDER_INVALID,
"folder has no parent store");
return;
return NULL;
}
current_folder_full_name = camel_folder_get_full_name (folder, ex);
if (camel_exception_get_id (ex)) return NULL;
separator = camel_store_get_separator (folder->parent_store);
separator = camel_store_get_separator (folder->parent_store, ex);
full_name = g_strdup_printf ("%s%d%s", current_folder_full_name, separator, folder_name);
new_folder = camel_store_get_folder (folder->parent_store, full_name);
new_folder = camel_store_get_folder (folder->parent_store, full_name, ex);
return new_folder;
}
@@ -889,7 +889,7 @@ _create (CamelFolder *folder, CamelException *ex)
return TRUE;
sep = camel_store_get_separator (folder->parent_store);
sep = camel_store_get_separator (folder->parent_store, ex);
if (folder->parent_folder) {
camel_folder_create (folder->parent_folder, ex);
if (camel_exception_get_id (ex)) return FALSE;
@@ -903,7 +903,7 @@ _create (CamelFolder *folder, CamelException *ex)
g_warning("have to handle the case where the path is not OK\n");
return FALSE;
} else {
parent = camel_store_get_folder (folder->parent_store, prefix);
parent = camel_store_get_folder (folder->parent_store, prefix, ex);
camel_folder_create (parent, ex);
if (camel_exception_get_id (ex)) return FALSE;
}
@@ -1297,7 +1297,7 @@ camel_folder_expunge (CamelFolder *folder, CamelException *ex)
return NULL;
}
CF_CLASS (folder)->expunge (folder, ex);
return CF_CLASS (folder)->expunge (folder, ex);
}
+3 -10
View File
@@ -220,17 +220,10 @@ void camel_folder_open (CamelFolder *folder,
CamelFolderOpenMode mode,
CamelException *ex);
void camel_folder_open_async (CamelFolder *folder,
CamelFolderOpenMode mode,
CamelFolderAsyncCallback callback,
gpointer user_data,
CamelException *ex);
void camel_folder_close_async (CamelFolder *folder,
gboolean expunge,
CamelFolderAsyncCallback callback,
gpointer user_data,
CamelException *ex);
void camel_folder_close (CamelFolder *folder,
gboolean expunge,
CamelException *ex);
gboolean camel_folder_create (CamelFolder *folder, CamelException *ex);
CamelFolder *camel_folder_get_parent_folder (CamelFolder *folder, CamelException *ex);
+2 -2
View File
@@ -139,7 +139,7 @@ camel_session_get_store_from_provider (CamelSession *session, CamelProvider *pro
store = CAMEL_STORE (gtk_object_new (provider->object_type, NULL));
#warning set the url to a useful value.
camel_store_init(store, session, NULL);
camel_store_init(store, session, NULL, NULL);
return store;
}
@@ -208,7 +208,7 @@ camel_session_get_store (CamelSession *session, const gchar *url_string)
if (url->protocol) {
new_store = camel_session_get_store_for_protocol (session, url->protocol);
if (new_store)
camel_store_init (new_store, session, url_string);
camel_store_init (new_store, session, url_string, NULL);
}
g_url_free (url);
+18 -18
View File
@@ -32,12 +32,12 @@ static CamelServiceClass *parent_class = NULL;
/* Returns the class for a CamelStore */
#define CS_CLASS(so) CAMEL_STORE_CLASS (GTK_OBJECT(so)->klass)
static void _set_separator(CamelStore *store, gchar sep);
static CamelFolder *_get_root_folder(CamelStore *store);
static CamelFolder *_get_default_folder(CamelStore *store);
static void _init(CamelStore *store, CamelSession *session, const gchar *url_name);
static CamelFolder *_get_folder (CamelStore *store, const gchar *folder_name);
static gchar _get_separator (CamelStore *store);
static void _set_separator(CamelStore *store, gchar sep, CamelException *ex);
static CamelFolder *_get_root_folder(CamelStore *store, CamelException *ex);
static CamelFolder *_get_default_folder(CamelStore *store, CamelException *ex);
static void _init(CamelStore *store, CamelSession *session, const gchar *url_name, CamelException *ex);
static CamelFolder *_get_folder (CamelStore *store, const gchar *folder_name, CamelException *ex);
static gchar _get_separator (CamelStore *store, CamelException *ex);
static void _finalize (GtkObject *object);
@@ -105,10 +105,10 @@ camel_store_get_type (void)
*
**/
void
camel_store_init (CamelStore *store, CamelSession *session, const gchar *url_name)
camel_store_init (CamelStore *store, CamelSession *session, const gchar *url_name, CamelException *ex)
{
g_assert(store);
CS_CLASS(store)->init (store, session, url_name);
CS_CLASS(store)->init (store, session, url_name, ex);
}
@@ -124,7 +124,7 @@ camel_store_init (CamelStore *store, CamelSession *session, const gchar *url_nam
*
**/
static void
_init (CamelStore *store, CamelSession *session, const gchar *url_name)
_init (CamelStore *store, CamelSession *session, const gchar *url_name, CamelException *ex)
{
#warning re-enable assertion here.
@@ -160,7 +160,7 @@ _finalize (GtkObject *object)
*
**/
static void
_set_separator (CamelStore *store, gchar sep)
_set_separator (CamelStore *store, gchar sep, CamelException *ex)
{
store->separator = sep;
}
@@ -170,7 +170,7 @@ _set_separator (CamelStore *store, gchar sep)
static gchar
_get_separator (CamelStore *store)
_get_separator (CamelStore *store, CamelException *ex)
{
g_assert(store);
return store->separator;
@@ -187,9 +187,9 @@ _get_separator (CamelStore *store)
* Return value: the separator
**/
gchar
camel_store_get_separator (CamelStore *store)
camel_store_get_separator (CamelStore *store, CamelException *ex)
{
return CS_CLASS(store)->get_separator (store);
return CS_CLASS(store)->get_separator (store, ex);
}
@@ -199,7 +199,7 @@ camel_store_get_separator (CamelStore *store)
static CamelFolder *
_get_folder (CamelStore *store, const gchar *folder_name)
_get_folder (CamelStore *store, const gchar *folder_name, CamelException *ex)
{
return NULL;
}
@@ -223,9 +223,9 @@ _get_folder (CamelStore *store, const gchar *folder_name)
* Return value: the folder
**/
CamelFolder *
camel_store_get_folder (CamelStore *store, const gchar *folder_name)
camel_store_get_folder (CamelStore *store, const gchar *folder_name, CamelException *ex)
{
return CS_CLASS(store)->get_folder (store, folder_name);
return CS_CLASS(store)->get_folder (store, folder_name, ex);
}
@@ -239,7 +239,7 @@ camel_store_get_folder (CamelStore *store, const gchar *folder_name)
* @Return value: the tolevel folder.
**/
static CamelFolder *
_get_root_folder (CamelStore *store)
_get_root_folder (CamelStore *store, CamelException *ex)
{
return NULL;
}
@@ -254,7 +254,7 @@ _get_root_folder (CamelStore *store)
* @Return value: the default folder.
**/
static CamelFolder *
_get_default_folder (CamelStore *store)
_get_default_folder (CamelStore *store, CamelException *ex)
{
return NULL;
}
+10 -9
View File
@@ -41,6 +41,7 @@ typedef struct _CamelStore CamelStore;
#include "camel-folder.h"
#include "camel-service.h"
#include "camel-session.h"
#include "camel-exception.h"
#define CAMEL_STORE_TYPE (camel_store_get_type ())
#define CAMEL_STORE(obj) (GTK_CHECK_CAST((obj), CAMEL_STORE_TYPE, CamelStore))
@@ -62,12 +63,12 @@ struct _CamelStore
typedef struct {
CamelServiceClass parent_class;
void (*init) (CamelStore *store, CamelSession *session, const gchar *url_name);
void (*set_separator) (CamelStore *store, gchar sep);
gchar (*get_separator) (CamelStore *store);
CamelFolder * (*get_folder) (CamelStore *store, const gchar *folder_name);
CamelFolder * (*get_root_folder) (CamelStore *store);
CamelFolder * (*get_default_folder) (CamelStore *store);
void (*init) (CamelStore *store, CamelSession *session, const gchar *url_name, CamelException *ex);
void (*set_separator) (CamelStore *store, gchar sep, CamelException *ex);
gchar (*get_separator) (CamelStore *store, CamelException *ex);
CamelFolder * (*get_folder) (CamelStore *store, const gchar *folder_name, CamelException *ex);
CamelFolder * (*get_root_folder) (CamelStore *store, CamelException *ex);
CamelFolder * (*get_default_folder) (CamelStore *store, CamelException *ex);
} CamelStoreClass;
@@ -77,9 +78,9 @@ typedef struct {
/* Standard Gtk function */
GtkType camel_store_get_type (void);
void camel_store_init (CamelStore *store, CamelSession *session, const gchar *url_name);
CamelFolder *camel_store_get_folder (CamelStore *store, const gchar *folder_name);
gchar camel_store_get_separator (CamelStore *store);
void camel_store_init (CamelStore *store, CamelSession *session, const gchar *url_name, CamelException *ex);
CamelFolder *camel_store_get_folder (CamelStore *store, const gchar *folder_name, CamelException *ex);
gchar camel_store_get_separator (CamelStore *store, CamelException *ex);
#ifdef __cplusplus
}
+2 -2
View File
@@ -346,8 +346,8 @@ _set_name (CamelFolder *folder, const gchar *name, CamelException *ex)
g_free (mbox_folder->folder_file_path);
g_free (mbox_folder->folder_dir_path);
separator = camel_store_get_separator (folder->parent_store);
root_dir_path = camel_mbox_store_get_toplevel_dir (CAMEL_MBOX_STORE(folder->parent_store));
separator = camel_store_get_separator (folder->parent_store, ex);
root_dir_path = camel_mbox_store_get_toplevel_dir (CAMEL_MBOX_STORE(folder->parent_store), ex);
CAMEL_LOG_FULL_DEBUG ("CamelMboxFolder::set_name full_name is %s\n", folder->full_name);
CAMEL_LOG_FULL_DEBUG ("CamelMboxFolder::set_name root_dir_path is %s\n", root_dir_path);
+9 -9
View File
@@ -32,8 +32,8 @@ static CamelStoreClass *parent_class=NULL;
#define CF_CLASS(so) CAMEL_FOLDER_CLASS (GTK_OBJECT(so)->klass)
#define CMBOXF_CLASS(so) CAMEL_MBOX_FOLDER_CLASS (GTK_OBJECT(so)->klass)
static void _init (CamelStore *store, CamelSession *session, const gchar *url_name);
static CamelFolder *_get_folder (CamelStore *store, const gchar *folder_name);
static void _init (CamelStore *store, CamelSession *session, const gchar *url_name, CamelException *ex);
static CamelFolder *_get_folder (CamelStore *store, const gchar *folder_name, CamelException *ex);
static void
@@ -92,7 +92,7 @@ camel_mbox_store_get_type (void)
/* These evil public functions are here for test only */
void
camel_mbox_store_set_toplevel_dir (CamelMboxStore *store, const gchar *toplevel)
camel_mbox_store_set_toplevel_dir (CamelMboxStore *store, const gchar *toplevel, CamelException *ex)
{
store->toplevel_dir = g_strdup (toplevel);
CAMEL_STORE(store)->separator = '/';
@@ -100,7 +100,7 @@ camel_mbox_store_set_toplevel_dir (CamelMboxStore *store, const gchar *toplevel)
const gchar *
camel_mbox_store_get_toplevel_dir (CamelMboxStore *store)
camel_mbox_store_get_toplevel_dir (CamelMboxStore *store, CamelException *ex)
{
return store->toplevel_dir;
}
@@ -108,14 +108,14 @@ camel_mbox_store_get_toplevel_dir (CamelMboxStore *store)
static void
_init (CamelStore *store, CamelSession *session, const gchar *url_name)
_init (CamelStore *store, CamelSession *session, const gchar *url_name, CamelException *ex)
{
CamelMboxStore *mbox_store = CAMEL_MBOX_STORE (store);
Gurl *store_url;
g_assert (url_name);
/* call parent implementation */
parent_class->init (store, session, url_name);
parent_class->init (store, session, url_name, ex);
/* find the path in the URL*/
@@ -133,7 +133,7 @@ _init (CamelStore *store, CamelSession *session, const gchar *url_name)
static CamelFolder *
_get_folder (CamelStore *store, const gchar *folder_name)
_get_folder (CamelStore *store, const gchar *folder_name, CamelException *ex)
{
CamelMboxFolder *new_mbox_folder;
CamelFolder *new_folder;
@@ -145,8 +145,8 @@ _get_folder (CamelStore *store, const gchar *folder_name)
new_mbox_folder = gtk_type_new (CAMEL_MBOX_FOLDER_TYPE);
new_folder = CAMEL_FOLDER (new_mbox_folder);
CF_CLASS (new_folder)->init_with_store (new_folder, store, NULL);
CF_CLASS (new_folder)->set_name (new_folder, folder_name, NULL);
CF_CLASS (new_folder)->init_with_store (new_folder, store, ex);
CF_CLASS (new_folder)->set_name (new_folder, folder_name, ex);
return new_folder;
+2 -2
View File
@@ -60,8 +60,8 @@ typedef struct {
/* Standard Gtk function */
GtkType camel_mbox_store_get_type (void);
void camel_mbox_store_set_toplevel_dir (CamelMboxStore *store, const gchar *toplevel);
const gchar *camel_mbox_store_get_toplevel_dir (CamelMboxStore *store);
void camel_mbox_store_set_toplevel_dir (CamelMboxStore *store, const gchar *toplevel, CamelException *ex);
const gchar *camel_mbox_store_get_toplevel_dir (CamelMboxStore *store, CamelException *ex);
#ifdef __cplusplus
}
+2 -1
View File
@@ -31,4 +31,5 @@ noinst_PROGRAMS = \
test3 \
test7 \
test8 \
test9
test9 \
test10
+50
View File
@@ -0,0 +1,50 @@
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
#include "camel.h"
#include "camel-mbox-folder.h"
#include "camel-mbox-parser.h"
#include "camel-mbox-utils.h"
#include "camel-mbox-summary.h"
#include "camel-log.h"
#include "camel-exception.h"
#include "md5-utils.h"
#include <sys/types.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <glib.h>
int
main (int argc, char**argv)
{
CamelSession *session;
CamelException *ex;
CamelStore *store;
gchar *store_url = "mbox:///tmp/evmail";
CamelFolder *folder;
camel_debug_level = 10;
gtk_init (&argc, &argv);
camel_init ();
ex = camel_exception_new ();
camel_provider_register_as_module ("../camel/providers/mbox/.libs/libcamelmbox.so");
session = camel_session_new ();
store = camel_session_get_store (session, store_url);
folder = camel_store_get_folder (store, "Inbox");
camel_folder_open (folder, FOLDER_OPEN_RW, ex);
return 1;
}