diff mbox series

[v4,1/4] uuid: Add inline helpers to import / export UUIDs

Message ID 20200224153752.35063-2-andriy.shevchenko@linux.intel.com (mailing list archive)
State New, archived
Headers show
Series btrfs: bypass UUID API aliasing | expand

Commit Message

Andy Shevchenko Feb. 24, 2020, 3:37 p.m. UTC
Sometimes we may need to import UUID from or export to the raw buffer,
which is provided outside of kernel and can't be declared as UUID type.
With current API this operation will require an explicit casting
to one of UUID types and length, that is always a constant derived as sizeof
the certain UUID type.

Provide a helpful set of inline helpers to minimize developer's effort
in the cases when raw buffers are involved.

Suggested-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 include/linux/uuid.h | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

Comments

Christoph Hellwig Feb. 24, 2020, 5:41 p.m. UTC | #1
On Mon, Feb 24, 2020 at 05:37:49PM +0200, Andy Shevchenko wrote:
> Sometimes we may need to import UUID from or export to the raw buffer,
> which is provided outside of kernel and can't be declared as UUID type.
> With current API this operation will require an explicit casting
> to one of UUID types and length, that is always a constant derived as sizeof
> the certain UUID type.
> 
> Provide a helpful set of inline helpers to minimize developer's effort
> in the cases when raw buffers are involved.
> 
> Suggested-by: David Sterba <dsterba@suse.cz>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

No a huge fan of these trivial memcpy wrappers, but they also don't
seem entirely horrible:

Acked-by: Christoph Hellwig <hch@lst.de>
diff mbox series

Patch

diff --git a/include/linux/uuid.h b/include/linux/uuid.h
index 0c631e2a73b6..8e4a5000da03 100644
--- a/include/linux/uuid.h
+++ b/include/linux/uuid.h
@@ -43,6 +43,16 @@  static inline void guid_copy(guid_t *dst, const guid_t *src)
 	memcpy(dst, src, sizeof(guid_t));
 }
 
+static inline void import_guid(guid_t *dst, const __u8 *src)
+{
+	memcpy(dst, src, sizeof(guid_t));
+}
+
+static inline void export_guid(__u8 *dst, const guid_t *src)
+{
+	memcpy(dst, src, sizeof(guid_t));
+}
+
 static inline bool guid_is_null(const guid_t *guid)
 {
 	return guid_equal(guid, &guid_null);
@@ -58,6 +68,16 @@  static inline void uuid_copy(uuid_t *dst, const uuid_t *src)
 	memcpy(dst, src, sizeof(uuid_t));
 }
 
+static inline void import_uuid(uuid_t *dst, const __u8 *src)
+{
+	memcpy(dst, src, sizeof(uuid_t));
+}
+
+static inline void export_uuid(__u8 *dst, const uuid_t *src)
+{
+	memcpy(dst, src, sizeof(uuid_t));
+}
+
 static inline bool uuid_is_null(const uuid_t *uuid)
 {
 	return uuid_equal(uuid, &uuid_null);