-set(proxy_common_srcs proxy_link.c proxy_async.c proxy_log.c)
-set(libcephfsd_srcs libcephfsd.c proxy_manager.c proxy_mount.c proxy_helpers.c ${proxy_common_srcs})
+set(proxy_common_srcs proxy_helpers.c proxy_link.c proxy_async.c proxy_log.c)
+set(libcephfsd_srcs libcephfsd.c proxy_manager.c proxy_mount.c ${proxy_common_srcs})
set(libcephfs_proxy_srcs libcephfs_proxy.c ${proxy_common_srcs})
add_executable(libcephfsd ${libcephfsd_srcs})
return 0;
}
+
+int32_t proxy_snprintf(char *buffer, int32_t size, const char *fmt, ...)
+{
+ va_list args;
+ int32_t len;
+
+ va_start(args, fmt);
+ len = vsnprintf(buffer, size, fmt, args);
+ va_end(args);
+
+ if (len < 0) {
+ return proxy_log(LOG_ERR, errno, "vsnprintf() failed");
+ }
+
+ if (len >= size) {
+ return proxy_log(LOG_ERR, ENOBUFS,
+ "vsnprintf() truncated a string");
+ }
+
+ return len;
+}
int32_t proxy_hash_hex(char *digest, size_t size,
int32_t (*feed)(void **, void *, int32_t), void *data);
+int32_t proxy_snprintf(char *buffer, int32_t size, const char *fmt, ...);
+
#endif
memset(addr, 0, sizeof(*addr));
addr->sun_family = AF_UNIX;
- len = snprintf(addr->sun_path, sizeof(addr->sun_path), "%s", path);
+ len = proxy_snprintf(addr->sun_path, sizeof(addr->sun_path), "%s",
+ path);
if (len < 0) {
- return proxy_log(LOG_ERR, EINVAL,
- "Failed to copy Unix socket path");
- }
- if (len >= sizeof(addr->sun_path)) {
- return proxy_log(LOG_ERR, ENAMETOOLONG,
- "Unix socket path too long");
+ return len;
}
sd = socket(AF_UNIX, SOCK_STREAM, 0);
static int32_t proxy_config_destination_commit(int32_t fd, const char *name)
{
char path[32];
+ int32_t len;
if (fsync(fd) < 0) {
return proxy_log(LOG_ERR, errno, "fsync() failed");
* filesystem. */
}
- snprintf(path, sizeof(path), "/proc/self/fd/%d", fd);
+ len = proxy_snprintf(path, sizeof(path), "/proc/self/fd/%d", fd);
+ if (len < 0) {
+ return len;
+ }
+
if (linkat(AT_FDCWD, path, AT_FDCWD, name, AT_SYMLINK_FOLLOW) < 0) {
if (errno != EEXIST) {
return proxy_log(LOG_ERR, errno, "linkat() failed");
goto done_dst;
}
- err = snprintf(path, size, "ceph-%s.conf", hash);
+ err = proxy_snprintf(path, size, "ceph-%s.conf", hash);
if (err < 0) {
- err = proxy_log(LOG_ERR, errno, "snprintf() failed");
- goto done_dst;
- }
- if (err >= size) {
- err = proxy_log(LOG_ERR, ENOBUFS,
- "Insufficient space to store the name");
goto done_dst;
}