static int do_close(int fd) { int rval = -1; fdinfo_t *info = NULL; if( fd < 0 ) { errno = EINVAL; return -1; } DEBUG("do_close(%d, ...) ...", fd); L(); info = fd_lookup(fd); if( info == NULL ) { U(); rval = libc.close(fd); DEBUG("do_close(%d) => %d (no info)", fd, rval); return rval; } rval = info_close(fd, info); impl_exit_check(); U(); DEBUG("do_close(%d) => %d (%d tracked)", fd, rval, total_tracked); return rval; }
static int do_dup3(int fd, int fd2, int flags) { int rval = -1; fdinfo_t *info = NULL; fdinfo_t *info2 = NULL; if( fd < 0 || fd2 < 0 ) { errno = EINVAL; return -1; } DEBUG("do_dup3(%d, %d, ...) ...", fd, fd2); L(); if( fd == fd2 ) { U(); DEBUG("do_dup3(%d, %d, ...) => 0", fd, fd2); return fd2; } info = fd_lookup(fd); info2 = fd_lookup(fd2); if( info2 != NULL ) { rval = info_close(fd2, info2); if( rval < 0 ) { U(); DEBUG("do_dup3(%d, %d, ...) => %d (close failed)", fd, fd2, rval); return rval; } } rval = libc.dup3(fd, fd2, flags); if( rval < 0 ) { U(); DEBUG("do_dup3(%d, %d, ...) => %d (dup3 failed)", fd, fd2, rval); return rval; } if( info != NULL ) { inc_ref(info); fd_save(fd2, info); } U(); DEBUG("do_dup3(%d, %d, ...) => %d", fd, fd2, rval); return rval; }
/** * @brief Opens the information menu. */ void menu_info( int window ) { int w, h; /* Not under manual control. */ if (pilot_isFlag( player.p, PILOT_MANUAL_CONTROL )) return; /* Open closes when previously opened. */ if (menu_isOpen(MENU_INFO) || dialogue_isOpen()) { info_close( 0, NULL ); return; } /* Dimensions. */ w = 600; h = 500; /* Create the window. */ info_wid = window_create( "Info", -1, -1, w, h ); window_setCancel( info_wid, info_close ); /* Create tabbed window. */ info_windows = window_addTabbedWindow( info_wid, -1, -1, -1, -1, "tabInfo", INFO_WINDOWS, info_names ); /* Open the subwindows. */ info_openMain( info_windows[ INFO_WIN_MAIN ] ); info_openShip( info_windows[ INFO_WIN_SHIP ] ); info_openWeapons( info_windows[ INFO_WIN_WEAP ] ); info_openCargo( info_windows[ INFO_WIN_CARGO ] ); info_openMissions( info_windows[ INFO_WIN_MISN ] ); info_openStandings( info_windows[ INFO_WIN_STAND ] ); menu_Open(MENU_INFO); /* Set active window. */ window_tabWinSetActive( info_wid, "tabInfo", CLAMP( 0, 5, window ) ); }