示例#1
0
文件: unix.c 项目: cgyarvin/urbit
/* _unix_ship_update(): update top level ship.
*/
static void
_unix_ship_update(u2_uhot* hot_u)
{
  u2_udir* dir_u = &(hot_u->dir_u);
  DIR*     rid_u = _unix_opendir(dir_u->pax_c);

  if ( u2_yes == _unix_dir_update(dir_u, rid_u) ) {
    u2_udir* dis_u;
    u2_noun  who, hox;

    {
      mpz_t who_mp;

      mpz_init_set(who_mp, hot_u->who_mp);
      who = u2_ci_mp(who_mp);
      hox = u2_dc("scot", 'p', u2k(who));
    }

    for ( dis_u = dir_u->dis_u; dis_u; dis_u = dis_u->nex_u ) { 
      u2_noun syd = _unix_dir_name(dis_u); 

      // uL(fprintf(uH, "sync %s %s\n", u2_cr_string(hox), u2_cr_string(syd))); 
      _unix_desk_sync_into(u2k(who), u2k(hox), syd, dis_u);
    }
    u2z(hox);
    u2z(who);
  }
}
示例#2
0
文件: unix.c 项目: cgyarvin/urbit
/* _unix_desk_sync_miso(): sync out change.
*/
static void
_unix_desk_sync_miso(u2_udir* dir_u, u2_noun pax, u2_noun mis)
{
  if ( (u2_no == u2du(pax)) || u2_no == u2du(u2t(pax)) ) {
    c3_assert(0);

    u2z(pax); u2z(mis);
  }
  else {
    u2_noun i_pax = u2h(pax); 
    u2_noun t_pax = u2t(pax);
    u2_noun it_pax = u2h(t_pax);
    u2_noun tt_pax = u2t(t_pax);

    if ( u2_nul == tt_pax ) {
      _unix_desk_sync_tofu(dir_u, u2k(i_pax), u2k(it_pax), mis);
    } 
    else {
      u2_udir** dis_u = _unix_pdir(dir_u, u2k(i_pax));

      if ( !*dis_u ) {
        *dis_u = malloc(sizeof(u2_udir));

        _unix_dir_forge(*dis_u, dir_u, u2k(i_pax));
      }
      _unix_desk_sync_miso(*dis_u, u2k(t_pax), mis);
    }
  }
  u2z(pax);
}
示例#3
0
文件: unix.c 项目: esaul/urbit
/* _unix_desk_sync_into(): sync external changes to desk.
*/
static void
_unix_desk_sync_into(u2_noun  who,
                     u2_noun  hox,
                     u2_noun  syd,
                     u2_udir* dir_u)
{
  u2_noun xun, bur, doz, fav, pax;

  xun = _unix_dir_ankh(dir_u);
  bur = _unix_desk_peek(hox, u2k(syd), u2k(u2A->wen));

  if ( (u2_no == u2_sing(u2h(xun), u2h(bur)))) //&&
  //     (u2_no == _unix_ankh_sing(xun, bur)) )
  {
    doz = u2_dc("cost", xun, bur);

    pax = u2nq(u2_blip, c3__sync, u2k(u2A->sen), u2_nul);
    fav = u2nq(c3__into, who, syd, u2nc(u2_yes, doz));

    u2_reck_plan(u2A, pax, fav);
  }
  else {
    u2z(who); u2z(syd); u2z(xun); u2z(bur);
  }
}
示例#4
0
文件: unix.c 项目: esaul/urbit
/* u2_unix_io_poll(): update unix IO state.
*/
void
u2_unix_io_poll(void)
{
  u2_unix* unx_u = &u2_Host.unx_u;
  u2_noun  wen = u2_reck_keep(u2A, u2nt(u2_blip, c3__clay, u2_nul));

  if ( (u2_nul != wen) &&
       (u2_yes == u2du(wen)) &&
       (u2_yes == u2ud(u2t(wen))) )
  {
    c3_d gap_d = u2_time_gap_ms(u2k(u2A->now), u2k(u2t(wen)));

    if ( u2_yes == unx_u->alm ) {
      uv_timer_stop(&unx_u->tim_u);
    }
    else unx_u->alm = u2_yes;

    if ( gap_d < 1000 ) { gap_d = 1000; }   // band-aid on an unknown clay timer bug
    uv_timer_start(&unx_u->tim_u, _unix_time_cb, gap_d, 0);
  }
  else {
    if ( u2_yes == unx_u->alm ) {
      uv_timer_stop(&unx_u->tim_u);
    }
    unx_u->alm = u2_no;
  }
  u2z(wen);
}
示例#5
0
/* u2_term_ef_boil(): initial effects for loaded servers.
*/
void
u2_term_ef_boil(c3_l ono_l)
{
  if ( ono_l ) {
    u2_noun tid_l;

    for ( tid_l = 2; tid_l <= ono_l; tid_l++ ) {
      u2_noun tin = u2_dc("scot", c3__ud, tid_l);
      u2_noun pax = u2nq(c3__gold, c3__term, tin, u2_nul);
      u2_noun hud = u2nc(c3__wipe, u2_nul);

      u2_reck_plan(u2A, pax, hud);
    }
  }

  {
    u2_noun pax = u2nq(c3__gold, c3__term, '1', u2_nul);

    //  u2_reck_plan(u2A, u2k(pax), u2nc(c3__init, u2k(u2h(u2A->own))));
    u2_reck_plan(u2A, u2k(pax), u2nc(c3__blew, u2_term_get_blew(1)));
    u2_reck_plan(u2A, u2k(pax), u2nc(c3__hail, u2_nul));

    u2z(pax);
  }
}
示例#6
0
文件: unix.c 项目: cgyarvin/urbit
/* u2_unix_io_poll(): update unix IO state.
*/
void
u2_unix_io_poll(void)
{
  u2_unix* unx_u = &u2_Host.unx_u;
  u2_noun  wen = u2_reck_keep(u2A, u2nt(c3__gold, c3__clay, u2_nul));
 
  if ( (u2_nul != wen) && 
       (u2_yes == u2du(wen)) &&
       (u2_yes == u2ud(u2t(wen))) )
  {
    c3_d gap_d = u2_time_gap_ms(u2k(u2A->now), u2k(u2t(wen)));

    if ( u2_yes == unx_u->alm ) {
      uv_timer_stop(&unx_u->tim_u);
    }
    else unx_u->alm = u2_yes;

    uv_timer_start(&unx_u->tim_u, _unix_time_cb, gap_d, 0);
  }
  else {
    if ( u2_yes == unx_u->alm ) {
      uv_timer_stop(&unx_u->tim_u);
    }
    unx_u->alm = u2_no;
  }
  u2z(wen);
}
示例#7
0
文件: batz.c 项目: Gruelty/urbit
/* u2_batz_io_poll(): update batz IO state.
*/
void
u2_batz_io_poll(void)
{
  u2_batz* beh_u = &u2_Host.beh_u;
  u2_noun  wen   = u2_reck_keep(u2A, u2nt(c3__gold, c3__batz, u2_nul));
 
  if ( (u2_nul != wen) && 
       (u2_yes == u2du(wen)) &&
       (u2_yes == u2ud(u2t(wen))) )
  {
    c3_d gap_d = u2_time_gap_ms(u2k(u2A->now), u2k(u2t(wen)));

    if ( u2_yes == beh_u->alm ) {
      uv_timer_stop(&beh_u->tim_u);
    }
    else beh_u->alm = u2_yes;

    uv_timer_start(&beh_u->tim_u, _batz_time_cb, gap_d, 0);
  }
  else {
    if ( u2_yes == beh_u->alm ) {
      uv_timer_stop(&beh_u->tim_u);
    }
    beh_u->alm = u2_no;
  }
  u2z(wen);
}
示例#8
0
文件: unix.c 项目: cgyarvin/urbit
/* u2_unix_ef_init(): update filesystem for new acquisition.
*/
void
u2_unix_ef_init(u2_noun who)
{
  _unix_hot_gain(u2k(who), u2_yes);

  u2_reck_plan(u2A, u2nq(c3__gold, c3__sync, u2k(u2A->sen), u2_nul),
                    u2nq(c3__into, who, u2_blip, u2nc(u2_yes, u2_nul)));
}
示例#9
0
文件: walk.c 项目: Gruelty/urbit
static u2_noun
_walk_ok(u2_reck* rec_u, u2_noun nod)
{
  u2_noun don = u2_cn_mung(u2k(rec_u->toy.arch), u2k(nod));

  if ( u2_no == u2_sing(nod, don) ) {
    c3_assert(0);
  }
  u2z(don);
  return nod;
}
示例#10
0
/* u2_term_ef_bake(): initial effects for new terminal.
*/
void
u2_term_ef_bake(u2_noun  fav)
{
  u2_noun pax = u2nq(c3__gold, c3__term, '1', u2_nul);

  u2_reck_plan(u2A, u2k(pax), u2nc(c3__boot, fav));
  u2_reck_plan(u2A, u2k(pax), u2nc(c3__blew, u2_term_get_blew(1)));
  u2_reck_plan(u2A, u2k(pax), u2nc(c3__hail, u2_nul));

  u2z(pax);
}
示例#11
0
文件: unix.c 项目: cgyarvin/urbit
/* _unix_desk_sync_soba(): sync computed changes.
*/
static void
_unix_desk_sync_soba(u2_udir* dir_u, u2_noun doz)
{
  u2_noun zod = doz;

  while ( u2_nul != zod ) {
    _unix_desk_sync_miso(dir_u, u2k(u2h(u2h(zod))), u2k(u2t(u2h(zod))));
    zod = u2t(zod);
  }
  u2z(doz);
}
/* u2_term_ef_boil(): initial effects for loaded servers.
*/
void
u2_term_ef_boil(void)
{
  {
    u2_noun pax = u2nq(u2_blip, c3__term, '1', u2_nul);

    //  u2_proc_plan(u2A, u2k(pax), u2nc(c3__init, u2k(u2h(u2A->own))));
    u2_proc_plan(u2A, u2k(pax), u2nc(c3__harm, u2_nul));
    u2_proc_plan(u2A, u2k(pax), u2nc(c3__blew, u2_term_get_blew(1)));
    u2_proc_plan(u2A, u2k(pax), u2nc(c3__hail, u2_nul));

    u2z(pax);
  }
}
示例#13
0
文件: unix.c 项目: cgyarvin/urbit
/* u2_unix_ef_ergo(): update filesystem, outbound.
*/
void
u2_unix_ef_ergo(u2_noun who,
                u2_noun syd,
                u2_noun rel)
{
  u2_noun  hox = u2_dc("scot", 'p', u2k(who));
  u2_noun  lok = u2_dc("scot", c3__ud, rel);
  u2_uhot* hot_u;

  hot_u = _unix_home(u2k(who));

  if ( 0 != hot_u ) {
    _unix_desk_sync_ergo(who, hox, syd, lok, hot_u);
  }
}
/* u2_cm_rind(): open and produce a new jump buffer.
*/
void*
u2_cm_rind()
{
  u2_ray kit_r = u2_rl_ralloc(u2_Wire, c3_wiseof(u2_loom_kite));

  u2_kite_par_r(kit_r) = u2_wire_kit_r(u2_Wire);
  u2_wire_kit_r(u2_Wire) = kit_r;

  //  Save the old stack and actions.
  //
  u2_kite_tax(kit_r) = u2k(u2_wire_tax(u2_Wire));
  u2_kite_don(kit_r) = u2k(u2_wrac_at(u2_Wire, duz.don));

  return u2_at_cord(u2_kite_buf_r(kit_r), c3_wiseof(jmp_buf));
}
示例#15
0
文件: walk.c 项目: Gruelty/urbit
/* u2_walk_save(): save file or bail.
*/
void
u2_walk_save(c3_c* pas_c, u2_noun tim, u2_atom pad)
{
  c3_i  fid_i = open(pas_c, O_WRONLY | O_CREAT | O_TRUNC, 0666);
  c3_w  fln_w, rit_w;
  c3_y* pad_y;

  if ( fid_i < 0 ) {
    uL(fprintf(uH, "%s: %s\n", pas_c, strerror(errno)));
    u2_cm_bail(c3__fail);
  }

  fln_w = u2_met(3, pad);
  pad_y = malloc(fln_w);
  u2_cr_bytes(0, fln_w, pad_y, pad);
  u2z(pad);

  rit_w = write(fid_i, pad_y, fln_w);
  close(fid_i);
  free(pad_y);

  if ( rit_w != fln_w ) {
    uL(fprintf(uH, "%s: %s\n", pas_c, strerror(errno)));
    u2_cm_bail(c3__fail);
  }

  if ( 0 != tim ) {
    struct timeval tim_tv[2];

    u2_time_out_tv(&tim_tv[0], u2k(tim));
    u2_time_out_tv(&tim_tv[1], tim);
 
    utimes(pas_c, tim_tv);
  }
}
示例#16
0
文件: unix.c 项目: esaul/urbit
/* _unix_hot_gain(): gain ship.
*/
static void
_unix_hot_gain(u2_noun who, u2_bean mek)
{
  u2_noun hox = u2_dc("scot", 'p', u2k(who));
  c3_c*   hox_c = u2_cr_string(hox);
  c3_c*   pax_c = _unix_down(u2_Host.cpu_c, hox_c + 1);
  DIR*    rid_u = opendir(pax_c);

  if ( !rid_u ) {
    if ( u2_yes == mek ) {
      _unix_mkdir(pax_c);
    } else {
      u2z(who);
      u2z(hox);
      return;
    }
  } else closedir(rid_u);

  // uL(fprintf(uH, "GAIN %s\n", pax_c));
  free(hox_c);
  u2z(hox);
  u2_unix_acquire(pax_c);

  {
    u2_uhot* hot_u = c3_malloc(sizeof(u2_uhot));

    _unix_dir_watch(&hot_u->dir_u, 0, pax_c);

    u2_cr_mp(hot_u->who_mp, who);
    u2z(who);

    hot_u->nex_u = u2_Host.unx_u.hot_u;
    u2_Host.unx_u.hot_u = hot_u;
  }
}
示例#17
0
文件: nock.c 项目: sillsm/urbit
/* u2_cn_mink(): logical virtual nock.
*/
u2_noun
u2_cn_mink(u2_noun bus,
           u2_noun fol,
           u2_noun fly)
{
    u2_noun res;
    u2_bean bit;

    bit = u2_tx_sys_bit(u2_Wire, u2_no);
    c3_assert(bit == u2_yes);
    bit = u2_tx_glu_bit(u2_Wire, u2_yes);

    {
        u2_noun lad;

        lad = u2_hevn_at(lad);
        u2_hevn_at(lad) = u2nc(fly, u2k(lad));
        {
            res = _nock_moog(bus, fol);
        }
        // c3_assert(lad == u2ft(u2_hevn_at(lad)));

        u2z(u2_hevn_at(lad));
        u2_hevn_at(lad) = lad;
    }

    u2_tx_sys_bit(u2_Wire, u2_yes);
    u2_tx_glu_bit(u2_Wire, bit);

    return res;
}
示例#18
0
文件: http.c 项目: gphummer/urbit
void
u2_http_ef_bake(void)
{
  u2_noun pax = u2nq(c3__gold, c3__http, u2k(u2A->sen), u2_nul);

  u2_reck_plan(u2A, pax, u2nc(c3__born, u2_nul));
}
示例#19
0
/* _lo_hard(): standard hard wrapper.  Produces result and/or asserts.
*/
static u2_noun
_lo_hard(u2_reck* rec_u, u2_funk fun_f, u2_noun arg)
{
  u2_noun pro = u2_lo_soft(rec_u, 0, fun_f, arg);

  if ( u2_blip == u2h(pro) ) {
    u2_noun poo = u2k(u2t(pro));

    u2z(pro); return poo;
  }
  else {
    u2_lo_punt(2, u2k(u2t(pro)));
    u2z(pro);
    c3_assert(0);
  }
}
/* _term_close_cb(): free terminal.
*/
static void
_term_close_cb(uv_handle_t* han_t)
{
  u2_utty* tty_u = (void*) han_t;
  if ( u2_Host.uty_u == tty_u ) {
    u2_Host.uty_u = tty_u->nex_u;
  }
  else {
    u2_utty* uty_u;
    for (uty_u = u2_Host.uty_u; uty_u; uty_u = uty_u->nex_u ) {
      if ( uty_u->nex_u == tty_u ) {
        uty_u->nex_u = tty_u->nex_u;
        break;
      }
    }
  }

  {
    u2_noun tid = u2_dc("scot", c3__ud, tty_u->tid_l);
    u2_noun pax = u2nq(u2_blip, c3__term, tid, u2_nul);
    u2_proc_plan(u2A, u2k(pax), u2nc(c3__hook, u2_nul));
    u2z(pax);
  }
  free(tty_u);
}
示例#21
0
/* u2_lo_sway(): print trace.
*/
void
u2_lo_sway(c3_l tab_l, u2_noun tax)
{
  u2_noun mok = u2_dc("mook", 2, tax);

  u2_lo_punt(tab_l, u2k(u2t(mok)));
  u2z(mok);
}
示例#22
0
文件: unix.c 项目: esaul/urbit
/* _unix_dir_ankh(): resolve directory to new style ankh.
*/
static u2_noun
_unix_dir_ankh(u2_udir* dir_u)
{
  u2_udir* dis_u;
  u2_ufil* fil_u;
  u2_noun pam = u2_nul;

  for ( dis_u = dir_u->dis_u; dis_u; dis_u = dis_u->nex_u ) {
    u2_noun pre = _unix_dir_name(dis_u);
    u2_noun ank = _unix_dir_ankh(dis_u);

    // uL(fprintf(uH, "dir %s\n", u2_cr_string(pre)));
    if ( 0 != u2h(ank) ) {
      pam = u2_ckd_by_put(pam, pre, ank);
    }
  }

  if ( !dir_u->par_u->par_u ) {                        //  toplevel
    for ( fil_u = dir_u->par_u->fil_u; fil_u; fil_u = fil_u->nex_u ) {
      //  uL(fprintf(uH, "top %s\n", fil_u->pax_c));
      u2_noun wib = _unix_file_tame(fil_u);
      if ( u2_none == wib ) continue;
      u2_noun dur = _unix_dir_name(dir_u);
      if ( u2_no == u2_sing(dur, u2h(wib)) ) {         //  wrong desk
        u2z(wib); u2z(dur);
        continue;
      }
      u2_noun baw = _unix_file_load(fil_u);
      u2_noun woz = u2nt(u2_nul, u2_do("sham", u2k(baw)), baw);
      u2z(dur);
      pam = _unix_dir_ankh_file(pam, u2k(u2t(wib)), baw, woz);
      u2z(wib);
    }
  }

  for ( fil_u = dir_u->fil_u; fil_u; fil_u = fil_u->nex_u ) {
    u2_noun wib = _unix_file_name(fil_u);
    u2_noun baw = _unix_file_load(fil_u);
    u2_noun woz = u2nt(u2_nul, u2_do("sham", u2k(baw)), baw);
    pam = _unix_dir_ankh_file(pam, wib, baw, woz);
  }
  return u2_do("cosh", u2nt(0, u2_nul, pam));
}
示例#23
0
文件: nock.c 项目: ngvrnd/urbit
/* nock_molg(): function call (mung) with kode.  Arguments transferred.
*/
static u2_noun
_nock_molg(u2_noun  gat,
           u2_noun  sam,
           u2_kode* pon)
{
  if ( (u2_no == u2du(gat)) || (u2_no == u2du(u2t(gat))) ) {
    *pon = 2; return u2_cm_wail();
  }
  else {
    u2_noun cor, fol;

    cor = u2nc(u2k(u2h(gat)), u2nc(sam, u2k(u2t(u2t(gat)))));
    fol = u2k(u2h(gat));
    u2z(gat);

    //  XX  try to chip with u2_ds_find?  but a rare case...
    return _nock_mool(cor, fol, pon);
  }
}
示例#24
0
文件: parse.c 项目: Gruelty/urbit
/* bend
*/
  u2_noun                                                         //  produce
  j2_mcx(Pt5, bend, fun)(u2_wire wir_r,
                         u2_noun raq,                             //  retain
                         u2_noun vex,                             //  retain
                         u2_noun sab)                             //  retain
  {
    u2_noun p_vex, q_vex;

    u2_bi_cell(wir_r, vex, &p_vex, &q_vex);
    if ( u2_no == u2_dust(q_vex) ) {
      return u2_rx(wir_r, vex);
    } else {
      u2_noun uq_vex = u2_t(q_vex);
      u2_noun puq_vex, quq_vex;
      u2_noun yit, yur;
      u2_noun p_yit, q_yit;
      u2_noun ret;

      u2_bi_cell(wir_r, uq_vex, &puq_vex, &quq_vex);
      yit = u2_bl_good(wir_r, u2_nk_mong(wir_r, sab, u2_rx(wir_r, quq_vex)));
      
      u2_bi_cell(wir_r, yit, &p_yit, &q_yit);
      yur = _last(wir_r, p_vex, p_yit);

      if ( u2_no == u2_dust(q_yit) ) {
        ret = u2_bc(wir_r, yur, u2_rx(wir_r, q_vex));
      } 
      else {
        u2_noun uq_yit = u2_t(q_yit);
        u2_noun puq_yit, quq_yit;
        u2_noun vux;
         
        u2_bi_cell(wir_r, uq_yit, &puq_yit, &quq_yit);

        vux = u2_bl_good
                    (wir_r, 
                     u2_nk_mong
                       (wir_r, raq, 
                               u2_bc(wir_r, u2_rx(wir_r, puq_vex),
                                            u2_rx(wir_r, puq_yit))));
        if ( u2_nul == vux ) {
          ret = u2_bc(wir_r, yur, u2_rx(wir_r, q_vex));
        }
        else {
          ret = u2_bq(wir_r, yur,
                             u2_nul,
                             u2k(u2t(vux)),
                             u2_rx(wir_r, quq_yit));
          u2z(vux);
        }
      }
      u2_rz(wir_r, yit);
      return ret;
    }
  }
