|
DataMuseum.dkPresents historical artifacts from the history of: Commodore CBM-900 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Commodore CBM-900 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 1096 (0x448) Types: TextFile Notes: UNIX file Names: »_fopen.c«
└─⟦f27320a65⟧ Bits:30001972 Commodore 900 hard disk image with partial source code └─⟦f4b8d8c84⟧ UNIX Filesystem └─⟦this⟧ »libc/stdio/_fopen.c«
/* * Standard I/O Library Internals * Open file */ #include <stdio.h> #define CRMODE 0666 /* default access permissions on create */ FILE * _fopen(name, type, fp, fd) char *name, *type; register FILE *fp; register int fd; { extern int _fginit(); extern int _fpinit(); register int mode = 1; int truncate = 0, append = 0; { register char c = *type++; char cn = 'r'; if (c=='r') { mode = 0; cn = 'w'; } else if (c=='w') truncate++; else if (c=='a') append++; else return (NULL); if ((c=*type)=='\0' || c=='b') ; else if (c=='+' || c==cn) mode = 2; else return (NULL); } if (fd<0 && !truncate) fd = open(name, mode); if (fd<0 && (truncate || append) && (fd=creat(name, CRMODE))>=0 && mode!=1) { close(fd); fd = open(name, mode); } if (fd<0) return (NULL); if (append) lseek(fd, 0L, 2); if (fp==NULL && (fp = (FILE *) malloc(sizeof(FILE)))==NULL) { close(fd); return (NULL); } fp->_ff = _FINUSE; fp->_bp = fp->_cp = fp->_dp = NULL; fp->_cc = 0; fp->_gt = &_fginit; fp->_pt = &_fpinit; fp->_fd = fd; return (fp); }