/* unix_load(): load a file. */ static u2_noun _unix_load(c3_c* pax_c) { struct stat buf_u; c3_i fid_i = open(pax_c, O_RDONLY, 0644); c3_w fln_w, red_w; c3_y* pad_y; if ( (fid_i < 0) || (fstat(fid_i, &buf_u) < 0) ) { // uL(fprintf(uH, "%s: %s\n", pax_c, strerror(errno))); c3_assert(0); return 0; } fln_w = buf_u.st_size; pad_y = malloc(buf_u.st_size); red_w = read(fid_i, pad_y, fln_w); close(fid_i); if ( fln_w != red_w ) { free(pad_y); c3_assert(0); return 0; } else { u2_noun pad = u2_ci_bytes(fln_w, (c3_y *)pad_y); free(pad_y); return pad; } }
/* u2_walk_load(): load file or bail. */ u2_noun u2_walk_load(c3_c* pas_c) { struct stat buf_b; c3_i fid_i = open(pas_c, O_RDONLY, 0644); c3_w fln_w, red_w; c3_y* pad_y; if ( (fid_i < 0) || (fstat(fid_i, &buf_b) < 0) ) { uL(fprintf(uH, "%s: %s\n", pas_c, strerror(errno))); return u2_cm_bail(c3__fail); } fln_w = buf_b.st_size; pad_y = malloc(buf_b.st_size); red_w = read(fid_i, pad_y, fln_w); close(fid_i); if ( fln_w != red_w ) { free(pad_y); return u2_cm_bail(c3__fail); } else { u2_noun pad = u2_ci_bytes(fln_w, (c3_y *)pad_y); free(pad_y); return pad; } }
/* unix_load(): load a file. */ static u2_noun _unix_load(c3_c* pax_c) { struct stat buf_u; c3_i fid_i = open(pax_c, O_RDONLY, 0644); c3_w fln_w, red_w; c3_y* pad_y; if ( (fid_i < 0) || (fstat(fid_i, &buf_u) < 0) ) { // ignore if the file disappeared between getting the sync event and now if ( ENOENT != errno ) { uL(fprintf(uH, "%s: %s\n", pax_c, strerror(errno))); } return 0; } fln_w = buf_u.st_size; pad_y = c3_malloc(buf_u.st_size); red_w = read(fid_i, pad_y, fln_w); close(fid_i); if ( fln_w != red_w ) { free(pad_y); c3_assert(0); return 0; } else { u2_noun pad = u2_ci_bytes(fln_w, (c3_y *)pad_y); free(pad_y); return pad; } }
/* _http_bods_to_octs: translate body into octet-stream noun. */ static u2_noun _http_bods_to_octs(u2_hbod* bod_u) { c3_w len_w; c3_y* buf_y; u2_noun cos; { u2_hbod* bid_u; len_w = 0; for ( bid_u = bod_u; bid_u; bid_u = bid_u->nex_u ) { len_w += bid_u->len_w; } } buf_y = c3_malloc(len_w); { c3_y* ptr_y = buf_y; while ( bod_u ) { memcpy(ptr_y, bod_u->hun_y, bod_u->len_w); ptr_y += bod_u->len_w; bod_u = bod_u->nex_u; } } cos = u2_ci_bytes(len_w, buf_y); free(buf_y); return u2nc(len_w, cos); }
/* _unix_dir_name(): directory name. */ static u2_noun _unix_dir_name(u2_udir* dir_u) { c3_w pel_w = strlen(dir_u->par_u->pax_c); c3_c* pax_c = dir_u->pax_c + pel_w + 1; c3_c* fas_c = strchr(pax_c, '/'); return fas_c ? u2_ci_bytes((fas_c - pax_c), (c3_y*) pax_c) : u2_ci_string(pax_c); }
/* _unix_file_name(): file name/extension. */ static u2_noun _unix_file_name(u2_ufil* fil_u) { c3_w pel_w = strlen(fil_u->par_u->pax_c); c3_c* pax_c = fil_u->pax_c + pel_w + 1; if ( !fil_u->dot_c ) { return u2_ci_string(pax_c); } else { c3_c* ext_c = fil_u->dot_c + 1; return u2nc(u2_ci_bytes((fil_u->dot_c - pax_c), (c3_y*)pax_c), u2_ci_string(ext_c)); } }
/* _unix_file_tame(): file name/extension for toplevel. */ static u2_noun _unix_file_tame(u2_ufil* fil_u) { c3_c* fas_c = strrchr(fil_u->pax_c, '/'); c3_c* pax_c = fil_u->pax_c + (fas_c-fil_u->pax_c) + 1; if ( !fil_u->dot_c ) { return u2_none; } else { c3_c* ext_c = fil_u->dot_c + 1; c3_w nam_w = fil_u->dot_c - pax_c; return u2nc(u2_ci_bytes(nam_w, (c3_y*)pax_c), u2_ci_string(ext_c)); } }
u2_weak j2_mcd(Pt5, aesc, de)(u2_wire wir_r, u2_atom a, u2_atom b) { c3_y a_y[32]; c3_y b_y[16]; #if defined(U2_OS_osx) size_t siz_i = 0; #else AES_KEY key_u; #endif c3_assert(u2_cr_met(3, a) <= 32); c3_assert(u2_cr_met(3, b) <= 16); u2_cr_bytes(0, 32, a_y, a); u2_cr_bytes(0, 16, b_y, b); #if defined(U2_OS_osx) if ( kCCSuccess != CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionECBMode, a_y, kCCKeySizeAES256, 0, b_y, 16, b_y, 16, &siz_i) ) { return u2_bl_bail(wir_r, c3__exit); } else c3_assert(16 == siz_i); #else if ( 0 != AES_set_decrypt_key(a_y, 256, &key_u) ) { return u2_bl_bail(wir_r, c3__exit); } else { AES_decrypt(b_y, b_y, &key_u); } #endif return u2_ci_bytes(16, b_y); }
/* u2_cf_flat_load(): load `mod` at `pas`. Bail on error. */ u2_weak u2_cf_flat_load(u2_noun mod, u2_noun pas) { c3_assert(c3__atom == mod); { c3_c* pas_c = u2_cr_string(pas); c3_i fid_i; struct stat sat_s; c3_w fln_w; c3_c* fil_c; u2_atom fil; fid_i = open(pas_c, O_RDONLY, 0644); free(pas_c); u2_cz(pas); if ( (fid_i < 0) || (fstat(fid_i, &sat_s) < 0) ) { perror(pas_c); return u2_none; } fln_w = sat_s.st_size; fil_c = c3_malloc(sat_s.st_size); if ( fln_w != read(fid_i, fil_c, fln_w) ) { return u2_none; } close(fid_i); fil = u2_ci_bytes(fln_w, (c3_y *)fil_c); free(fil_c); return fil; } }
/* _term_io_suck_char(): process a single character. */ static void _term_io_suck_char(u2_utty* uty_u, c3_y cay_y) { u2_utat* tat_u = &uty_u->tat_u; // uL(fprintf(uH, "suck-char %x\n", cay_y)); if ( u2_yes == tat_u->esc.ape ) { if ( u2_yes == tat_u->esc.bra ) { switch ( cay_y ) { default: { _term_it_write_txt(uty_u, uty_u->ufo_u.out.bel_y); break; } case 'A': _term_io_belt(uty_u, u2nc(c3__aro, 'u')); break; case 'B': _term_io_belt(uty_u, u2nc(c3__aro, 'd')); break; case 'C': _term_io_belt(uty_u, u2nc(c3__aro, 'r')); break; case 'D': _term_io_belt(uty_u, u2nc(c3__aro, 'l')); break; } tat_u->esc.ape = tat_u->esc.bra = u2_no; } else { if ( (cay_y >= 'a') && (cay_y <= 'z') ) { tat_u->esc.ape = u2_no; _term_io_belt(uty_u, u2nc(c3__met, cay_y)); } else if ( ('[' == cay_y) || ('O' == cay_y) ) { tat_u->esc.bra = u2_yes; } else { tat_u->esc.ape = u2_no; _term_it_write_txt(uty_u, uty_u->ufo_u.out.bel_y); } } } else if ( 0 != tat_u->fut.wid_w ) { tat_u->fut.syb_y[tat_u->fut.len_w++] = cay_y; if ( tat_u->fut.len_w == tat_u->fut.wid_w ) { u2_noun huv = u2_ci_bytes(tat_u->fut.wid_w, tat_u->fut.syb_y); u2_noun wug; // uL(fprintf(uH, "muck-utf8 len %d\n", tat_u->fut.len_w)); // uL(fprintf(uH, "muck-utf8 %x\n", huv)); wug = u2_do("turf", huv); // uL(fprintf(uH, "muck-utf32 %x\n", tat_u->fut.len_w)); tat_u->fut.len_w = tat_u->fut.wid_w = 0; _term_io_belt(uty_u, u2nt(c3__txt, wug, u2_nul)); } } else { if ( (cay_y >= 32) && (cay_y < 127) ) { _term_io_belt(uty_u, u2nt(c3__txt, cay_y, u2_nul)); } else if ( 0 == cay_y ) { _term_it_write_txt(uty_u, uty_u->ufo_u.out.bel_y); } else if ( 8 == cay_y || 127 == cay_y ) { _term_io_belt(uty_u, u2nc(c3__bac, u2_nul)); } else if ( 13 == cay_y ) { _term_io_belt(uty_u, u2nc(c3__ret, u2_nul)); } else if ( cay_y <= 26 ) { _term_io_belt(uty_u, u2nc(c3__ctl, ('a' + (cay_y - 1)))); } else if ( 27 == cay_y ) { tat_u->esc.ape = u2_yes; } else if ( cay_y >= 128 ) { tat_u->fut.len_w = 1; tat_u->fut.syb_y[0] = cay_y; if ( cay_y <= 224 ) { tat_u->fut.wid_w = 2; } else if ( cay_y <= 240 ) { tat_u->fut.wid_w = 3; } else tat_u->fut.wid_w = 4; } } }