bool tr_sys_file_write_fmt (tr_sys_file_t handle, const char * format, tr_error ** error, ...) { bool ret = false; char * buffer; va_list args; assert (handle != TR_BAD_SYS_FILE); assert (format != NULL); va_start (args, error); buffer = tr_strdup_vprintf (format, args); va_end (args); if (buffer != NULL) { ret = tr_sys_file_write (handle, buffer, strlen (buffer), NULL, error); tr_free (buffer); } else { tr_error_set_literal (error, 0, "Unable to format message."); } return ret; }
static int test_error_propagate (void) { tr_error * err = NULL; tr_error * err2 = NULL; tr_error_set_literal (&err, 1, "oops"); check (err != NULL); check_int_eq (1, err->code); check_streq ("oops", err->message); tr_error_propagate (&err2, &err); check (err2 != NULL); check_int_eq (1, err2->code); check_streq ("oops", err2->message); check (err == NULL); tr_error_propagate_prefixed (&err, &err2, "error: "); check (err != NULL); check_int_eq (1, err->code); check_streq ("error: oops", err->message); check (err2 == NULL); tr_error_propagate (NULL, &err); check (err == NULL); tr_error_free (err2); return 0; }
static int test_error_set (void) { tr_error * err = NULL; tr_error_prefix (&err, "error: "); check (err == NULL); tr_error_set (&err, 1, "error: %s (%d)", "oops", 2); check (err != NULL); check_int_eq (1, err->code); check_streq ("error: oops (2)", err->message); tr_error_clear (&err); check (err == NULL); tr_error_set_literal (&err, 2, "oops"); check (err != NULL); check_int_eq (2, err->code); check_streq ("oops", err->message); tr_error_prefix (&err, "error: "); check (err != NULL); check_int_eq (2, err->code); check_streq ("error: oops", err->message); tr_error_free (err); return 0; }
static void set_system_error (tr_error ** error, int code) { if (error == NULL) return; tr_error_set_literal (error, code, tr_strerror (code)); }
bool gtr_file_trash_or_remove (const char * filename, tr_error ** error) { GFile * file; gboolean trashed = FALSE; bool result = true; g_return_val_if_fail (filename && *filename, false); file = g_file_new_for_path (filename); if (gtr_pref_flag_get (TR_KEY_trash_can_enabled)) { GError * err = NULL; trashed = g_file_trash (file, NULL, &err); if (err) { g_message ("Unable to trash file \"%s\": %s", filename, err->message); tr_error_set_literal (error, err->code, err->message); g_clear_error (&err); } } if (!trashed) { GError * err = NULL; g_file_delete (file, NULL, &err); if (err) { g_message ("Unable to delete file \"%s\": %s", filename, err->message); tr_error_clear (error); tr_error_set_literal (error, err->code, err->message); g_clear_error (&err); result = false; } } g_object_unref (G_OBJECT (file)); return result; }
static void set_system_error (tr_error ** error, DWORD code) { char * message; if (error == NULL) return; message = tr_win32_format_message (code); if (message != NULL) { tr_error_set_literal (error, code, message); tr_free (message); } else { tr_error_set (error, code, "Unknown error: 0x%08x", code); } }