Exemplo n.º 1
0
/* 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;
  }
}
Exemplo n.º 2
0
Arquivo: walk.c Projeto: Gruelty/urbit
/* 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;
  }
}
Exemplo n.º 3
0
Arquivo: unix.c Projeto: esaul/urbit
/* 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;
  }
}
Exemplo n.º 4
0
/* _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);
}
Exemplo n.º 5
0
/* _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);
}
Exemplo n.º 6
0
/* _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));
  }
}
Exemplo n.º 7
0
Arquivo: unix.c Projeto: esaul/urbit
/* _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;
  }
}
Exemplo n.º 10
0
/* _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;
    }
  }
}