make_ext4fs: explicitly call setlocale() before creating image
authorWojtek Porczyk <woju@invisiblethingslab.com>
Wed, 2 Dec 2015 15:08:01 +0000 (16:08 +0100)
committerJo-Philipp Wich <jow@openwrt.org>
Wed, 2 Dec 2015 16:05:03 +0000 (17:05 +0100)
The alphasort(3) function, which is used as comparison function for
scandir(3) is locale dependent (at least in glibc, in which it defers to
strcoll(3)). This patch explicitly calls setlocale(3), setting the
locale to "C".

Currently, there are no other calls to setlocale(), so this does not
change the behaviour. However, we'd like to be sure that in the future
no-one will break that.

Signed-off-by: Wojtek Porczyk <woju@invisiblethingslab.com>
make_ext4fs.c

index cb181617797db10f8c2a575dc500e5f86bfdb678..dd4d0d3f301ab45d2135d28e5af5ce47ac3919ad 100644 (file)
@@ -33,6 +33,7 @@
 #include <unistd.h>
 #include <sys/stat.h>
 #include <sys/types.h>
+#include <locale.h>
 
 /* TODO: Not implemented:
    Allocating blocks in the same block group as the file inode
@@ -66,6 +67,9 @@ static u32 build_directory_structure(const char *full_path, const char *dir_path
        u32 dirs = 0;
        bool needs_lost_and_found = false;
 
+       /* alphasort is locale-dependent; let's fix the locale to some sane value */
+       setlocale(LC_COLLATE, "C");
+
        if (full_path) {
                entries = scandir(full_path, &namelist, filter_dot, (void*)alphasort);
                if (entries < 0) {