
2002-05-07 Not Zed <NotZed@Ximian.com> * camel-remote-store.c (remote_send_string): Check for LOGIN xxxx as well if debug is on, so we dont print passwords to evolution logs. * providers/imap/camel-imap-utils.c (imap_is_atom_char): This was really broken. 1. isprint() is locale dependent, and 2. it looked up an 8 bit value in a 7 bit table without truncating it. I've removed the isprint() stuff and just put it directly into the special table, which i've expanded to the right size too. * providers/imap/*: Applied patch from Preston Elder <prez@magick.tm> to make camel only use literals if it needs to for simple strings. Changed slightly to use imap_is_atom() and more consistent formatting. providers/imap/camel-imap-utils.c (imap_is_atom): Chagned from imap_needs_quoting(). ** Merged in camel-object2 branch. Simpler camelobject implementation + object args interface. * camel.c (camel_init): Call camel_object_get_type() to make sure camel_object_type is initialised. * camel-object.h (CAMEL_OBJECT_TYPE): Changed to return global camel_object_type pointer, not call camel_object_get_type. svn path=/trunk/; revision=16701
153 lines
4.5 KiB
C
153 lines
4.5 KiB
C
/*
|
|
* Copyright (C) 2001 Ximian Inc.
|
|
*
|
|
* Authors: Michael Zucchi <notzed@ximian.com>
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of version 2 of the GNU General Public
|
|
* License as published by the Free Software Foundation.
|
|
*
|
|
* 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_PARTITION_TABLE_H
|
|
#define _CAMEL_PARTITION_TABLE_H
|
|
|
|
#include <camel/camel-object.h>
|
|
#include <glib.h>
|
|
#include <e-util/e-msgport.h>
|
|
|
|
#include "camel-block-file.h"
|
|
|
|
/* ********************************************************************** */
|
|
|
|
/* CamelPartitionTable - index of key to keyid */
|
|
|
|
typedef guint32 camel_hash_t; /* a hashed key */
|
|
|
|
typedef struct _CamelPartitionKey CamelPartitionKey;
|
|
typedef struct _CamelPartitionKeyBlock CamelPartitionKeyBlock;
|
|
typedef struct _CamelPartitionMap CamelPartitionMap;
|
|
typedef struct _CamelPartitionMapBlock CamelPartitionMapBlock;
|
|
|
|
typedef struct _CamelPartitionTable CamelPartitionTable;
|
|
typedef struct _CamelPartitionTableClass CamelPartitionTableClass;
|
|
|
|
struct _CamelPartitionKey {
|
|
camel_hash_t hashid;
|
|
camel_key_t keyid;
|
|
};
|
|
|
|
struct _CamelPartitionKeyBlock {
|
|
guint32 used;
|
|
struct _CamelPartitionKey keys[(CAMEL_BLOCK_SIZE-4)/sizeof(struct _CamelPartitionKey)];
|
|
};
|
|
|
|
struct _CamelPartitionMap {
|
|
camel_hash_t hashid;
|
|
camel_block_t blockid;
|
|
};
|
|
|
|
struct _CamelPartitionMapBlock {
|
|
camel_block_t next;
|
|
guint32 used;
|
|
struct _CamelPartitionMap partition[(CAMEL_BLOCK_SIZE-8)/sizeof(struct _CamelPartitionMap)];
|
|
};
|
|
|
|
struct _CamelPartitionTable {
|
|
CamelObject parent;
|
|
|
|
struct _CamelPartitionTablePrivate *priv;
|
|
|
|
CamelBlockFile *blocks;
|
|
camel_block_t rootid;
|
|
|
|
int (*is_key)(CamelPartitionTable *cpi, const char *key, camel_key_t keyid, void *data);
|
|
void *is_key_data;
|
|
|
|
/* we keep a list of partition blocks active at all times */
|
|
EDList partition;
|
|
};
|
|
|
|
struct _CamelPartitionTableClass {
|
|
CamelObjectClass parent;
|
|
};
|
|
|
|
CamelType camel_partition_table_get_type(void);
|
|
|
|
CamelPartitionTable *camel_partition_table_new(struct _CamelBlockFile *bs, camel_block_t root);
|
|
int camel_partition_table_sync(CamelPartitionTable *cpi);
|
|
int camel_partition_table_add(CamelPartitionTable *cpi, const char *key, camel_key_t keyid);
|
|
camel_key_t camel_partition_table_lookup(CamelPartitionTable *cpi, const char *key);
|
|
void camel_partition_table_remove(CamelPartitionTable *cpi, const char *key);
|
|
|
|
/* ********************************************************************** */
|
|
|
|
/* CamelKeyTable - index of keyid to key and flag and data mapping */
|
|
|
|
typedef struct _CamelKeyBlock CamelKeyBlock;
|
|
typedef struct _CamelKeyRootBlock CamelKeyRootBlock;
|
|
|
|
typedef struct _CamelKeyTable CamelKeyTable;
|
|
typedef struct _CamelKeyTableClass CamelKeyTableClass;
|
|
|
|
struct _CamelKeyRootBlock {
|
|
camel_block_t first;
|
|
camel_block_t last;
|
|
camel_key_t free; /* free list */
|
|
};
|
|
|
|
struct _CamelKeyKey {
|
|
camel_block_t data;
|
|
unsigned int offset:10;
|
|
unsigned int flags:22;
|
|
};
|
|
|
|
struct _CamelKeyBlock {
|
|
camel_block_t next;
|
|
guint32 used;
|
|
union {
|
|
struct _CamelKeyKey keys[(CAMEL_BLOCK_SIZE-8)/sizeof(struct _CamelKeyKey)];
|
|
char keydata[CAMEL_BLOCK_SIZE-8];
|
|
} u;
|
|
};
|
|
|
|
#define CAMEL_KEY_TABLE_MAX_KEY (128) /* max size of any key */
|
|
|
|
struct _CamelKeyTable {
|
|
CamelObject parent;
|
|
|
|
struct _CamelKeyTablePrivate *priv;
|
|
|
|
CamelBlockFile *blocks;
|
|
|
|
camel_block_t rootid;
|
|
|
|
CamelKeyRootBlock *root;
|
|
CamelBlock *root_block;
|
|
};
|
|
|
|
struct _CamelKeyTableClass {
|
|
CamelObjectClass parent;
|
|
};
|
|
|
|
CamelType camel_key_table_get_type(void);
|
|
|
|
CamelKeyTable * camel_key_table_new(CamelBlockFile *bs, camel_block_t root);
|
|
int camel_key_table_sync(CamelKeyTable *ki);
|
|
camel_key_t camel_key_table_add(CamelKeyTable *ki, const char *key, camel_block_t data, unsigned int flags);
|
|
void camel_key_table_set_data(CamelKeyTable *ki, camel_key_t keyid, camel_block_t data);
|
|
void camel_key_table_set_flags(CamelKeyTable *ki, camel_key_t keyid, unsigned int flags, unsigned int set);
|
|
camel_block_t camel_key_table_lookup(CamelKeyTable *ki, camel_key_t keyid, char **key, unsigned int *flags);
|
|
camel_key_t camel_key_table_next(CamelKeyTable *ki, camel_key_t next, char **keyp, unsigned int *flagsp, camel_block_t *datap);
|
|
|
|
#endif /* ! _CAMEL_PARTITION_TABLE_H */
|