131 lines
3.3 KiB
C++
131 lines
3.3 KiB
C++
/*
|
|
* Copyright (C) 2017 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#include <fcntl.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <unistd.h>
|
|
|
|
#include "test_create_utils.h"
|
|
|
|
namespace android {
|
|
|
|
int readLine(FILE *inputFile, char *line, int size) {
|
|
int ret = 0;
|
|
while (true) {
|
|
char *str = fgets(line, size, inputFile);
|
|
if (str == nullptr) {
|
|
ret = -1;
|
|
break;
|
|
}
|
|
if (feof(inputFile) != 0 || ferror(inputFile) != 0) {
|
|
ret = -1;
|
|
break;
|
|
}
|
|
if (strlen(str) != 0 && str[0] != COMMENT_CHAR) {
|
|
break;
|
|
}
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
bool checkVersion(FILE *inputFile, const char *version)
|
|
{
|
|
char line[MAX_INPUT_FILE_LINE_LENGTH];
|
|
char versionKey[MAX_INPUT_FILE_LINE_LENGTH];
|
|
char versionValue[MAX_INPUT_FILE_LINE_LENGTH];
|
|
|
|
if (readLine(inputFile, line, MAX_INPUT_FILE_LINE_LENGTH) != 0) {
|
|
fprintf(stderr, "Missing version in input file\n");
|
|
return false;
|
|
}
|
|
|
|
if (sscanf(line, " %s %s", versionKey, versionValue) != 2) {
|
|
fprintf(stderr, "Malformed version in input file\n");
|
|
return false;
|
|
}
|
|
if (strcmp(versionKey, VERSION_KEY) != 0) {
|
|
fprintf(stderr, "Malformed version in input file\n");
|
|
return false;
|
|
}
|
|
if (strcmp(versionValue, version) != 0) {
|
|
fprintf(stderr, "Wrong input file version %s expecting %s\n", versionValue, version);
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
int main(int argc, char **argv, test_func_t testFunc)
|
|
{
|
|
FILE *inputFile = nullptr;
|
|
int outputFileFd = STDOUT_FILENO;
|
|
mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
|
|
int ret = 0;
|
|
|
|
if (argc > 5) {
|
|
fprintf(stderr, "Usage: %s [-i input_params.txt] [-o output_params.txt]\n", argv[0]);
|
|
return 1;
|
|
}
|
|
|
|
argv++;
|
|
while (*argv) {
|
|
if (strcmp(*argv, "-i") == 0) {
|
|
argv++;
|
|
if (*argv) {
|
|
inputFile = fopen(*argv, "r");
|
|
if (inputFile == nullptr) {
|
|
ret = 1;
|
|
}
|
|
} else {
|
|
ret = 1;
|
|
}
|
|
}
|
|
if (strcmp(*argv, "-o") == 0) {
|
|
argv++;
|
|
if (*argv) {
|
|
outputFileFd = open(*argv, O_WRONLY|O_CREAT, mode);
|
|
if (outputFileFd < 0) {
|
|
ret = 1;
|
|
}
|
|
} else {
|
|
ret = 1;
|
|
}
|
|
argv++;
|
|
}
|
|
if (*argv) {
|
|
argv++;
|
|
}
|
|
}
|
|
|
|
if (ret != 0) {
|
|
return ret;
|
|
}
|
|
|
|
ret = testFunc(inputFile, outputFileFd);
|
|
|
|
if (inputFile) {
|
|
fclose(inputFile);
|
|
}
|
|
if (outputFileFd >= 0 && outputFileFd != STDOUT_FILENO) {
|
|
close(outputFileFd);
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
}; // namespace android
|
|
|