Make the internal assertion correct--only fail when '\0' is found in

places other than the end of the test section. Otherwise, with kernel
compiled with Clang which happens to be setting ELF section alignment
differently config(8) was throwing assert() failure unnecessarily

Reported by:	Kimmo Paasiala <kpaasial (at) gmail.com>
Tested by:	Kimmo Paasiala <kpaasial (at) gmail.com>
MFC after:	10 days
This commit is contained in:
Wojciech A. Koszek 2013-05-01 05:14:59 +00:00
parent 7a48925d12
commit 7002629c49
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=250133

View File

@ -706,17 +706,11 @@ kernconfdump(const char *file)
r = fgetc(fp);
if (r == EOF)
break;
/*
* If '\0' is present in the middle of the configuration
* string, this means something very weird is happening.
* Make such case very visible. However, some architectures
* pad the length of the section with NULs to a multiple of
* sh_addralign, allow a NUL in that part of the section.
*/
if (r == '\0' && (size - i) < align)
if (r == '\0') {
assert(i == size - 1 &&
("\\0 found in the middle of a file"));
break;
assert(r != '\0' && ("Char present in the configuration "
"string mustn't be equal to 0"));
}
fputc(r, stdout);
}
fclose(fp);