From: Gao Xiang <hsiangkao@linux.alibaba.com>
To: Norbert Lange <nolange79@gmail.com>, linux-erofs@lists.ozlabs.org
Cc: Huang Jianan <huangjianan@oppo.com>
Subject: Re: [PATCH] erofs-utils: Provide identical functionality without libuuid
Date: Sun, 2 Jul 2023 19:07:23 +0800 [thread overview]
Message-ID: <b737bdff-9f90-e8cc-84b5-a6ee24ef291b@linux.alibaba.com> (raw)
In-Reply-To: <20230702101907.5081-1-nolange79@gmail.com>
Hi Norbert,
On 2023/7/2 18:19, Norbert Lange wrote:
> The motivation is to have standalone (statically linked) erofs binaries
> for simple initrd images, that are nevertheless able to (re)create
> erofs images with a given UUID.
>
> For this reason a few of libuuid functions have implementations added
> directly in erofs-utils.
> A header liberofs_uuid.h provides the new functions, which are
> always available. A further sideeffect is that code can be simplified
> which calls into this functionality.
>
> The uuid_unparse function replacement is always a private
> implementation and split into its own file, this further restricts
> the (optional) dependency on libuuid only to the erofs-mkfs tool.
>
> Signed-off-by: Norbert Lange <nolange79@gmail.com>
Yeah, overall it looks good to me, some minor nits as below:
(Also currently UUID makes the image nonreproducable, I wonder if we
could use some image hash to calculate the whole UUID instead...)
> ---
> dump/Makefile.am | 2 +-
> dump/main.c | 8 +---
> fsck/Makefile.am | 2 +-
> lib/Makefile.am | 4 +-
> lib/liberofs_uuid.h | 9 ++++
> lib/uuid.c | 106 ++++++++++++++++++++++++++++++++++++++++++++
> lib/uuid_unparse.c | 21 +++++++++
> mkfs/Makefile.am | 6 +--
> mkfs/main.c | 21 ++-------
> 9 files changed, 149 insertions(+), 30 deletions(-)
> create mode 100644 lib/liberofs_uuid.h
> create mode 100644 lib/uuid.c
> create mode 100644 lib/uuid_unparse.c
>
> diff --git a/dump/Makefile.am b/dump/Makefile.am
> index c2bef6d..90227a5 100644
> --- a/dump/Makefile.am
> +++ b/dump/Makefile.am
> @@ -7,4 +7,4 @@ AM_CPPFLAGS = ${libuuid_CFLAGS}
> dump_erofs_SOURCES = main.c
> dump_erofs_CFLAGS = -Wall -I$(top_srcdir)/include
> dump_erofs_LDADD = $(top_builddir)/lib/liberofs.la ${libselinux_LIBS} \
> - ${libuuid_LIBS} ${liblz4_LIBS} ${liblzma_LIBS}
> + ${liblz4_LIBS} ${liblzma_LIBS}
> diff --git a/dump/main.c b/dump/main.c
> index bc4e028..40af09f 100644
> --- a/dump/main.c
> +++ b/dump/main.c
> @@ -17,10 +17,8 @@
> #include "erofs/compress.h"
> #include "erofs/fragments.h"
> #include "../lib/liberofs_private.h"
> +#include "../lib/liberofs_uuid.h"
>
> -#ifdef HAVE_LIBUUID
> -#include <uuid.h>
> -#endif
>
> struct erofsdump_cfg {
> unsigned int totalshow;
> @@ -620,9 +618,7 @@ static void erofsdump_show_superblock(void)
> if (feat & feature_lists[i].flag)
> fprintf(stdout, "%s ", feature_lists[i].name);
> }
> -#ifdef HAVE_LIBUUID
> - uuid_unparse_lower(sbi.uuid, uuid_str);
> -#endif
> + erofs_uuid_unparse_lower(sbi.uuid, uuid_str);
> fprintf(stdout, "\nFilesystem UUID: %s\n",
> uuid_str);
> }
> diff --git a/fsck/Makefile.am b/fsck/Makefile.am
> index e6a1fb6..4176d86 100644
> --- a/fsck/Makefile.am
> +++ b/fsck/Makefile.am
> @@ -7,4 +7,4 @@ AM_CPPFLAGS = ${libuuid_CFLAGS}
> fsck_erofs_SOURCES = main.c
> fsck_erofs_CFLAGS = -Wall -I$(top_srcdir)/include
> fsck_erofs_LDADD = $(top_builddir)/lib/liberofs.la ${libselinux_LIBS} \
> - ${libuuid_LIBS} ${liblz4_LIBS} ${liblzma_LIBS}
> + ${liblz4_LIBS} ${liblzma_LIBS}
> diff --git a/lib/Makefile.am b/lib/Makefile.am
> index faa7311..e243c1c 100644
> --- a/lib/Makefile.am
> +++ b/lib/Makefile.am
> @@ -29,9 +29,9 @@ noinst_HEADERS += compressor.h
> liberofs_la_SOURCES = config.c io.c cache.c super.c inode.c xattr.c exclude.c \
> namei.c data.c compress.c compressor.c zmap.c decompress.c \
> compress_hints.c hashmap.c sha256.c blobchunk.c dir.c \
> - fragments.c rb_tree.c dedupe.c
> + fragments.c rb_tree.c dedupe.c uuid_unparse.c uuid.c
>
> -liberofs_la_CFLAGS = -Wall -I$(top_srcdir)/include
> +liberofs_la_CFLAGS = -Wall ${libuuid_CFLAGS} -I$(top_srcdir)/include
> if ENABLE_LZ4
> liberofs_la_CFLAGS += ${LZ4_CFLAGS}
> liberofs_la_SOURCES += compressor_lz4.c
> diff --git a/lib/liberofs_uuid.h b/lib/liberofs_uuid.h
> new file mode 100644
> index 0000000..d156699
> --- /dev/null
> +++ b/lib/liberofs_uuid.h
> @@ -0,0 +1,9 @@
> +/* SPDX-License-Identifier: GPL-2.0+ OR Apache-2.0 */
> +#ifndef __EROFS_LIB_UUID_H
> +#define __EROFS_LIB_UUID_H
> +
> +void erofs_uuid_generate(unsigned char *out);
> +void erofs_uuid_unparse_lower(const unsigned char *buf, char *out);
> +int erofs_uuid_parse(const char *in, unsigned char *uu);
> +
> +#endif
> \ No newline at end of file
> diff --git a/lib/uuid.c b/lib/uuid.c
> new file mode 100644
> index 0000000..acff81a
> --- /dev/null
> +++ b/lib/uuid.c
> @@ -0,0 +1,106 @@
> +// SPDX-License-Identifier: GPL-2.0+ OR Apache-2.0
> +/*
> + * Copyright (C) 2023 Norbert Lange <nolange79@gmail.com>
> + */
> +
> +#include <string.h>
> +#include <errno.h>
> +
> +#include "erofs/config.h"
> +#include "erofs/defs.h"
> +#include "liberofs_uuid.h"
> +
> +#ifdef HAVE_LIBUUID
> +#include <uuid.h>
> +#else
> +
> +#include <stdlib.h>
> +#include <sys/random.h>
> +
> +/* Flags to be used, will be modified if kernel does not support them */
> +static unsigned erofs_grnd_flag =
Could we switch to "unsigned int" for this?
> +#ifdef GRND_INSECURE
> + GRND_INSECURE;
> +#else
> + 0x0004;
> +#endif
> +
> +static int s_getrandom(void *pUid, unsigned size, bool insecure)
> +{
> + unsigned kflags = erofs_grnd_flag;
> + unsigned flags = insecure ? kflags : 0;
same here.
Otherwise it looks good to me.
Thanks,
Gao Xiang
next prev parent reply other threads:[~2023-07-02 11:07 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-02 10:19 [PATCH] erofs-utils: Provide identical functionality without libuuid Norbert Lange
2023-07-02 11:07 ` Gao Xiang [this message]
2023-07-02 22:16 ` Norbert Lange
2023-07-03 3:03 ` Gao Xiang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=b737bdff-9f90-e8cc-84b5-a6ee24ef291b@linux.alibaba.com \
--to=hsiangkao@linux.alibaba.com \
--cc=huangjianan@oppo.com \
--cc=linux-erofs@lists.ozlabs.org \
--cc=nolange79@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.