ptr = __tmp; \
}
+#define Xstrcat_a(ptr, str1, str2, iffail) \
+{ \
+ gchar *__tmp; \
+ gint len1, len2; \
+ \
+ len1 = strlen(str1); \
+ len2 = strlen(str2); \
+ if ((__tmp = alloca(len1 + len2 + 1)) == NULL) { \
+ g_warning("can't allocate memory\n"); \
+ iffail; \
+ } else { \
+ memcpy(__tmp, str1, len1); \
+ memcpy(__tmp + len1, str2, len2 + 1); \
+ } \
+ \
+ ptr = __tmp; \
+}
+
#define FILE_OP_ERROR(file, func) \
{ \
fprintf(stderr, "%s: ", file); \
perror(func); \
}
+#define debug_print \
+ debug_print_real(__FILE__ ":%d:", __LINE__), \
+ debug_print_real
+
/* for macro expansion */
#define Str(x) #x
#define Xstr(x) Str(x)
void slist_free_strings (GSList *list);
void hash_free_strings (GHashTable *table);
+void hash_free_value_mem (GHashTable *table);
void ptr_array_free_strings (GPtrArray *array);
/* alternative string functions */
gint strcmp2 (const gchar *s1,
const gchar *s2);
+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);
gint change_dir (const gchar *dir);
gint make_dir_hier (const gchar *dir);
gint remove_all_files (const gchar *dir);
+gint remove_numbered_files (const gchar *dir,
+ guint first,
+ guint last);
gint remove_all_numbered_files (const gchar *dir);
gint remove_dir_recursive (const gchar *dir);
gint copy_file (const gchar *src,
/* process execution */
gint execute_async (gchar *const argv[]);
-gint execute_command_line (const gchar *cmdline);
+gint execute_sync (gchar *const argv[]);
+gint execute_command_line (const gchar *cmdline,
+ gboolean async);
/* open URI with external browser */
gint open_uri(const gchar *uri, const gchar *cmdline);
gint len);
/* logging */
-void debug_print(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);
+void set_log_file (const gchar *filename);
+void close_log_file (void);
+void log_verbosity_set (gboolean verbose);
+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__ */