diff --git a/lib/libperfuse/fuse.h b/lib/libperfuse/fuse.h index a0d5c68f3df5..aeb4d92e6578 100644 --- a/lib/libperfuse/fuse.h +++ b/lib/libperfuse/fuse.h @@ -1,4 +1,4 @@ -/* $NetBSD: fuse.h,v 1.6 2014/10/31 15:12:15 manu Exp $ */ +/* $NetBSD: fuse.h,v 1.7 2016/10/18 17:56:31 christos Exp $ */ /*- * Copyright (c) 2010 Emmanuel Dreyfus. All rights reserved. @@ -34,8 +34,8 @@ #define FUSE_UNKNOWN_FH (uint64_t)0 #ifndef FUSE_BUFSIZE -#define FUSE_MIN_BUFSIZE 0x21000 -#define FUSE_PREF_BUFSIZE (sysconf(_SC_PAGESIZE) + 0x1000) +#define FUSE_MIN_BUFSIZE ((size_t)0x21000) +#define FUSE_PREF_BUFSIZE ((size_t)(sysconf(_SC_PAGESIZE) + 0x1000)) #define FUSE_BUFSIZE MAX(FUSE_PREF_BUFSIZE /* CONSTCOND */, FUSE_MIN_BUFSIZE) #endif /* FUSE_BUFSIZE */ diff --git a/lib/libperfuse/perfuse.c b/lib/libperfuse/perfuse.c index 611483407ed9..27436d4b1182 100644 --- a/lib/libperfuse/perfuse.c +++ b/lib/libperfuse/perfuse.c @@ -1,4 +1,4 @@ -/* $NetBSD: perfuse.c,v 1.38 2016/10/18 15:06:17 manu Exp $ */ +/* $NetBSD: perfuse.c,v 1.39 2016/10/18 17:56:31 christos Exp $ */ /*- * Copyright (c) 2010-2011 Emmanuel Dreyfus. All rights reserved. @@ -32,6 +32,7 @@ #include #include #include +#include #include #include #include @@ -51,7 +52,7 @@ extern char **environ; static struct perfuse_state *init_state(void); static int get_fd(const char *); -static uint32_t bufvar_from_env(const char *, const uint32_t); +static uint32_t bufvar_from_env(const char *, uint32_t); static struct perfuse_state * @@ -148,32 +149,22 @@ get_fd(const char *data) } static uint32_t -bufvar_from_env(name, defval) - const char *name; - const uint32_t defval; +bufvar_from_env(const char *name, uint32_t defval) { char valstr[1024]; - uint32_t retval = defval; + int e; + uint32_t retval; - if (getenv_r(name, valstr, sizeof(valstr)) != -1) { - long int val; - char *ep; + if (getenv_r(name, valstr, sizeof(valstr)) == -1) + return defval; - errno = 0; - val = (int)strtol(valstr, &ep, 10); - if (*valstr == '\0' || *ep != '\0') - DWARNX("bad %s value \"%s\"", name, valstr); - else if (errno != 0) - DWARN("bad %s value \"%s\"", name, valstr); - else if (val <= 0L || - (unsigned long int)val > (unsigned long int)UINT32_MAX) - DWARNX("%s value %ld out of " - "uint32_t bounds", name, val); - else - retval = val; - } + retval = (uint32_t)strtoi(valstr, NULL, 0, 0, UINT32_MAX, &e); + if (!e) + return retval; - return retval; + DWARNC(e, "conversion from `%s' to uint32_t failed, using %u", + valstr, defval); + return defval; } int @@ -213,7 +204,7 @@ perfuse_open(const char *path, int flags, mode_t mode) * Set a buffer lentgh large enough so that enough FUSE packets * will fit. */ - opt = bufvar_from_env("PERFUSE_BUFSIZE", 16 * FUSE_BUFSIZE); + opt = bufvar_from_env("PERFUSE_BUFSIZE", (uint32_t)(16 * FUSE_BUFSIZE)); optlen = sizeof(opt); if (setsockopt(sv[0], SOL_SOCKET, SO_SNDBUF, &opt, optlen) != 0) DWARN("%s: setsockopt SO_SNDBUF to %d failed", __func__, opt); @@ -244,7 +235,7 @@ perfuse_open(const char *path, int flags, mode_t mode) * Set a buffer lentgh large enough so that enough FUSE packets * will fit. */ - opt = bufvar_from_env("PERFUSE_BUFSIZE", 16 * FUSE_BUFSIZE); + opt = bufvar_from_env("PERFUSE_BUFSIZE", (uint32_t)(16 * FUSE_BUFSIZE)); optlen = sizeof(opt); if (setsockopt(sv[0], SOL_SOCKET, SO_SNDBUF, &opt, optlen) != 0) DWARN("%s: setsockopt SO_SNDBUF to %d failed", __func__, opt); diff --git a/lib/libperfuse/perfuse_if.h b/lib/libperfuse/perfuse_if.h index ec871f825792..56ff82af62ff 100644 --- a/lib/libperfuse/perfuse_if.h +++ b/lib/libperfuse/perfuse_if.h @@ -1,4 +1,4 @@ -/* $NetBSD: perfuse_if.h,v 1.20 2012/07/21 05:49:42 manu Exp $ */ +/* $NetBSD: perfuse_if.h,v 1.21 2016/10/18 17:56:31 christos Exp $ */ /*- * Copyright (c) 2010-2011 Emmanuel Dreyfus. All rights reserved. @@ -103,13 +103,20 @@ extern int perfuse_diagflags; } while (0 /* CONSTCOND */) #define DWARN(fmt, ...) do { \ - \ if (perfuse_diagflags & PDF_SYSLOG) \ syslog(LOG_WARNING, fmt ": %m", ## __VA_ARGS__); \ \ warn(fmt, ## __VA_ARGS__); \ } while (0 /* CONSTCOND */) +#define DWARNC(e, fmt, ...) do { \ + if (perfuse_diagflags & PDF_SYSLOG) { \ + errno = e; \ + syslog(LOG_WARNING, fmt ": %m", ## __VA_ARGS__); \ + } \ + warnc(e, fmt, ## __VA_ARGS__); \ +} while (0 /* CONSTCOND */) + /* * frame handling callbacks */