Ignore:
Timestamp:
Nov 7, 2017, 3:08:12 PM (5 years ago)
Author:
alain
Message:

First implementation of fork/exec.

File:
1 edited

Legend:

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

    r23 r407  
    3131#include <process.h>
    3232#include <syscalls.h>
     33#include <shared_syscalls.h>
    3334
    34 //////////////////////////////////////////
    35 int sys_readdir ( uint32_t       file_id,
    36                   vfs_dirent_t * dirent )
     35///////////////////////////////////////
     36int sys_readdir( DIR            * dirp,
     37                 struct dirent ** dentp )
    3738{
    38         error_t        error;
    39     paddr_t        paddr;
    40         xptr_t         file_xp;    // extended pointer on searched directory file descriptor
    41     vfs_dirent_t   k_dirent;   // kernel copy of dirent
    42 
    43         thread_t     * this     = CURRENT_THREAD;
    44         process_t    * process  = this->process;
    45 
    46     // check file_id argument
    47         if( file_id >= CONFIG_PROCESS_FILE_MAX_NR )
    48         {
    49         printk("\n[ERROR] in %s : illegal file descriptor index\n", __FUNCTION__ );
    50         this->errno = EBADFD;
    51                 return -1;
    52         }
    53 
    54     // check dirent structure in user space
    55     error = vmm_v2p_translate( false , dirent , &paddr );
    56 
    57     if ( error )
    58     {
    59         printk("\n[ERROR] in %s : user buffer for dirent unmapped = %x\n",
    60                __FUNCTION__ , (intptr_t)dirent );
    61                 this->errno = EFAULT;
    62                 return -1;
    63     }
    64 
    65     // get extended pointer on remote file descriptor
    66     file_xp = process_fd_get_xptr( process , file_id );
    67 
    68     if( file_xp == XPTR_NULL )
    69     {
    70         printk("\n[ERROR] in %s : undefined file descriptor index = %d\n",
    71                __FUNCTION__ , file_id );
    72             this->errno = EBADFD;
    73         return -1;
    74     }
    75  
    76     // call the relevant VFS function
    77         error = vfs_readdir( file_xp , &k_dirent );
    78 
    79         if( error )
    80         {
    81         printk("\n[ERROR] in %s : cannot access directory %d\n",
    82                __FUNCTION__ , file_id );
    83                 this->errno = error;
    84                 return -1;
    85         }
    86    
    87     // copy dirent to user space
    88     hal_copy_to_uspace( dirent , &k_dirent , sizeof(vfs_dirent_t) );
    89 
    90         return 0;
    91 
     39    printk("\n[ERROR] in %s : not implemented yet\n", __FUNCTION__ );
     40    CURRENT_THREAD->errno = ENOMEM;
     41    return -1;
    9242}  // end sys_readdir()
Note: See TracChangeset for help on using the changeset viewer.