/* 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))); }
/* 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); } } }
/* 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); } } }