1*10465441SEvalZero /* 2*10465441SEvalZero * Copyright (c) 2006-2018, RT-Thread Development Team 3*10465441SEvalZero * 4*10465441SEvalZero * SPDX-License-Identifier: Apache-2.0 5*10465441SEvalZero * 6*10465441SEvalZero * Change Logs: 7*10465441SEvalZero * Date Author Notes 8*10465441SEvalZero * 2015-01-28 Bernard first version 9*10465441SEvalZero */ 10*10465441SEvalZero 11*10465441SEvalZero #include <rtthread.h> 12*10465441SEvalZero #include <yfuns.h> 13*10465441SEvalZero #ifdef RT_USING_DFS 14*10465441SEvalZero #include <dfs_posix.h> 15*10465441SEvalZero #endif 16*10465441SEvalZero 17*10465441SEvalZero #pragma module_name = "?__open" 18*10465441SEvalZero __open(const char * filename,int mode)19*10465441SEvalZeroint __open(const char *filename, int mode) 20*10465441SEvalZero { 21*10465441SEvalZero #ifndef RT_USING_DFS 22*10465441SEvalZero return _LLIO_ERROR; 23*10465441SEvalZero #else 24*10465441SEvalZero int handle; 25*10465441SEvalZero int open_mode = O_RDONLY; 26*10465441SEvalZero 27*10465441SEvalZero if (mode & _LLIO_CREAT) 28*10465441SEvalZero { 29*10465441SEvalZero open_mode |= O_CREAT; 30*10465441SEvalZero 31*10465441SEvalZero /* Check what we should do with it if it exists. */ 32*10465441SEvalZero if (mode & _LLIO_APPEND) 33*10465441SEvalZero { 34*10465441SEvalZero /* Append to the existing file. */ 35*10465441SEvalZero open_mode |= O_APPEND; 36*10465441SEvalZero } 37*10465441SEvalZero 38*10465441SEvalZero if (mode & _LLIO_TRUNC) 39*10465441SEvalZero { 40*10465441SEvalZero /* Truncate the existsing file. */ 41*10465441SEvalZero open_mode |= O_TRUNC; 42*10465441SEvalZero } 43*10465441SEvalZero } 44*10465441SEvalZero 45*10465441SEvalZero if (mode & _LLIO_TEXT) 46*10465441SEvalZero { 47*10465441SEvalZero /* we didn't support text mode */ 48*10465441SEvalZero } 49*10465441SEvalZero 50*10465441SEvalZero switch (mode & _LLIO_RDWRMASK) 51*10465441SEvalZero { 52*10465441SEvalZero case _LLIO_RDONLY: 53*10465441SEvalZero break; 54*10465441SEvalZero 55*10465441SEvalZero case _LLIO_WRONLY: 56*10465441SEvalZero open_mode |= O_WRONLY; 57*10465441SEvalZero break; 58*10465441SEvalZero 59*10465441SEvalZero case _LLIO_RDWR: 60*10465441SEvalZero /* The file should be opened for both reads and writes. */ 61*10465441SEvalZero open_mode |= O_RDWR; 62*10465441SEvalZero break; 63*10465441SEvalZero 64*10465441SEvalZero default: 65*10465441SEvalZero return _LLIO_ERROR; 66*10465441SEvalZero } 67*10465441SEvalZero 68*10465441SEvalZero handle = open(filename, open_mode, 0); 69*10465441SEvalZero if (handle < 0) 70*10465441SEvalZero return _LLIO_ERROR; 71*10465441SEvalZero 72*10465441SEvalZero return handle; 73*10465441SEvalZero #endif 74*10465441SEvalZero } 75