The resulting environment was dependend of the build machines' filesystem, i.e. the order in which readdir returns dirents depends on the filesystem implementation. Use the new flag in scripts/bareboxenv.c for generating a reproducible built-in environment. Signed-off-by: Florian Bäuerle <florian.baeuerle@xxxxxxxxxxxx> --- common/environment.c | 8 ++++++-- include/envfs.h | 1 + scripts/bareboxenv.c | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/common/environment.c b/common/environment.c index 56a030eda..cea55f313 100644 --- a/common/environment.c +++ b/common/environment.c @@ -257,6 +257,7 @@ int envfs_save(const char *filename, const char *dirname, unsigned flags) void *buf = NULL, *wbuf; struct envfs_entry *env; const char *defenv_path = default_environment_path_get(); + int recursive_flags = ACTION_RECURSE; if (!filename) filename = defenv_path; @@ -276,10 +277,13 @@ int envfs_save(const char *filename, const char *dirname, unsigned flags) if (flags & ENVFS_FLAGS_FORCE_BUILT_IN) { size = 0; /* force no content */ } else { + if (flags & ENVFS_FLAGS_SORTED) + recursive_flags |= ACTION_SORT; + /* first pass: calculate size */ - recursive_action(dirname, ACTION_RECURSE, file_action, + recursive_action(dirname, recursive_flags, file_action, NULL, &data, 0); - recursive_action("/.defaultenv", ACTION_RECURSE, + recursive_action("/.defaultenv", recursive_flags, file_remove_action, NULL, &data, 0); size = 0; diff --git a/include/envfs.h b/include/envfs.h index 27c4b42c6..fa12c60a8 100644 --- a/include/envfs.h +++ b/include/envfs.h @@ -45,6 +45,7 @@ struct envfs_super { uint16_t future; /* reserved for future use */ uint32_t flags; /* feature flags */ #define ENVFS_FLAGS_FORCE_BUILT_IN (1 << 0) +#define ENVFS_FLAGS_SORTED (1 << 1) uint32_t sb_crc; /* crc for the superblock */ }; diff --git a/scripts/bareboxenv.c b/scripts/bareboxenv.c index e95bdeaa5..c27e78e94 100644 --- a/scripts/bareboxenv.c +++ b/scripts/bareboxenv.c @@ -136,7 +136,7 @@ int main(int argc, char *argv[]) int opt; int save = 0, load = 0, pad = 0, err = 0, fd; char *filename = NULL, *dirname = NULL; - unsigned envfs_flags = 0; + unsigned envfs_flags = ENVFS_FLAGS_SORTED; int verbose = 0; while((opt = getopt(argc, argv, "slp:vz")) != -1) { -- 2.19.2 _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox