diff options
Diffstat (limited to 'storage.c')
| -rw-r--r-- | storage.c | 112 | 
1 files changed, 61 insertions, 51 deletions
@@ -1,4 +1,4 @@ -  /********************************************************************\ +/********************************************************************\    * BitlBee -- An IRC to other IM-networks gateway                     *    *                                                                    *    * Copyright 2002-2004 Wilmer van der Gaast and others                * @@ -45,15 +45,18 @@ static storage_t *storage_init_single(const char *name)  	for (gl = storage_backends; gl; gl = gl->next) {  		st = gl->data; -		if (strcmp(st->name, name) == 0) +		if (strcmp(st->name, name) == 0) {  			break; +		}  	} -	if (gl == NULL)  +	if (gl == NULL) {  		return NULL; +	} -	if (st->init) +	if (st->init) {  		st->init(); +	}  	return st;  } @@ -63,29 +66,31 @@ GList *storage_init(const char *primary, char **migrate)  	GList *ret = NULL;  	int i;  	storage_t *storage; -	 +  	register_storage_backend(&storage_xml); -	 +  	storage = storage_init_single(primary); -	if (storage == NULL && storage->save == NULL) +	if (storage == NULL && storage->save == NULL) {  		return NULL; +	}  	ret = g_list_append(ret, storage);  	for (i = 0; migrate && migrate[i]; i++) {  		storage = storage_init_single(migrate[i]); -	 -		if (storage) + +		if (storage) {  			ret = g_list_append(ret, storage); +		}  	}  	return ret;  } -storage_status_t storage_check_pass (const char *nick, const char *password) +storage_status_t storage_check_pass(const char *nick, const char *password)  {  	GList *gl; -	 +  	/* Loop until we don't get NO_SUCH_USER */  	for (gl = global.storage; gl; gl = gl->next) { @@ -93,85 +98,88 @@ storage_status_t storage_check_pass (const char *nick, const char *password)  		storage_status_t status;  		status = st->check_pass(nick, password); -		if (status != STORAGE_NO_SUCH_USER) +		if (status != STORAGE_NO_SUCH_USER) {  			return status; +		}  	} -	 +  	return STORAGE_NO_SUCH_USER;  } -storage_status_t storage_load (irc_t * irc, const char *password) +storage_status_t storage_load(irc_t * irc, const char *password)  {  	GList *gl; -	 -	if (irc && irc->status & USTATUS_IDENTIFIED) + +	if (irc && irc->status & USTATUS_IDENTIFIED) {  		return STORAGE_OTHER_ERROR; -	 +	} +  	/* Loop until we don't get NO_SUCH_USER */  	for (gl = global.storage; gl; gl = gl->next) {  		storage_t *st = gl->data;  		storage_status_t status;  		status = st->load(irc, password); -		if (status == STORAGE_OK) -		{ +		if (status == STORAGE_OK) {  			GSList *l; -			for( l = irc_plugins; l; l = l->next ) -			{ +			for (l = irc_plugins; l; l = l->next) {  				irc_plugin_t *p = l->data; -				if( p->storage_load ) -					p->storage_load( irc ); +				if (p->storage_load) { +					p->storage_load(irc); +				}  			}  			return status;  		} -		 -		if (status != STORAGE_NO_SUCH_USER)  + +		if (status != STORAGE_NO_SUCH_USER) {  			return status; +		}  	} -	 +  	return STORAGE_NO_SUCH_USER;  } -storage_status_t storage_save (irc_t *irc, char *password, int overwrite) +storage_status_t storage_save(irc_t *irc, char *password, int overwrite)  {  	storage_status_t st;  	GSList *l; -	 +  	if (password != NULL) {  		/* Should only use this in the "register" command. */ -		if (irc->password || overwrite) +		if (irc->password || overwrite) {  			return STORAGE_OTHER_ERROR; -		 +		} +  		irc_setpass(irc, password);  	} else if ((irc->status & USTATUS_IDENTIFIED) == 0) {  		return STORAGE_NO_SUCH_USER;  	} -	 -	st = ((storage_t *)global.storage->data)->save(irc, overwrite); -	 -	for( l = irc_plugins; l; l = l->next ) -	{ + +	st = ((storage_t *) global.storage->data)->save(irc, overwrite); + +	for (l = irc_plugins; l; l = l->next) {  		irc_plugin_t *p = l->data; -		if( p->storage_save ) -			p->storage_save( irc ); +		if (p->storage_save) { +			p->storage_save(irc); +		}  	} -	 +  	if (password != NULL) {  		irc_setpass(irc, NULL);  	} -	 +  	return st;  } -storage_status_t storage_remove (const char *nick, const char *password) +storage_status_t storage_remove(const char *nick, const char *password)  {  	GList *gl;  	storage_status_t ret = STORAGE_OK;  	gboolean ok = FALSE;  	GSList *l; -	 -	/* Remove this account from all storage backends. If this isn't  -	 * done, the account will still be usable, it'd just be  + +	/* Remove this account from all storage backends. If this isn't +	 * done, the account will still be usable, it'd just be  	 * loaded from a different backend. */  	for (gl = global.storage; gl; gl = gl->next) {  		storage_t *st = gl->data; @@ -179,18 +187,20 @@ storage_status_t storage_remove (const char *nick, const char *password)  		status = st->remove(nick, password);  		ok |= status == STORAGE_OK; -		if (status != STORAGE_NO_SUCH_USER && status != STORAGE_OK) +		if (status != STORAGE_NO_SUCH_USER && status != STORAGE_OK) {  			ret = status; +		}  	} -	 +  	/* If at least one succeeded, remove plugin data. */ -	if( ok ) -		for( l = irc_plugins; l; l = l->next ) -		{ +	if (ok) { +		for (l = irc_plugins; l; l = l->next) {  			irc_plugin_t *p = l->data; -			if( p->storage_remove ) -				p->storage_remove( nick ); +			if (p->storage_remove) { +				p->storage_remove(nick); +			}  		} -	 +	} +  	return ret;  }  | 
