Example #1
0
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;
}
Example #2
0
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;
}
Example #3
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;
}
Example #4
0
static void
set_system_error (tr_error ** error,
                  int         code)
{
  if (error == NULL)
    return;

  tr_error_set_literal (error, code, tr_strerror (code));
}
Example #5
0
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;
}
Example #6
0
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);
    }
}