fa_pair_t fa_pair_unassoc(fa_pair_t p) { fa_ptr_t a = fa_copy(((fa_pair_t) p->values[0])->values[0]); fa_ptr_t b = fa_copy(((fa_pair_t) p->values[0])->values[1]); fa_ptr_t c = fa_copy(p->values[1]); return new_pair(a, new_pair(b, c)); }
fa_error_t fa_error_copy_simple(simple_fa_error_t simple) { fa_ptr_t simple_error_impl(fa_id_t interface); simple_fa_error_t e = fa_new_struct(simple_error); e->impl = &simple_error_impl; e->severity = simple->severity; e->message = fa_copy(simple->message); e->origin = simple->origin ? fa_copy(simple->origin) : NULL; return (fa_error_t) e; }
static int es_file_copy(duk_context *ctx) { char *cleanup; char path[URL_MAX]; char errbuf[256]; es_context_t *ec = es_get(ctx); const char *from = duk_to_string(ctx, 0); const char *to = duk_to_string(ctx, 1); cleanup = mystrdupa(to); fa_sanitize_filename(cleanup); snprintf(path, sizeof(path), "%s/copy/%s", ec->ec_storage, cleanup); TRACE(TRACE_DEBUG, "JS", "Copying file from '%s' to '%s'", from, path); if(fa_copy(path, from, errbuf, sizeof(errbuf))) duk_error(ctx, DUK_ERR_ERROR, "Copy failed: %s", errbuf); duk_push_string(ctx, path); return 1; }
fa_string_t fa_error_format(bool colored, fa_error_t a) { simple_fa_error_t simple = (simple_fa_error_t) a; fa_string_t str = fa_string(""); switch (simple->severity) { case info: str = fa_string_dappend(str, colored ? fa_string("\x1b[32m[INFO]\x1b[0m ") : fa_string("[INFO] ")); break; case warning: str = fa_string_dappend(str, colored ? fa_string("\x1b[33m[WARNING]\x1b[0m ") : fa_string("[WARNING] ")); break; case error: str = fa_string_dappend(str, colored ? fa_string("\x1b[31m[ERROR]\x1b[0m ") : fa_string("[ERROR] ")); break; case misc: str = fa_string_dappend(str, colored ? fa_string("\x1b[35m[MISC]\x1b[0m ") : fa_string("[MISC] ")); break; default: assert(false && "Missing label"); } if (simple->origin && (fa_string_length(simple->origin) > 0)) { if (colored) str = fa_string_dappend(str, fa_string("\x1b[36m")); str = fa_string_dappend(str, fa_copy(simple->origin)); str = fa_string_dappend(str, colored ? fa_string(":\x1b[0m ") : fa_string(": ")); } if (simple->message) { str = fa_string_dappend(str, fa_copy(simple->message)); } else { str = fa_string_dappend(str, fa_string("[NULL]")); } return str; }
fa_string_t simple_error_show(fa_ptr_t a) { simple_fa_error_t simple = (simple_fa_error_t) a; fa_string_t result = fa_string("<"); switch (simple->severity) { case info: result = fa_string_dappend(result, fa_string("Info ")); break; case warning: result = fa_string_dappend(result, fa_string("Warning ")); break; case error: result = fa_string_dappend(result, fa_string("Error ")); break; case misc: result = fa_string_dappend(result, fa_string("Misc ")); break; default: assert(false && "Missing label"); } if (simple->origin && (fa_string_length(simple->origin) > 0)) { result = fa_string_dappend(result, fa_copy(simple->origin)); result = fa_string_dappend(result, fa_string(": ")); } result = fa_string_dappend(result, fa_copy(simple->message)); result = fa_string_dappend(result, fa_string(">")); return result; }
fa_buffer_t fa_buffer_resample_mono(double new_rate, fa_buffer_t buffer) { size_t old_size = fa_buffer_size(buffer); double old_rate = fa_peek_int32(fa_buffer_get_meta(buffer, fa_string("sample-rate"))); size_t new_size = ((double) old_size) * (new_rate / old_rate); fa_buffer_t buffer2 = fa_buffer_create(new_size); resample_raw(old_rate, new_rate, (double*) buffer->data, old_size / sizeof(double), (double*) buffer2->data, new_size / sizeof(double)); buffer2->destroy_function = buffer->destroy_function; buffer2->destroy_data = buffer->destroy_data; buffer2->meta = fa_copy(buffer->meta); fa_buffer_set_meta(buffer, fa_string("sample-rate"), fa_from_int32(new_rate)); return buffer2; }
fa_pair_t fa_pair_dduplicate(fa_ptr_t value) { return new_pair(value, fa_copy(value)); }
fa_pair_t fa_pair_swap(fa_pair_t pair) { return new_pair(fa_copy(pair->values[1]), fa_copy(pair->values[0])); }