URL
https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk
Subversion Repositories openrisc_me
[/] [openrisc/] [trunk/] [gnu-src/] [newlib-1.18.0/] [newlib/] [libc/] [stdio/] [flags.c] - Rev 258
Go to most recent revision | Compare with Previous | Blame | View Log
/* * 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. */ /* No user fns here. Pesch 15apr92 */ #include <_ansi.h> #include <stdio.h> #include <time.h> #include <fcntl.h> #include <errno.h> #include <sys/types.h> /* * 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 _DEFUN(__sflags, (ptr, mode, optr), struct _reent *ptr _AND register char *mode _AND 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[1] == '+' || mode[2] == '+')) { ret = (ret & ~(__SRD | __SWR)) | __SRW; m = O_RDWR; } if (mode[1] && (mode[1] == 'b' || mode[2] == 'b')) { #ifdef O_BINARY m |= O_BINARY; #endif } #ifdef __CYGWIN__ else if (mode[1] && (mode[1] == 't' || mode[2] == 't')) #else else #endif { #ifdef O_TEXT m |= O_TEXT; #endif } *optr = m | o; return ret; }
Go to most recent revision | Compare with Previous | Blame | View Log