ptr = __tmp; \
}
+#define Xstrconcat_a(ptr, str1, str2, iffail) \
+{ \
+ gchar *__tmp; \
+ \
+ if ((__tmp = alloca(strlen(str1) + strlen(str2) + 1)) == NULL) { \
+ g_warning("can't allocate memory\n"); \
+ iffail; \
+ } else { \
+ strcpy(__tmp, str1); \
+ strcat(__tmp, str2); \
+ } \
+ \
+ ptr = __tmp; \
+}
+
#define FILE_OP_ERROR(file, func) \
{ \
fprintf(stderr, "%s: ", file); \
gchar *strretchomp (gchar *str);
gchar *strtailchomp (gchar *str,
gchar tail_char);
+gchar *strcrchomp (gchar *str);
gchar *strcasestr (const gchar *haystack,
const gchar *needle);
gchar *strncpy2 (gchar *dest,
gint quote_chr,
gint c);
void extract_address (gchar *str);
+
GSList *address_list_append (GSList *addr_list,
const gchar *str);
GSList *references_list_append (GSList *msgid_list,
const gchar *str);
GSList *newsgroup_list_append (GSList *group_list,
const gchar *str);
+
+GList *add_history (GList *list,
+ const gchar *str);
+
void remove_return (gchar *str);
void remove_space (gchar *str);
void unfold_line (gchar *str);
gboolean is_header_line (const gchar *str);
gboolean is_ascii_str (const guchar *str);
gint get_quote_level (const gchar *str);
-GList *uri_list_extract_filenames (const gchar *uri_list);
gchar *strstr_with_skip_quote (const gchar *haystack,
const gchar *needle);
gchar **strsplit_with_quote (const gchar *str,
const gchar *delim,
gint max_tokens);
+GList *uri_list_extract_filenames (const gchar *uri_list);
+void decode_uri (gchar *decoded_uri,
+ const gchar *encoded_uri);
+
/* return static strings */
gchar *get_home_dir (void);
gchar *get_rc_dir (void);
gchar *get_imap_cache_dir (void);
gchar *get_mbox_cache_dir (void);
gchar *get_mime_tmp_dir (void);
+gchar *get_template_dir (void);
gchar *get_tmp_file (void);
gchar *get_domain_name (void);
gboolean async);
/* open URI with external browser */
-gint open_uri (const gchar *uri, const gchar *cmdline);
+gint open_uri(const gchar *uri, const gchar *cmdline);
/* time functions */
time_t remote_tzoffset_sec (const gchar *zone);
void log_error (const gchar *format, ...) G_GNUC_PRINTF(1, 2);
/* subject threading */
-void * subject_table_lookup(GHashTable *subject_table, gchar * subject)
+void * subject_table_lookup(GHashTable *subject_table, gchar * subject);
void subject_table_insert(GHashTable *subject_table, gchar * subject,
void * data);
void subject_table_remove(GHashTable *subject_table, gchar * subject);
+gboolean subject_is_reply(const gchar *subject);
+
#endif /* __UTILS_H__ */