Ignore:
Timestamp:
Jul 31, 2017, 2:46:50 PM (5 years ago)
Author:
max@…
Message:

Style, and use hal_strcpy_from_uspace.

File:
1 edited

Legend:

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

    r23 r305  
    11/*
    22 * sys_open.c - open a file.
    3  * 
     3 *
    44 * Author        Alain Greiner (2016,2017)
    55 *
     
    3838               uint32_t   mode )
    3939{
    40 
    41         error_t        error;
    42         xptr_t         file_xp;                          // extended pointer on vfs_file_t
    43         uint32_t       file_id;                          // file descriptor index
    44     uint32_t       length;                           // pathname length (bytes)
     40    error_t        error;
     41    xptr_t         file_xp;                          // extended pointer on vfs_file_t
     42    uint32_t       file_id;                          // file descriptor index
    4543    char           kbuf[CONFIG_VFS_MAX_PATH_LENGTH];
    4644
    47         thread_t     * this     = CURRENT_THREAD;
    48         process_t    * process  = this->process;
    49 
    50         if( pathname == NULL )
    51         {
    52         printk("\n[ERROR] in %s : pathname is NULL\n", __FUNCTION__ );
    53                 this->errno = EINVAL;
    54                 return -1;
    55         }       
     45    thread_t     * this     = CURRENT_THREAD;
     46    process_t    * process  = this->process;
    5647
    5748    // check fd_array not full
    58         if( process_fd_array_full() )
    59         {
     49    if( process_fd_array_full() )
     50    {
    6051        printk("\n[ERROR] in %s : file descriptor array full for process %x\n",
    6152               __FUNCTION__ , process->pid );
    62                 this->errno = ENFILE;
     53        this->errno = ENFILE;
    6354        return -1;
    64         }
    65    
    66     // get pathname length
    67     length = hal_strlen_from_uspace( pathname );
     55    }
    6856
    69     if( length >= CONFIG_VFS_MAX_PATH_LENGTH )
     57    // get pathname copy in kernel space
     58    error = hal_strcpy_from_uspace( kbuf , pathname , CONFIG_VFS_MAX_PATH_LENGTH );
     59
     60    if( error )
    7061    {
    7162        printk("\n[ERROR] in %s : pathname too long\n", __FUNCTION__ );
    72                 this->errno = ENFILE;
     63        this->errno = ENFILE;
    7364        return -1;
    7465    }
    75  
    76         // get pathname copy in kernel space
    77     hal_copy_from_uspace( kbuf, pathname, length );
    7866
    7967    // get cluster and local pointer on reference process
     
    8472    // get extended pointer on cwd inode
    8573    xptr_t cwd_xp = hal_remote_lwd( XPTR( ref_cxy , &ref_ptr->vfs_cwd_xp ) );
    86    
     74
    8775    // get the cwd lock in read mode from reference process
    88         remote_rwlock_rd_lock( XPTR( ref_cxy , &ref_ptr->cwd_lock ) );
     76    remote_rwlock_rd_lock( XPTR( ref_cxy , &ref_ptr->cwd_lock ) );
    8977
    9078    // call the relevant VFS function
    91         error = vfs_open( cwd_xp,
     79    error = vfs_open( cwd_xp,
    9280                      kbuf,
    9381                      flags,
     
    9785
    9886    // release the cwd lock
    99         remote_rwlock_rd_unlock( XPTR( ref_cxy , &ref_ptr->cwd_lock ) );
     87    remote_rwlock_rd_unlock( XPTR( ref_cxy , &ref_ptr->cwd_lock ) );
    10088
    101         if( error )
    102         {
     89    if( error )
     90    {
    10391        printk("\n[ERROR] in %s : cannot create file descriptor\n", __FUNCTION__ );
    104                 this->errno = ENFILE;
    105             return -1;
    106         }
     92        this->errno = ENFILE;
     93        return -1;
     94    }
    10795
    10896    // update local fd_array
    10997    remote_spinlock_lock( XPTR( local_cxy , &process->fd_array.lock ) );
    110         process->fd_array.array[file_id] = file_xp;
     98    process->fd_array.array[file_id] = file_xp;
    11199    remote_spinlock_unlock( XPTR( local_cxy , &process->fd_array.lock ) );
    112100
    113         return file_id;
     101    return file_id;
    114102}
Note: See TracChangeset for help on using the changeset viewer.