diff --git a/lib/misc/lvm-string.c b/lib/misc/lvm-string.c index 4034b405d..d96d43194 100644 --- a/lib/misc/lvm-string.c +++ b/lib/misc/lvm-string.c @@ -290,3 +290,27 @@ char *first_substring(const char *str, ...) return r; } + +/* Cut suffix (if present) and write the name into NAME_LEN sized new_name buffer + * When suffix is NULL, everythin past the last '_' is removed. + * Returns 1 when suffix was removed, 0 otherwise. + */ +int drop_lvname_suffix(char *new_name, const char *name, const char *suffix) +{ + char *c; + + if (!dm_strncpy(new_name, name, NAME_LEN)) { + log_debug(INTERNAL_ERROR "Name is too long."); + return 0; + } + + if (!(c = strrchr(new_name, '_'))) + return 0; + + if (suffix && strcmp(c + 1, suffix)) + return 0; + + *c = 0; /* remove suffix */ + + return 1; +} diff --git a/lib/misc/lvm-string.h b/lib/misc/lvm-string.h index 4e7404a8d..5d2f95a73 100644 --- a/lib/misc/lvm-string.h +++ b/lib/misc/lvm-string.h @@ -57,5 +57,6 @@ int is_reserved_lvname(const char *name); * first match or else NULL. */ char *first_substring(const char *str, ...); +int drop_lvname_suffix(char *new_name, const char *name, const char *suffix); #endif