Ignore:
Timestamp:
Jul 31, 2017, 2:36:48 PM (7 years ago)
Author:
max@…
Message:

Style, and use hal_strcpy_from_uspace.

File:
1 edited

Legend:

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

    r23 r302  
    11/*
    22 * sys_chmod.c - Change file access rights.
    3  * 
     3 *
    44 * Author    Alain Greiner  (2016,2017)
    55 *
     
    3535{
    3636    error_t     error;
    37     paddr_t     paddr;
    38     uint32_t    length;
    3937    char        kbuf[CONFIG_VFS_MAX_PATH_LENGTH];
    40        
    41         thread_t  * this    = CURRENT_THREAD;
    42         process_t * process = this->process;
    4338
    44     // check pathname in user space
    45     error = vmm_v2p_translate( false , pathname , &paddr );
     39    thread_t  * this    = CURRENT_THREAD;
     40    process_t * process = this->process;
    4641
    47         if( error )
    48         {
    49         printk("\n[ERROR] in %s : user pathname unmapped for thread %x in process %x\n",
    50                __FUNCTION__ , this->trdid , process->pid );
    51                 this->errno = EINVAL;
    52                 return -1;
    53         }       
     42    // get pathname copy in kernel space
     43    error = hal_strcpy_from_uspace( kbuf , pathname , CONFIG_VFS_MAX_PATH_LENGTH );
    5444
    55     // get pathname length
    56     length = hal_strlen_from_uspace( pathname );
    57 
    58     if( length >= CONFIG_VFS_MAX_PATH_LENGTH )
     45    if( error )
    5946    {
    6047        printk("\n[ERROR] in %s : pathname too long\n", __FUNCTION__ );
    61                 this->errno = ENFILE;
     48        this->errno = ENFILE;
    6249        return -1;
    6350    }
    64  
    65         // get pathname copy in kernel space
    66     hal_copy_from_uspace( kbuf, pathname, length );
    6751
    6852    // get cluster and local pointer on reference process
     
    7357    // get extended pointer on cwd inode
    7458    xptr_t cwd_xp = hal_remote_lwd( XPTR( ref_cxy , &ref_ptr->vfs_cwd_xp ) );
    75    
     59
    7660    // get the cwd lock in read mode from reference process
    77         remote_rwlock_rd_lock( XPTR( ref_cxy , &ref_ptr->cwd_lock ) );
     61    remote_rwlock_rd_lock( XPTR( ref_cxy , &ref_ptr->cwd_lock ) );
    7862
    7963    // call the relevant VFS function
    80         error = vfs_chmod( cwd_xp,
     64    error = vfs_chmod( cwd_xp,
    8165                       kbuf,
    8266                       rights );
    8367
    8468    // release the cwd lock
    85         remote_rwlock_rd_unlock( XPTR( ref_cxy , &ref_ptr->cwd_lock ) );
     69    remote_rwlock_rd_unlock( XPTR( ref_cxy , &ref_ptr->cwd_lock ) );
    8670
    8771    if( error )
    88         {
     72    {
    8973        printk("\n[ERROR] in %s : cannot remove directory %s\n",
    9074               __FUNCTION__ , kbuf );
    91                 this->errno = error;
    92                 return -1;
    93         }
    94    
    95         return 0;
     75        this->errno = error;
     76        return -1;
     77    }
    9678
    97 }  // end sys_chmod()   
     79    return 0;
     80
     81}  // end sys_chmod()
Note: See TracChangeset for help on using the changeset viewer.