[lvm-devel] master - lvm-string: add drop_lvname_suffix
Zdenek Kabelac
zkabelac at sourceware.org
Mon Oct 21 13:33:03 UTC 2019
Gitweb: https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=766dedb62899f764ef75f21b17b86c0f17f9d009
Commit: 766dedb62899f764ef75f21b17b86c0f17f9d009
Parent: 2266a1863f048899dc6f54c4d62ae05b33605349
Author: Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate: Mon Oct 21 09:17:57 2019 +0200
Committer: Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Mon Oct 21 12:14:15 2019 +0200
lvm-string: add drop_lvname_suffix
Internal function to drop suffix out of lvname.
---
lib/misc/lvm-string.c | 24 ++++++++++++++++++++++++
lib/misc/lvm-string.h | 1 +
2 files changed, 25 insertions(+), 0 deletions(-)
diff --git a/lib/misc/lvm-string.c b/lib/misc/lvm-string.c
index 4034b40..d96d431 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 4e7404a..5d2f95a 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
More information about the lvm-devel
mailing list