示例#25
0
//  _lo_bench_dec(): benchmark decrement.
//
static void
_lo_bench_dec(c3_w num_w)
{
  c3_w i_w;

  for ( i_w = 0; i_w < num_w; i_w++ ) {
    u2_noun soc = u2_do("dec", u2k(u2A->now));

    u2z(soc);
  }
}
示例#26
0
//  _lo_bench_scot_ud(): benchmark prettyprint.
//
static void
_lo_bench_scot_ud(c3_w num_w)
{
  c3_w i_w;

  for ( i_w = 0; i_w < num_w; i_w++ ) {
    u2_noun soc = u2_dc("scot", c3__ud, u2k(u2A->now));

    u2z(soc);
  }
}
示例#27
0
//  _lo_bench_slay_p(): benchmark prettyprint.
//
static void
_lo_bench_slay_p(c3_w num_w)
{
  c3_w i_w;

  for ( i_w = 0; i_w < num_w; i_w++ ) {
    u2_noun soc = u2_dc("scot", 'p', u2k(u2A->now));
    u2_noun dub = u2_do("slay", soc);

    u2z(dub);
  }
}
示例#28
0
文件: unix.c 项目: cgyarvin/urbit
/* _unix_desk_sync_into(): sync external changes to desk.
*/
static void
_unix_desk_sync_into(u2_noun  who,
                     u2_noun  hox, 
                     u2_noun  syd, 
                     u2_udir* dir_u)
{
  u2_noun xun, bur, doz, fav, pax;

  xun = _unix_dir_arch(dir_u);
  bur = _unix_desk_peek(u2k(who), hox, syd, u2k(u2A->wen));

  if ( u2_no == u2_sing(xun, bur) ) {
    doz = u2_dc("cyst", xun, bur);
    pax = u2nq(c3__gold, c3__sync, u2k(u2A->sen), u2_nul);
    fav = u2nq(c3__into, who, syd, u2nc(u2_yes, doz));

    u2_reck_plan(u2A, pax, fav);
  } 
  else {
    u2z(xun); u2z(bur);
  }
}
示例#29
0
文件: nock.c 项目: sillsm/urbit
/* _nock_moog(): u2_cn_mink() with fly set.
*/
static u2_noun
_nock_moog(u2_noun bus,
           u2_noun fol)
{
    u2_noun res;
    u2_kode pon;

    pon = 0;
    {
        u2_noun hoe;

        if ( 0 != (hoe = u2_cm_trap()) ) {
            if ( u2h(hoe) == c3__exit ) {
                res = u2nc(2, u2k(u2t(hoe)));

                c3_assert(0);
                u2z(hoe);
            }
            else if ( u2h(hoe) == c3__need ) {
                res = u2nc(1, u2k(u2t(hoe)));
                u2z(hoe);
            }
            else {
                u2_noun wac = u2k(u2h(hoe));

                u2z(hoe);
                return u2_cm_bail(wac);
            }
        }
        else {
            u2_noun pro = _nock_mool(bus, fol, &pon);

            u2_cm_done();
            res = u2nc(pon, pro);
        }
    }
    return res;
}
示例#30
0
文件: http.c 项目: gphummer/urbit
/* _http_new_response(): create http response structure.
*/
static u2_hrep*
_http_new_response(c3_l sev_l, c3_l coq_l, c3_l seq_l, u2_noun rep)
{
  u2_noun p_rep, q_rep, r_rep;

  if ( u2_no == u2_cr_trel(rep, &p_rep, &q_rep, &r_rep) ) {
    uL(fprintf(uH, "strange response\n"));
    return 0;
  }
  else {
    u2_hrep* rep_u = c3_malloc(sizeof(u2_hrep));

    rep_u->sev_l = sev_l;
    rep_u->coq_l = coq_l;
    rep_u->seq_l = seq_l;

    rep_u->sas_w = p_rep;
    rep_u->hed_u = _http_list_to_heds(u2k(q_rep));
    rep_u->bod_u = (u2_nul == r_rep) ? 0 : _http_octs_to_bod(u2k(u2t(r_rep)));

    u2z(rep); return rep_u;
  }
}