int main( ) { struct airport a ; int i, pri, curtime, endtime ; double expectarrive, expectdepart ; struct plane temp ; system ( "cls" ) ; initairport ( &a ); start ( &endtime, &expectarrive, &expectdepart ) ; for ( curtime = 1 ; curtime <= endtime ; curtime++ ) { pri = randomnumber ( expectarrive ) ; for ( i = 1 ; i <= pri ; i++ ) { newplane ( &a, curtime, ARRIVE ) ; if ( apfull ( a, 'l' ) ) refuse ( &a, ARRIVE ) ; else apaddqueue( &a, 'l' ) ; } pri = randomnumber ( expectdepart ) ; for ( i = 1 ; i <= pri ; i++ ) { newplane ( &a, curtime, DEPART ) ; if ( apfull ( a, 't' ) ) refuse ( &a, DEPART ) ; else apaddqueue ( &a, 't' ) ; } if ( ! ( apempty ( a, 'l' ) ) ) { temp = apdelqueue ( &a, 'l' ) ; land ( &a, temp, curtime ) ; } else { if ( ! ( apempty ( a, 't' ) ) ) { temp = apdelqueue ( &a, 't' ) ; fly ( &a, temp, curtime ) ; } else idle ( &a, curtime ) ; } } conclude ( &a, endtime ) ; return 0 ; }
static int xnftw_callback(const char *fpath, const struct stat *sb, int typeflag, struct FTW *ftwbuf) { enter; fatal(xnftw_context.xfn, fpath, sb, typeflag, ftwbuf, xnftw_context.arg); int R = 0; finally : conclude(&R); if(R == 0) return FTW_CONTINUE; return FTW_STOP; };
int main() { enter; xapi R = 0; fatal(test_basic); success; finally: if(XAPI_UNWINDING) { xapi_backtrace(); } conclude(&R); xapi_teardown(); return !!R; }
static int xnftw_nth_callback(const char *fpath, const struct stat *sb, int typeflag, struct FTW *ftwbuf) { enter_nochecks; if(ftwbuf->level == xnftw_nth_context.level) fatal(xnftw_nth_context.xfn, fpath, sb, typeflag, ftwbuf, xnftw_nth_context.arg); xapi R; finally : conclude(&R); if(R == 0) { if(ftwbuf->level == xnftw_nth_context.level) return FTW_SKIP_SUBTREE; // process only nth-level files else return FTW_CONTINUE; } return FTW_STOP; };
static int xqsort_compar(const void * A, const void * B, void * arg) { enter_nochecks; struct xqsort_context * ctx = arg; int r = 0; if(!ctx->hasfailed) fatal(ctx->xcompar, A, B, ctx->arg, &r); int R = 0; finally : conclude(&R); if(R) { ctx->hasfailed = 1; r = 0; } return r; };
int main(int argc, char ** argv, char ** envp) { enter; xapi R = 0; fatal(xmain_load, envp); finally: if(XAPI_UNWINDING) { // write failures before liblogger to stderr xapi_backtrace(); } conclude(&R); xapi_teardown(); R |= xmain_exit; return !!R; }
int main(int argc, char** argv, char ** envp) { enter; xapi R = 0; char space[512]; char * fabw_path = 0; const command * cmd = 0; memblk * mb = 0; fab_client * client = 0; fab_request * request = 0; int fd = -1; size_t tracesz = 0; // libraries fatal(fab_load); fatal(logger_load); fatal(valyria_load); fatal(narrator_load); fatal(xlinux_load); xapi_errtab_register(perrtab_MAIN); // logging fatal(logging_setup); fatal(logger_arguments_setup, envp); fatal(logger_finalize); // modules fatal(params_setup); fatal(params_report); fatal(sigbank_setup, "fab"); // parse cmdline arguments fatal(args_parse, &cmd); fatal(args_report, cmd); // ensure fabd can write to my stdout/stderr fatal(xfchmod, 1, 0777); fatal(xfchmod, 2, 0777); #if DEVEL snprintf(space, sizeof(space), "%s/../fabw/fabw.devel", g_params.exedir); fabw_path = space; #endif fatal(fab_client_create, &client, ".", XQUOTE(FABIPCDIR), fabw_path); #if DEBUG || DEVEL logs(L_IPC, "started"); #endif #if 0 // possibly kill the existing fabd instance, if any if(changed credentials) fatal(client_terminate); #endif fatal(fab_client_prepare, client); fatal(fab_client_launchp, client); fatal(memblk_mk, &mb); fatal(args_collate, cmd, mb, &request); fatal(fab_client_make_request, client, mb, request); finally: #if DEBUG || DEVEL if(log_would(L_IPC)) { xapi_infos("name", "fab"); xapi_infof("pid", "%ld", (long)getpid()); if(client) xapi_infos("hash", fab_client_gethash(client)); } #endif if(XAPI_UNWINDING) { if(XAPI_ERRVAL == FAB_FABDEXIT || XAPI_ERRVAL == FAB_UNSUCCESS) { // on orderly shutdown fabd has already backtraced to our stdout } else { #if DEBUG || DEVEL || XAPI tracesz = xapi_trace_full(space, sizeof(space)); #else tracesz = xapi_trace_pithy(space, sizeof(space)); #endif xlogw(L_ERROR, L_RED, space, tracesz); } if(XAPI_ERRVAL == MAIN_BADARGS) { fatal(args_usage, cmd, 0, 0); } } // locals fatal(ixclose, &fd); fatal(fab_client_dispose, &client); memblk_free(mb); // module teardown sigbank_teardown(); params_teardown(); fatal(build_command_cleanup); // libraries fatal(fab_unload); fatal(logger_unload); fatal(valyria_unload); fatal(narrator_unload); fatal(xlinux_unload); conclude(&R); xapi_teardown(); return !!R; }