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

    r1 r23  
    11/*
    2  * kern/sys_creat.c - create a file
     2 * sys_creat.c - create a file
    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)
     5 *
     6 * Copyright (c) UPMC Sorbonne Universites
    67 *
    78 * This file is part of ALMOS-kernel.
     
    2122 */
    2223
    23 #include <config.h>
     24#include <hal_types.h>
    2425#include <vfs.h>
    25 #include <sys-vfs.h>
    26 #include <spinlock.h>
    27 #include <process.h>
    28 #include <thread.h>
     26#include <syscalls.h>
    2927
    3028////////////////////////////////////
    31 int sys_creat ( char     * pathname,
    32                 uint32_t   mode )
     29int sys_creat( char     * pathname,
     30               uint32_t   mode )
    3331{
    34         CPU_HW_TRACE(sys_creat);
     32        uint32_t    flags = O_CREAT;
    3533
    36         register error_t     err;
    37         register uint32_t    flags;
    38         register thread_t  * this    = durrent_thread;
    39         register process_t * process = current_process;
    40         struct vfs_file_s    file;
    41         struct ku_obj        ku_path;
    42         uint32_t             fd      = (uint32_t)-1;
    43    
    44         if( process_fd_array_full( process ) )
    45         {
    46                 this->info.errno = ENFILE;
    47             CPU_HW_TRACE(sys_creat);
    48         return fd;
    49         }
    50 
    51         flags = 0;
    52         KU_BUFF( ku_path , pathname );
    53 
    54     // get the cwd lock
    55         rwlock_rdlock( &process->cwd_lock );
    56 
    57         err = vfs_create( &process->vfs_cwd , &ku_path , flags , mode , &file );
    58         if( err )
    59         {
    60                 this->info.errno = (err < 0 ) ? -err : err;
    61             rwlock_unlock( &process->cwd_lock );
    62             CPU_HW_TRACE(sys_creat);
    63             return fd;
    64         }
    65 
    66         err = process_fd_set( process , &file , &fd );
    67         if( err )
    68         {
    69                 vfs_close( &file , NULL );
    70                 this->info.errno = err;
    71         }
    72 
    73         rwlock_unlock( &process->cwd_lock );
    74         CPU_HW_TRACE(sys_creat);
    75         return fd;
     34    return sys_open( pathname , flags , mode );
    7635}
Note: See TracChangeset for help on using the changeset viewer.