- if (logfp)
- fclose(logfp);
- if ((logfp = fopen(name, "a")) == 0) {
- die(EXIT_FAILURE, "error opening logfile `%s': %s",
- name, strerror(errno));
+ FILE *fp;
+
+ if ((fp = fopen(name, "a")) != 0) {
+ if (logfp)
+ fclose(logfp);
+ logfp = fp;
+ setvbuf(logfp, 0, _IOLBF, BUFSIZ);
+ } else {
+ dstr d = DSTR_INIT;
+ dstr_putf(&d, "error opening logfile `%s': %s", name, strerror(errno));
+ if (logfp)
+ writelog("error", d.buf);
+ else if (logname)
+ die(EXIT_FAILURE, d.buf);
+ if (f & f_syslog)
+ syslog(LOG_ERR, d.buf);
+ dstr_destroy(&d);