Version 1.02.10 -
==============================
- Add dm_split_words() and dm_split_lvm_name() to libdevmapper.
+ Add dm_snprintf(), dm_split_words() and dm_split_lvm_name() to libdevmapper.
Reorder mm bounds_check code to reduce window for a dmeventd race.
Version 1.02.09 - 15 Aug 2006
dm_task_set_geometry
dm_split_lvm_name
dm_split_words
+dm_snprintf
#define LIB_DEVICE_MAPPER_H
#include <inttypes.h>
+#include <stdarg.h>
#include <sys/types.h>
#ifdef linux
unsigned ignore_comments, /* Not implemented */
char **argv);
+/*
+ * Returns -1 if buffer too small
+ */
+int dm_snprintf(char *buf, size_t bufsize, const char *format, ...);
+
#endif /* LIB_DEVICE_MAPPER_H */
return 1;
}
+
+/*
+ * On error, up to glibc 2.0.6, snprintf returned -1 if buffer was too small;
+ * From glibc 2.1 it returns number of chars (excl. trailing null) that would
+ * have been written had there been room.
+ *
+ * dm_snprintf reverts to the old behaviour.
+ */
+int dm_snprintf(char *buf, size_t bufsize, const char *format, ...)
+{
+ int n;
+ va_list ap;
+
+ va_start(ap, format);
+ n = vsnprintf(buf, bufsize, format, ap);
+ va_end(ap);
+
+ if (n < 0 || (n > bufsize - 1))
+ return -1;
+
+ return n;
+}