view libpurple/core.h @ 18088:c138916a49b3

I think it's reasonable to search through a haystack that is the empty string. This gets rid of the following assertion failure for me: #0 0x00002b7f5ebdccab in raise () from /lib/libc.so.6 #1 0x00002b7f5ebde660 in abort () from /lib/libc.so.6 #2 0x00002b7f5e046b1b in g_logv () from /usr/lib/libglib-2.0.so.0 #3 0x00002b7f5e046bb3 in g_log () from /usr/lib/libglib-2.0.so.0 #4 0x00002b7f5e326746 in purple_markup_find_tag (needle=0x2b7f5e33fb89 "img", haystack=0x11fcf6c "", start=0x7fff51043070, end=0x7fff51043068, attributes=0x7fff51043060) at util.c:1016 #5 0x00002b7f5e2fa9f4 in convert_image_tags (log=0x931a80, msg=0x11fcf60 "<IMG ID=\"1\">") at log.c:709 #6 0x00002b7f5e2fba15 in html_logger_write (log=0x931a80, type=4097, from=0x778e00 "lk80z", time=1181547027, message=0x11fcf60 "<IMG ID=\"1\">") at log.c:1339 #7 0x00002b7f5e2f8fee in purple_log_write (log=0x931a80, type=4097, from=0x778e00 "lk80z", time=1181547027, message=0x11fcf60 "<IMG ID=\"1\">") at log.c:155 #8 0x00002b7f5e2eca6c in purple_conversation_write (conv=0x1041500, who=0xf50ba0 "giantpucepanda", message=0x11ec670 "<IMG ID=\"1\">", flags=4097, mtime=1181547027) at conversation.c:883 #9 0x0000000000452ca5 in pidgin_conv_write_im (conv=0x1041500, who=0x0, message=0x11ec670 "<IMG ID=\"1\">", flags=4097, mtime=1181547027) at gtkconv.c:4827 #10 0x00002b7f5e2ed21e in purple_conv_im_write (im=0x111b170, who=0x0, message=0x11ec670 "<IMG ID=\"1\">", flags=4097, mtime=1181547027)
author Mark Doliner <mark@kingant.net>
date Mon, 11 Jun 2007 07:45:19 +0000
parents 41ae5efe745c
children 9db52d9b8436 2177a11e169d
line wrap: on
line source

/**
 * @defgroup core libpurple
 *
 * purple
 *
 * Purple is the legal property of its developers, whose names are too numerous
 * to list here.  Please refer to the COPYRIGHT file distributed with this
 * source distribution.
 *
 * 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 _PURPLE_CORE_H_
#define _PURPLE_CORE_H_

typedef struct PurpleCore PurpleCore;

typedef struct
{
	void (*ui_prefs_init)(void);
	void (*debug_ui_init)(void); /* Unfortunate necessity. */
	void (*ui_init)(void);
	void (*quit)(void);

	void (*_purple_reserved1)(void);
	void (*_purple_reserved2)(void);
	void (*_purple_reserved3)(void);
	void (*_purple_reserved4)(void);
} PurpleCoreUiOps;

#ifdef __cplusplus
extern "C" {
#endif

/**
 * Initializes the core of purple.
 *
 * This will setup preferences for all the core subsystems.
 *
 * @param ui The ID of the UI using the core. This should be a
 *           unique ID, registered with the purple team.
 *
 * @return @c TRUE if successful, or @c FALSE otherwise.
 */
gboolean purple_core_init(const char *ui);

/**
 * Quits the core of purple, which, depending on the UI, may quit the
 * application using the purple core.
 */
void purple_core_quit(void);

/**
 * Calls purple_core_quit().  This can be used as the function 
 * passed to purple_timeout_add() when you want to shutdown Purple 
 * in a specified amount of time.  When shutting down Purple 
 * from a plugin, you must use this with a timeout value of 0: 
 *   purple_timeout_add(0, purple_core_quitcb, NULL);
 * This is ensures that code from your plugin is not being 
 * executed when purple_core_quit() is called.  Otherwise you 
 * would get a core dump after purple_core_quit() executes and 
 * control returns to your plugin because purple_core_quit() frees 
 * all plugins.
 */
gboolean purple_core_quit_cb(gpointer unused);

/**
 * Returns the version of the core library.
 *
 * @return The version of the core library.
 */
const char *purple_core_get_version(void);

/**
 * Returns the ID of the UI that is using the core.
 *
 * @return The ID of the UI that is currently using the core.
 */
const char *purple_core_get_ui(void);

/**
 * Returns a handle to the purple core.
 *
 * This is used for such things as signals.
 */
PurpleCore *purple_get_core(void);

/**
 * Sets the UI ops for the core.
 *
 * @param ops A UI ops structure for the core.
 */
void purple_core_set_ui_ops(PurpleCoreUiOps *ops);

/**
 * Returns the UI ops for the core.
 *
 * @return The core's UI ops structure.
 */
PurpleCoreUiOps *purple_core_get_ui_ops(void);

/**
 * Migrates from .gaim to .purple.
 *
 * UIs MUST NOT call this if they have been told to use a custom
 * user directory.
 *
 * @return A boolean indicating success or migration failure. On failure,
 *         the application must display an error to the user and then exit.
 */
gboolean purple_core_migrate(void);

/**
 * Ensures that only one instance is running.
 *
 * @return A boolean such that @c TRUE indicates that this is the first instance,
 *         whereas @c FALSE indicates that there is another instance running.
 *
 * @since 2.1.0
 */
gboolean purple_core_ensure_single_instance(void);

#ifdef __cplusplus
}
#endif

#endif /* _PURPLE_CORE_H_ */

/*

                                                  /===-
                                                `//"\\   """"`---.___.-""
             ______-==|                         | |  \\           _-"`
       __--"""  ,-/-==\\                        | |   `\        ,'
    _-"       /'    |  \\            ___         / /      \      /
  .'        /       |   \\         /"   "\    /' /        \   /'
 /  ____  /         |    \`\.__/-""  D O   \_/'  /          \/'
/-'"    """""---__  |     "-/"   O G     R   /'        _--"`
                  \_|      /   R    __--_  t ),   __--""
                    '""--_/  T   _-"_>--<_\ h '-" \
                   {\__--_/}    / \\__>--<__\ e B  \
                   /'   (_/  _-"  | |__>--<__|   U  |
                  |   _/) )-"     | |__>--<__|  R   |
                  / /" ,_/       / /__>---<__/ N    |
                 o-o _//        /-"_>---<__-" I    /
                 (^("          /"_>---<__-  N   _-"
                ,/|           /__>--<__/  A  _-"
             ,//('(          |__>--<__|  T  /                  .----_
            ( ( '))          |__>--<__|    |                 /' _---_"\
         `-)) )) (           |__>--<__|  O |               /'  /     "\`\
        ,/,'//( (             \__>--<__\  R \            /'  //        ||
      ,( ( ((, ))              "-__>--<_"-_  "--____---"' _/'/        /'
    `"/  )` ) ,/|                 "-_">--<_/-__       __-" _/
  ._-"//( )/ )) `                    ""-'_/_/ /"""""""__--"
   ;'( ')/ ,)(                              """"""""""
  ' ') '( (/
    '   '  `

*/