Ignore:
Timestamp:
Jun 18, 2017, 10:06:41 PM (7 years ago)
Author:
alain
Message:

Introduce syscalls.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/kernel/syscalls/sys_close.c

    r11 r23  
    11/*
    2  * sys_close.c  close a process open file
     2 * sys_close.c  close an open file
    33 *
    4  * Copyright (c) 2008,2009,2010,2011,2012 Ghassan Almaless
    5  * Copyright (c) 2011,2012 UPMC Sorbonne Universites
     4 * Author    Alain Greiner (2016,2017)
    65 *
    7  * This file is part of ALMOS-kernel.
     6 * Copyright (c) UPMC Sorbonne Universites
    87 *
    9  * ALMOS-kernel is free software; you can redistribute it and/or modify it
     8 * This file is part of ALMOS-MKH.
     9 *
     10 * ALMOS-MKH is free software; you can redistribute it and/or modify it
    1011 * under the terms of the GNU General Public License as published by
    1112 * the Free Software Foundation; version 2.0 of the License.
    1213 *
    13  * ALMOS-kernel is distributed in the hope that it will be useful, but
     14 * ALMOS-MKH is distributed in the hope that it will be useful, but
    1415 * WITHOUT ANY WARRANTY; without even the implied warranty of
    1516 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     
    1718 *
    1819 * You should have received a copy of the GNU General Public License
    19  * along with ALMOS-kernel; if not, write to the Free Software Foundation,
     20 * along with ALMOS-MKH; if not, write to the Free Software Foundation,
    2021 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
    2122 */
    2223
    23 #include <cpu.h>
    24 #include <chdev.h>
    25 #include <driver.h>
     24#include <kernel_config.h>
     25#include <hal_types.h>
     26#include <hal_special.h>
    2627#include <vfs.h>
    27 #include <sys-vfs.h>
    2828#include <process.h>
    2929#include <thread.h>
    30 #include <config.h>
     30#include <printk.h>
    3131
    32 /////////////////////////////
    33 int sys_close ( uint32_t fd )
     32//////////////////////////////////
     33int sys_close ( uint32_t file_id )
    3434{
    35         register process_t * process = current_process;
    36         register thread_t  * this    = current_thread;
    37         struct vfs_file_s  * file    = NULL;
    38         error_t              err;
    39  
    40         if(( fd >= CONFIG_TASK_FILE_MAX_NR ) || (process_fd_lookup( process , fd , &file )))
     35    error_t     error;
     36    xptr_t      file_xp;
     37
     38        thread_t  * this    = CURRENT_THREAD;
     39        process_t * process = this->process;
     40
     41    // check file_id argument
     42        if( file_id >= CONFIG_PROCESS_FILE_MAX_NR )
    4143        {
    42                 this->info.errno = EBADFD;
     44        printk("\n[ERROR] in %s : illegal file descriptor index = %d\n",
     45               __FUNCTION__ , file_id );
     46                this->errno = EBADFD;
    4347                return -1;
    4448        }
    4549
    46         err = vfs_close( file , NULL );
    47         if( err )
     50    // get extended pointer on remote file descriptor
     51    file_xp = process_fd_get_xptr( process , file_id );
     52
     53    if( file_xp == XPTR_NULL )
     54    {
     55        printk("\n[ERROR] in %s : undefined file descriptor = %d\n",
     56               __FUNCTION__ , file_id );
     57                this->errno = EBADFD;
     58                return -1;
     59    }
     60
     61    // call the relevant VFS function
     62        error = vfs_close( file_xp , file_id );
     63
     64        if( error )
    4865        {
    49                 this->info.errno = err;
     66        printk("\n[ERROR] in %s : cannot close file descriptor = %d\n",
     67               __FUNCTION__ , file_id );
     68                this->errno = error;
    5069                return -1;
    5170        }
    5271
    53         process_fd_release( process , fd );
    54         cpu_wbflush();
     72        hal_wbflush();
     73
    5574        return 0;
    5675}
Note: See TracChangeset for help on using the changeset viewer.