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); \
perror(func); \
}
-#define debug_print(format, ...) debug_print_real(__FILE__, __LINE__, format , ##__VA_ARGS__)
+#define debug_print \
+ debug_print_real(__FILE__ ":%d:", __LINE__), \
+ debug_print_real
/* for macro expansion */
#define Str(x) #x
/* alternative string functions */
gint strcmp2 (const gchar *s1,
const gchar *s2);
-gint strstr2 (const gchar *s1,
+gchar *strstr2 (const gchar *s1,
const gchar *s2);
gint path_cmp (const gchar *s1,
const gchar *s2);
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);
void set_log_file (const gchar *filename);
void close_log_file (void);
void log_verbosity_set (gboolean verbose);
-void debug_print_real (const gchar *file, const guint line, const gchar *format, ...) G_GNUC_PRINTF(3, 4);
+void debug_print_real (const gchar *format, ...) G_GNUC_PRINTF(1, 2);
void log_print (const gchar *format, ...) G_GNUC_PRINTF(1, 2);
void log_message (const gchar *format, ...) G_GNUC_PRINTF(1, 2);
void log_warning (const gchar *format, ...) G_GNUC_PRINTF(1, 2);
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_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__ */