1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-22 17:35:59 +03:00

Add dm_snprintf

This commit is contained in:
Alasdair Kergon 2006-08-21 12:52:39 +00:00
parent a93fe79bc4
commit 8d98b02ba2
4 changed files with 30 additions and 1 deletions

View File

@ -1,6 +1,6 @@
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

View File

@ -111,3 +111,4 @@ dm_set_selinux_context
dm_task_set_geometry
dm_split_lvm_name
dm_split_words
dm_snprintf

View File

@ -17,6 +17,7 @@
#define LIB_DEVICE_MAPPER_H
#include <inttypes.h>
#include <stdarg.h>
#include <sys/types.h>
#ifdef linux
@ -601,4 +602,9 @@ int dm_split_words(char *buffer, unsigned max,
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 */

View File

@ -99,3 +99,25 @@ int dm_split_lvm_name(struct dm_pool *mem, const char *dmname,
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;
}