test-dir-iterator: do not assume errno values

A few tests printed 'errno' as an integer and compared with
hardcoded integers; this is obviously not portable.

A two things to note are:

 - the string obtained by strerror() is not portable, and cannot be
   used for the purpose of these tests.

 - there unfortunately isn't a portable way to map error numbers to
   error names.

As we only care about a few selected errors, just map the error
number to the name before emitting for comparison.

Reported-by: Randall S. Becker <rsbecker@nexbridge.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Junio C Hamano
2019-07-30 10:45:48 -07:00
parent c4d9c506f7
commit 9042140097
2 changed files with 12 additions and 3 deletions

View File

@ -4,6 +4,15 @@
#include "iterator.h"
#include "dir-iterator.h"
static const char *error_name(int error_number)
{
switch (error_number) {
case ENOENT: return "ENOENT";
case ENOTDIR: return "ENOTDIR";
default: return "ESOMETHINGELSE";
}
}
/*
* usage:
* tool-test dir-iterator [--follow-symlinks] [--pedantic] directory_path
@ -31,7 +40,7 @@ int cmd__dir_iterator(int argc, const char **argv)
diter = dir_iterator_begin(path.buf, flags);
if (!diter) {
printf("dir_iterator_begin failure: %d\n", errno);
printf("dir_iterator_begin failure: %s\n", error_name(errno));
exit(EXIT_FAILURE);
}