Differences From Artifact [946463e8bc]:
- File src/OFFile.m — part of check-in [da6b3d26cb] at 2011-01-01 20:19:54 on branch trunk — Change license. (user: js, size: 14723) [annotate] [blame] [check-ins using]
To Artifact [00f92e27f7]:
- File
src/OFFile.m
— part of check-in
[17338ef1d5]
at
2011-02-01 14:27:31
on branch trunk
— Add of_log for easy logging to stderr.
Uses OFConstantString* for the format to prevent users from doing stupid
things like of_log([of_stdin readLine]). (user: js, size: 15273) [annotate] [blame] [check-ins using]
︙ | ︙ | |||
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | * file. */ #include "config.h" #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <dirent.h> #ifndef _WIN32 # include <pwd.h> # include <grp.h> #endif #import "OFFile.h" #import "OFString.h" #import "OFArray.h" #ifdef OF_THREADS # import "OFThread.h" #endif #import "OFDate.h" #import "OFAutoreleasePool.h" #import "OFExceptions.h" #import "macros.h" #ifdef _WIN32 # import <windows.h> #endif | > > | 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | * file. */ #include "config.h" #include <stdio.h> #include <string.h> #include <stdarg.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <dirent.h> #ifndef _WIN32 # include <pwd.h> # include <grp.h> #endif #import "OFFile.h" #import "OFString.h" #import "OFArray.h" #ifdef OF_THREADS # import "OFThread.h" #endif #import "OFDate.h" #import "OFApplication.h" #import "OFAutoreleasePool.h" #import "OFExceptions.h" #import "macros.h" #ifdef _WIN32 # import <windows.h> #endif |
︙ | ︙ | |||
98 99 100 101 102 103 104 105 106 107 108 109 110 111 | if (!strcmp(mode, "a+")) return O_RDWR | O_CREAT | O_APPEND; if (!strcmp(mode, "ab+") || !strcmp(mode, "a+b")) return O_RDWR | O_CREAT | O_APPEND | O_BINARY; return -1; } @interface OFFileSingleton: OFFile @end @implementation OFFile + (void)load { | > > > > > > > > > > > > > > > > > > > > | 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | if (!strcmp(mode, "a+")) return O_RDWR | O_CREAT | O_APPEND; if (!strcmp(mode, "ab+") || !strcmp(mode, "a+b")) return O_RDWR | O_CREAT | O_APPEND | O_BINARY; return -1; } void of_log(OFConstantString *fmt, ...) { OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; OFString *date, *me, *msg; va_list args; date = [[OFDate date] localDateStringWithFormat: @"%Y-%m-%dT%H:%M:%S"]; me = [OFFile lastComponentOfPath: [OFApplication programName]]; va_start(args, fmt); msg = [[[OFString alloc] initWithFormat: fmt arguments: args] autorelease]; va_end(args); [of_stderr writeFormat: @"[%@ %@(%d)] %@\n", date, me, getpid(), msg]; [pool release]; } @interface OFFileSingleton: OFFile @end @implementation OFFile + (void)load { |
︙ | ︙ |