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

Introduce syscalls.

File:
1 edited

Legend:

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

    r1 r23  
    11/*
    2  * kern/sys_opendir.c - open a directory
     2 * sys_opendir.c - open a 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>
    25 #include <process.h>
    26 #include <thread.h>
    27 #include <spinlock.h>
     26#include <syscalls.h>
    2827
    2928///////////////////////////////////
    3029int sys_opendir ( char * pathname )
    3130{
    32         error_t             err;
    33         struct vfs_file_s   file;
    34         struct ku_obj       ku_path;
    35         thread_t          * this    = current_thread;
    36         process_t         * process = current_process;
    37         uint32_t            fd        = (uint32_t)-1;
    38         uint32_t            mode      = 0;
    39    
    40         if( process_fd_array_full( process ) )
    41         {
    42                 this->info.errno = ENFILE;
    43             return fd;
    44         }
     31        uint32_t   mode  = 0;
     32    uint32_t   flags = O_DIR;
    4533
    46         KU_BUFF(ku_path, pathname);
    47 
    48         rwlock_rdlock( &process->cwd_lock );
    49 
    50         err = vfs_opendir( &process->vfs_cwd , &ku_path , mode , &file );
    51         if( err )
    52         {
    53                 this->info.errno = (err < 0 ) ? -err : err;
    54             rwlock_unlock( &process->cwd_lock );
    55             return fd;
    56         }
    57 
    58         err = process_fd_set( process , &file , &fd);
    59         if( err )
    60         {
    61                 vfs_close(&file, NULL);
    62                 this->info.errno = err;
    63         }
    64    
    65         rwlock_unlock( &process->cwd_lock );
    66         return fd;
     34    return sys_open( pathname , flags , mode );
    6735}
Note: See TracChangeset for help on using the changeset viewer.