From f95a4a932476be2ba99e2fd081e8d2bc6ea12813 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 15 Dec 2017 09:38:53 -0500 Subject: Import newlib and create makefile --- newlib/libc/stdio/flags.c | 83 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 newlib/libc/stdio/flags.c (limited to 'newlib/libc/stdio/flags.c') diff --git a/newlib/libc/stdio/flags.c b/newlib/libc/stdio/flags.c new file mode 100644 index 0000000..82e9f29 --- /dev/null +++ b/newlib/libc/stdio/flags.c @@ -0,0 +1,83 @@ +/* No user fns here. Pesch 15apr92 */ + +/* + * Copyright (c) 1990 Regents of the University of California. + * All rights reserved. + * + * Redistribution and use in source and binary forms are permitted + * provided that the above copyright notice and this paragraph are + * duplicated in all such forms and that any documentation, + * advertising materials, and other materials related to such + * distribution and use acknowledge that the software was developed + * by the University of California, Berkeley. The name of the + * University may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ + +#include +#include +#include + +#include +#include + +/* + * Return the (stdio) flags for a given mode. Store the flags + * to be passed to an open() syscall through *optr. + * Return 0 on error. + */ + +int +__sflags (ptr, mode, optr) + struct _reent *ptr; + register char *mode; + int *optr; +{ + register int ret, m, o; + + switch (mode[0]) + { + case 'r': /* open for reading */ + ret = __SRD; + m = O_RDONLY; + o = 0; + break; + + case 'w': /* open for writing */ + ret = __SWR; + m = O_WRONLY; + o = O_CREAT | O_TRUNC; + break; + + case 'a': /* open for appending */ + ret = __SWR | __SAPP; + m = O_WRONLY; + o = O_CREAT | O_APPEND; + break; + default: /* illegal mode */ + ptr->_errno = EINVAL; + return (0); + } + if (mode[1] == '+' || mode[2] == '+') + { + ret = __SRW; + m = O_RDWR; + } + if (mode[1] == 'b' || mode[2] == 'b') + { +#ifdef O_BINARY + m |= O_BINARY; +#endif + } + else if (mode[1] == 't' || mode[2] == 't') + { +#ifdef O_TEXT + m |= O_TEXT; +#endif + } + *optr = m | o; + return ret; +} -- cgit v1.2.3