/* 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; }
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; }
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; }