Sync up the test harnesses; add error checks to the UUdecode utility
This commit is contained in:
1 parent
cdf9f0e1e6
commit
02e017d635
4 files changed
+186
-23
No files matched your search
+57
-7
@@ -131,11 +131,13 @@
|
||||
|
||||
/* Path to working directory for current test */
|
||||
const char *testworkdir;
|
||||
#ifdef PROGRAM
|
||||
/* Pathname of exe to be tested. */
|
||||
const char *testprogfile;
|
||||
/* Name of exe to use in printf-formatted command strings. */
|
||||
/* On Windows, this includes leading/trailing quotes. */
|
||||
const char *testprog;
|
||||
#endif
|
||||
|
||||
#if defined(_WIN32) && !defined(__CYGWIN__)
|
||||
static void *GetFunctionKernel32(const char *);
|
||||
@@ -572,10 +574,10 @@ static void strdump(const char *e, const char *p, int ewidth, int utf8)
|
||||
while (*p != '\0') {
|
||||
unsigned int c = 0xff & *p++;
|
||||
switch (c) {
|
||||
case '\a': printf("\a"); break;
|
||||
case '\b': printf("\b"); break;
|
||||
case '\n': printf("\n"); break;
|
||||
case '\r': printf("\r"); break;
|
||||
case '\a': logprintf("\\a"); break;
|
||||
case '\b': logprintf("\\b"); break;
|
||||
case '\n': logprintf("\\n"); break;
|
||||
case '\r': logprintf("\\r"); break;
|
||||
default:
|
||||
if (c >= 32 && c < 127)
|
||||
logprintf("%c", c);
|
||||
@@ -1068,7 +1070,8 @@ assertion_file_contains_lines_any_order(const char *file, int line,
|
||||
free(expected);
|
||||
return (0);
|
||||
}
|
||||
for (j = 0, p = buff; p < buff + buff_size; p += 1 + strlen(p)) {
|
||||
for (j = 0, p = buff; p < buff + buff_size;
|
||||
p += 1 + strlen(p)) {
|
||||
if (*p != '\0') {
|
||||
actual[j] = p;
|
||||
++j;
|
||||
@@ -1919,6 +1922,18 @@ canGzip(void)
|
||||
/*
|
||||
* Can this platform run the lrzip program?
|
||||
*/
|
||||
int
|
||||
canRunCommand(const char *cmd)
|
||||
{
|
||||
static int tested = 0, value = 0;
|
||||
if (!tested) {
|
||||
tested = 1;
|
||||
if (systemf("%s %s", cmd, redirectArgs) == 0)
|
||||
value = 1;
|
||||
}
|
||||
return (value);
|
||||
}
|
||||
|
||||
int
|
||||
canLrzip(void)
|
||||
{
|
||||
@@ -2158,8 +2173,31 @@ slurpfile(size_t * sizep, const char *fmt, ...)
|
||||
return (p);
|
||||
}
|
||||
|
||||
/*
|
||||
* Slurp a file into memory for ease of comparison and testing.
|
||||
* Returns size of file in 'sizep' if non-NULL, null-terminates
|
||||
* data in memory for ease of use.
|
||||
*/
|
||||
void
|
||||
dumpfile(const char *filename, void *data, size_t len)
|
||||
{
|
||||
ssize_t bytes_written;
|
||||
FILE *f;
|
||||
|
||||
f = fopen(filename, "wb");
|
||||
if (f == NULL) {
|
||||
logprintf("Can't open file %s for writing\n", filename);
|
||||
return;
|
||||
}
|
||||
bytes_written = fwrite(data, 1, len, f);
|
||||
if (bytes_written < (ssize_t)len)
|
||||
logprintf("Can't write file %s\n", filename);
|
||||
fclose(f);
|
||||
}
|
||||
|
||||
/* Read a uuencoded file from the reference directory, decode, and
|
||||
* write the result into the current directory. */
|
||||
#define VALID_UUDECODE(c) (c >= 32 && c <= 96)
|
||||
#define UUDECODE(c) (((c) - 0x20) & 0x3f)
|
||||
void
|
||||
extract_reference_file(const char *name)
|
||||
@@ -2183,7 +2221,6 @@ extract_reference_file(const char *name)
|
||||
break;
|
||||
}
|
||||
/* Now, decode the rest and write it. */
|
||||
/* Not a lot of error checking here; the input better be right. */
|
||||
out = fopen(name, "wb");
|
||||
while (fgets(buff, sizeof(buff), in) != NULL) {
|
||||
char *p = buff;
|
||||
@@ -2197,17 +2234,21 @@ extract_reference_file(const char *name)
|
||||
int n = 0;
|
||||
/* Write out 1-3 bytes from that. */
|
||||
if (bytes > 0) {
|
||||
assert(VALID_UUDECODE(p[0]));
|
||||
assert(VALID_UUDECODE(p[1]));
|
||||
n = UUDECODE(*p++) << 18;
|
||||
n |= UUDECODE(*p++) << 12;
|
||||
fputc(n >> 16, out);
|
||||
--bytes;
|
||||
}
|
||||
if (bytes > 0) {
|
||||
assert(VALID_UUDECODE(p[0]));
|
||||
n |= UUDECODE(*p++) << 6;
|
||||
fputc((n >> 8) & 0xFF, out);
|
||||
--bytes;
|
||||
}
|
||||
if (bytes > 0) {
|
||||
assert(VALID_UUDECODE(p[0]));
|
||||
n |= UUDECODE(*p++);
|
||||
fputc(n & 0xFF, out);
|
||||
--bytes;
|
||||
@@ -2262,6 +2303,14 @@ is_LargeInode(const char *file)
|
||||
return (ino > 0xffffffff);
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
extract_reference_files(const char **names)
|
||||
{
|
||||
while (names && *names)
|
||||
extract_reference_file(*names++);
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
* TEST management
|
||||
@@ -2333,7 +2382,7 @@ test_run(int i, const char *tmpdir)
|
||||
case VERBOSITY_SUMMARY_ONLY: /* No per-test reports at all */
|
||||
break;
|
||||
case VERBOSITY_PASSFAIL: /* rest of line will include ok/FAIL marker */
|
||||
printf("%3d: %-50s", i, tests[i].name);
|
||||
printf("%3d: %-64s", i, tests[i].name);
|
||||
fflush(stdout);
|
||||
break;
|
||||
default: /* Title of test, details will follow */
|
||||
@@ -2526,6 +2575,7 @@ get_refdir(const char *d)
|
||||
failure:
|
||||
printf("Unable to locate known reference file %s\n", KNOWNREF);
|
||||
printf(" Checked following directories:\n%s\n", tried);
|
||||
printf("Use -r option to specify full path to reference directory\n");
|
||||
#if defined(_WIN32) && !defined(__CYGWIN__) && defined(_DEBUG)
|
||||
DebugBreak();
|
||||
#endif
|
||||
|
||||
Reference in new issue
Block a user