Ejemplo n.º 1
0
/* 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)));
}
Ejemplo n.º 2
0
/* u2_unix_ef_look(): update the root.
*/
void
u2_unix_ef_look(void)
{
  u2_unix* unx_u = &u2_Host.unx_u;
  u2_noun  won;
  u2_uhot* hot_u; 

  //  find owners without directories
  {
    for ( won = u2A->own; u2_nul != won; won = u2t(won) ) {
      u2_noun who = u2h(won);
      mpz_t who_mp;

      u2_cr_mp(who_mp, who);
      for ( hot_u = unx_u->hot_u; 
            hot_u && (0 != mpz_cmp(who_mp, hot_u->who_mp));
            hot_u = hot_u->nex_u );

      mpz_clear(who_mp);
      if ( 0 == hot_u ) {
        _unix_hot_gain(u2k(who), u2_no);
      }
    }
  }

  //  find directories without owners
  {
    u2_uhot** het_u = &(unx_u->hot_u);

    while ( 0 != (hot_u=*het_u) ) {
      for ( won = u2A->own; u2_nul != won; won = u2t(won) ) {
        u2_noun who = u2h(won);
        mpz_t   who_mp;

        u2_cr_mp(who_mp, who);
        if ( 0 == mpz_cmp(who_mp, hot_u->who_mp) ) {
          break;
        }
        mpz_clear(who_mp);
      }

      if ( u2_nul == won ) {
        *het_u = hot_u->nex_u;
 
        // uL(fprintf(uH, "sync: lose %s\n", hot_u->dir_u.pax_c));
        _unix_hot_lose(hot_u);

        free(hot_u);
        continue;
      }
      else {
        het_u = &(hot_u->nex_u);
      }
    }
  }

  //  update all ships
  {
    u2_uhot* hot_u;

    for ( hot_u = unx_u->hot_u; hot_u; hot_u = hot_u->nex_u ) {
      _unix_ship_update(hot_u);
    }
  }
}
Ejemplo n.º 3
0
Archivo: unix.c Proyecto: esaul/urbit
/* u2_unix_ef_look(): update the root.
*/
void
u2_unix_ef_look(void)
{
  u2_unix* unx_u = &u2_Host.unx_u;
  u2_noun  won;
  u2_uhot* hot_u;

  if ( u2_nul != u2A->roe ) {
    //  We can't generate a working %into event here because there
    //  are other events, possibly containing %into, that are queued;
    //  they will change the state of %clay and cause a patch that
    //  doesn't work.
    //
    return;
  }

  //  find owners without directories
  {
    for ( won = u2A->own; u2_nul != won; won = u2t(won) ) {
      u2_noun who = u2h(won);
      mpz_t who_mp;

      u2_cr_mp(who_mp, who);
      for ( hot_u = unx_u->hot_u;
            hot_u && (0 != mpz_cmp(who_mp, hot_u->who_mp));
            hot_u = hot_u->nex_u );

      mpz_clear(who_mp);
      if ( 0 == hot_u ) {
        _unix_hot_gain(u2k(who), u2_no);
      }
    }
  }

  //  find directories without owners
  {
    u2_uhot** het_u = &(unx_u->hot_u);

    while ( 0 != (hot_u=*het_u) ) {
      for ( won = u2A->own; u2_nul != won; won = u2t(won) ) {
        u2_noun who = u2h(won);
        mpz_t   who_mp;
        c3_w    cmp_w;

        u2_cr_mp(who_mp, who);
        cmp_w = mpz_cmp(who_mp, hot_u->who_mp);
        mpz_clear(who_mp);
        if ( 0 == cmp_w ) {
          break;
        }
      }

      if ( u2_nul == won ) {
        *het_u = hot_u->nex_u;

        // uL(fprintf(uH, "sync: lose %s\n", hot_u->dir_u.pax_c));
        _unix_hot_lose(hot_u);

        free(hot_u);
        continue;
      }
      else {
        het_u = &(hot_u->nex_u);
      }
    }
  }

  //  update all ships
  {
    u2_uhot* hot_u;

    for ( hot_u = unx_u->hot_u; hot_u; hot_u = hot_u->nex_u ) {
      _unix_ship_update(hot_u);
    }
  }
}