#include <sys/stat.h>
#include <fcntl.h>
#include <time.h>
+#include <errno.h>
void qword_add(char **bpp, int *lp, char *str)
{
char *bp = qword_buf;
int len = sizeof(qword_buf);
qword_add(&bp, &len, str);
- fwrite(qword_buf, bp-qword_buf, 1, f);
+ if (fwrite(qword_buf, bp-qword_buf, 1, f) != 1) {
+ xlog_warn("qword_print: fwrite failed: errno %d (%s)",
+ errno, strerror(errno));
+ }
}
void qword_printhex(FILE *f, char *str, int slen)
char *bp = qword_buf;
int len = sizeof(qword_buf);
qword_addhex(&bp, &len, str, slen);
- fwrite(qword_buf, bp-qword_buf, 1, f);
+ if (fwrite(qword_buf, bp-qword_buf, 1, f) != 1) {
+ xlog_warn("qword_printhex: fwrite failed: errno %d (%s)",
+ errno, strerror(errno));
+ }
}
void qword_printint(FILE *f, int num)
fprintf(f, "%d ", num);
}
+void qword_printuint(FILE *f, unsigned int num)
+{
+ fprintf(f, "%u ", num);
+}
+
int qword_eol(FILE *f)
{
int err;
fprintf(f,"\n");
err = fflush(f);
+ if (err) {
+ xlog_warn("qword_eol: fflush failed: errno %d (%s)",
+ errno, strerror(errno));
+ }
/*
* We must send one line (and one line only) in a single write
* call. In case of a write error, libc may accumulate the
* unwritten data and try to write it again later, resulting in a
* multi-line write. So we must explicitly ask it to throw away
- * any such cached data:
+ * any such cached data. But we return any original error
+ * indication to the caller.
*/
__fpurge(f);
- return fflush(f);
+ fflush(f);
+ return err;
}
return 0;
}
+int qword_get_uint(char **bpp, unsigned int *anint)
+{
+ char buf[50];
+ char *ep;
+ unsigned int rv;
+ int len = qword_get(bpp, buf, 50);
+ if (len < 0) return -1;
+ if (len ==0) return -1;
+ rv = strtoul(buf, &ep, 0);
+ if (*ep) return -1;
+ *anint = rv;
+ return 0;
+}
+
#define READLINE_BUFFER_INCREMENT 2048
int readline(int fd, char **buf, int *lenp)
int
check_new_cache(void)
{
- struct stat stb;
- return (stat("/proc/fs/nfs/filehandle", &stb) == 0) ||
- (stat("/proc/fs/nfsd/filehandle", &stb) == 0);
+ return (access("/proc/fs/nfs/filehandle", F_OK) == 0) ||
+ (access("/proc/fs/nfsd/filehandle", F_OK) == 0);
}
sprintf(path, "/proc/net/rpc/%s/flush", cachelist[c]);
fd = open(path, O_RDWR);
if (fd >= 0) {
- write(fd, stime, strlen(stime));
+ if (write(fd, stime, strlen(stime)) != (ssize_t)strlen(stime)) {
+ xlog_warn("Writing to '%s' failed: errno %d (%s)",
+ path, errno, strerror(errno));
+ }
close(fd);
}
}