142 |
142 |
143 return 0; |
143 return 0; |
144 } |
144 } |
145 |
145 |
146 void log_uninitialized_writeln(char *str, size_t len) { |
146 void log_uninitialized_writeln(char *str, size_t len) { |
|
147 printf("%.*s\n", (int)len, str); |
|
148 |
147 if(ui_buffer == NULL) { |
149 if(ui_buffer == NULL) { |
148 ui_buffer = sbuf_new(1024); |
150 ui_buffer = sbuf_new(1024); |
149 if(ui_buffer == NULL) { |
151 if(ui_buffer == NULL) { |
150 return; /* TODO: critical error, exit */ |
152 return; /* TODO: critical error, exit */ |
151 } |
153 } |
160 } |
162 } |
161 |
163 |
162 void log_file_writeln(char *str, size_t len) { |
164 void log_file_writeln(char *str, size_t len) { |
163 if(!is_initialized) { |
165 if(!is_initialized) { |
164 log_uninitialized_writeln(str, len); |
166 log_uninitialized_writeln(str, len); |
|
167 return; |
165 } |
168 } |
166 |
169 |
167 struct iovec io[] = { |
170 struct iovec io[] = { |
168 { str, len }, |
171 { str, len }, |
169 { "\n", 1} |
172 { "\n", 1} |
170 }; |
173 }; |
171 |
174 |
172 writev(log_file_fd, io, 2); /* TODO: aio */ |
175 writev(log_file_fd, io, 2); /* TODO: aio? */ |
173 if(!main_is_daemon()) { |
176 if(!main_is_daemon()) { |
174 writev(STDOUT_FILENO, io, 2); |
177 writev(STDOUT_FILENO, io, 2); |
175 } |
178 } |
176 } |
179 } |
177 |
180 |