Example #1
0
/* Parses power supplies on the current system. */
extern power_supply*
power_supply_parse(power_supply* ps) {
    GDir* dir = NULL;
    const gchar* tmp;
    GString* filename = g_string_sized_new(STRING_LEN);
    guint len = 0;
    gchar* contents;

    if (g_file_test(SYS_ACPI_PATH, G_FILE_TEST_IS_DIR)) {
        dir = g_dir_open(SYS_ACPI_PATH, 0, NULL);
        if (dir != NULL) {
            while ((tmp = g_dir_read_name(dir)) != NULL) {
                g_string_append(filename, SYS_ACPI_PATH);
                g_string_append(filename, tmp);
                g_string_append_c(filename, G_DIR_SEPARATOR);
                len = filename->len;
                g_string_append(filename, SYS_ACPI_TYPE_FILE);
                if (g_file_test(filename->str, G_FILE_TEST_IS_REGULAR)) {
                    g_file_get_contents(filename->str, &contents, 0, NULL);
                    g_string_truncate(filename, len);
                    g_string_append(filename, SYS_ACPI_UEVENT_FILE);
                    if (strcmp(SYS_ACPI_TYPE_AC, contents) == 0) {
                        ac* tmp = ac_new(g_strdup(filename->str));
                        ac_parse(tmp);
                        g_sequence_append(ps->ac_list, tmp);
                    } else if (strcmp(SYS_ACPI_TYPE_BAT, contents) == 0) {
                        bat* tmp = bat_new(g_strdup(filename->str));
                        bat_parse(tmp);
                        g_sequence_append(ps->bat_list, tmp);
                    } else {
                        g_fprintf(stderr, "unsupported power supply type %s", contents);
                    }
                    g_free(contents);
                }
                g_string_truncate(filename, 0);
            }
            g_dir_close(dir);
        }
    }

    g_string_free(filename, TRUE);

    if (DEBUG) {
        g_sequence_foreach(ps->ac_list, &ac_print, NULL);
        g_sequence_foreach(ps->bat_list, &bat_print, NULL);
    }

    return ps;
}
Example #2
0
static bool test_inherit(struct ConfigSet *cs, struct Buffer *err)
{
  log_line(__func__);
  bool result = false;

  const char *account = "fruit";
  const char *parent = "Quince";
  char child[128];
  snprintf(child, sizeof(child), "%s:%s", account, parent);

  const char *AccountVarAddr[] = {
    parent,
    NULL,
  };

  struct CfgAccount *ac = ac_new(cs, account, AccountVarAddr);

  // set parent
  mutt_buffer_reset(err);
  int rc = cs_str_string_set(cs, parent, "*****@*****.**", err);
  if (!TEST_CHECK(CSR_RESULT(rc) == CSR_SUCCESS))
  {
    TEST_MSG("Error: %s\n", err->data);
    goto ti_out;
  }
  dump_native(cs, parent, child);

  // set child
  mutt_buffer_reset(err);
  rc = cs_str_string_set(cs, child, "*****@*****.**", err);
  if (!TEST_CHECK(CSR_RESULT(rc) == CSR_SUCCESS))
  {
    TEST_MSG("Error: %s\n", err->data);
    goto ti_out;
  }
  dump_native(cs, parent, child);

  // reset child
  mutt_buffer_reset(err);
  rc = cs_str_reset(cs, child, err);
  if (!TEST_CHECK(CSR_RESULT(rc) == CSR_SUCCESS))
  {
    TEST_MSG("Error: %s\n", err->data);
    goto ti_out;
  }
  dump_native(cs, parent, child);

  // reset parent
  mutt_buffer_reset(err);
  rc = cs_str_reset(cs, parent, err);
  if (!TEST_CHECK(CSR_RESULT(rc) == CSR_SUCCESS))
  {
    TEST_MSG("Error: %s\n", err->data);
    goto ti_out;
  }
  dump_native(cs, parent, child);

  log_line(__func__);
  result = true;
ti_out:
  ac_free(cs, &ac);
  return result;
}
Example #3
0
bool call_prepare_transmission(ToxAVCall *call)
{
    /* Assumes mutex locked */

    if (call == NULL)
        return false;

    ToxAV *av = call->av;

    if (!av->acb.first && !av->vcb.first)
        /* It makes no sense to have CSession without callbacks */
        return false;

    if (call->active) {
        LOGGER_WARNING("Call already active!\n");
        return true;
    }

    if (create_recursive_mutex(call->mutex_audio) != 0)
        return false;

    if (create_recursive_mutex(call->mutex_video) != 0)
        goto FAILURE_3;

    if (create_recursive_mutex(call->mutex) != 0)
        goto FAILURE_2;

    /* Prepare bwc */
    call->bwc = bwc_new(av->m, call->friend_number, callback_bwc, call);

    { /* Prepare audio */
        call->audio.second = ac_new(av, call->friend_number, av->acb.first, av->acb.second);

        if (!call->audio.second) {
            LOGGER_ERROR("Failed to create audio codec session");
            goto FAILURE;
        }

        call->audio.first = rtp_new(rtp_TypeAudio, av->m, call->friend_number, call->bwc,
                                    call->audio.second, ac_queue_message);

        if (!call->audio.first) {
            LOGGER_ERROR("Failed to create audio rtp session");;
            goto FAILURE;
        }
    }
    { /* Prepare video */
        call->video.second = vc_new(av, call->friend_number, av->vcb.first, av->vcb.second);

        if (!call->video.second) {
            LOGGER_ERROR("Failed to create video codec session");
            goto FAILURE;
        }

        call->video.first = rtp_new(rtp_TypeVideo, av->m, call->friend_number, call->bwc,
                                    call->video.second, vc_queue_message);

        if (!call->video.first) {
            LOGGER_ERROR("Failed to create video rtp session");
            goto FAILURE;
        }
    }

    call->active = 1;
    return true;

FAILURE:
    bwc_kill(call->bwc);
    rtp_kill(call->audio.first);
    ac_kill(call->audio.second);
    call->audio.first = NULL;
    call->audio.second = NULL;
    rtp_kill(call->video.first);
    vc_kill(call->video.second);
    call->video.first = NULL;
    call->video.second = NULL;
    pthread_mutex_destroy(call->mutex);
FAILURE_2:
    pthread_mutex_destroy(call->mutex_video);
FAILURE_3:
    pthread_mutex_destroy(call->mutex_audio);
    return false;
}