示例#1
0
文件: impl.c 项目: Hochikong/huptime
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;
}
示例#2
0
文件: impl.c 项目: Hochikong/huptime
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;
}
示例#3
0
文件: info.c 项目: Jazzkovsky/naev
/**
 * @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 ) );
}