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_closedir.c

    r1 r23  
    11/*
    2  * sys_closedir.c close a process open directory
     2 * sys_closedir.c - Close an open directory.
    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
     24#include <hal_types.h>
    2325#include <vfs.h>
    24 #include <sys-vfs.h>
    2526#include <thread.h>
     27#include <printk.h>
    2628#include <process.h>
    2729
    28 ////////////////////////////////
    29 int sys_closedir ( uint32_t fd )
     30/////////////////////////////////////
     31int sys_closedir ( uint32_t file_id )
    3032{
    31         register thread_t  * this    = current-thread;
    32         register process_t * process = current_process;
    33         struct vfs_file_s  * file    = NULL;
    34         error_t              err;
     33        error_t        error;
     34        xptr_t         file_xp;   // extended pointer on searched directory file descriptor
    3535
    36         if(( fd >= CONFIG_TASK_FILE_MAX_NR ) || (process_fd_lookup( process , fd , &file )))
     36        thread_t     * this     = CURRENT_THREAD;
     37        process_t    * process  = this->process;
     38
     39    // check file_id argument
     40        if( file_id >= CONFIG_PROCESS_FILE_MAX_NR )
    3741        {
    38                 this->info.errno = EBADFD;
     42        printk("\n[ERROR] in %s : illegal file descriptor index %d\n",
     43               __FUNCTION__ , file_id );
     44        this->errno = EBADFD;
    3945                return -1;
    4046        }
    4147
    42         err  = vfs_closedir( file , NULL );
    43         if(err)
     48    // get extended pointer on remote file descriptor
     49    file_xp = process_fd_get_xptr( process , file_id );
     50
     51    if( file_xp == XPTR_NULL )
     52    {
     53        printk("\n[ERROR] in %s : undefined file descriptor index = %d\n",
     54               __FUNCTION__ , file_id );
     55                this->errno = EBADFD;
     56                return -1;
     57    }
     58
     59    // call relevant VFS function
     60        error  = vfs_close( file_xp , file_id );
     61
     62        if( error )
    4463        {
    45                 this->info.errno = (err < 0) ? -err : err;
     64        printk("\n[ERROR] in %s : cannot close the directory = %d\n",
     65               __FUNCTION__ , file_id );
     66                this->errno = error;
    4667                return -1;
    4768        }
    4869
    49         process_fd_release( process , fd );
    5070        return 0;
    51 }
     71
     72}  // end sys_closedir()
Note: See TracChangeset for help on using the changeset viewer.