Changeset 23 for trunk/kernel/syscalls/sys_creat.c
- Timestamp:
- Jun 18, 2017, 10:06:41 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/kernel/syscalls/sys_creat.c
r1 r23 1 1 /* 2 * kern/sys_creat.c - create a file2 * sys_creat.c - create a file 3 3 * 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 6 7 * 7 8 * This file is part of ALMOS-kernel. … … 21 22 */ 22 23 23 #include < config.h>24 #include <hal_types.h> 24 25 #include <vfs.h> 25 #include <sys-vfs.h> 26 #include <spinlock.h> 27 #include <process.h> 28 #include <thread.h> 26 #include <syscalls.h> 29 27 30 28 //////////////////////////////////// 31 int sys_creat 32 29 int sys_creat( char * pathname, 30 uint32_t mode ) 33 31 { 34 CPU_HW_TRACE(sys_creat);32 uint32_t flags = O_CREAT; 35 33 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 ); 76 35 }
Note: See TracChangeset
for help on using the changeset viewer.