Tools: check if input paths are directories

This commit is contained in:
Shahram Najm 2019-12-27 11:38:59 +00:00
parent bd430b71f8
commit bbe5e29b71
10 changed files with 31 additions and 44 deletions

View File

@ -43,6 +43,19 @@ char get_dir_separator_char(void)
return DIR_SEPARATOR_CHAR;
}
/* Return 1 if the filepath is a directory, 0 otherwise */
int path_is_directory(const char* filename)
{
struct stat s;
int stat_val = stat(filename, &s);
if ( stat_val == 0 ) {
if (S_ISDIR(s.st_mode)) {
return 1;
}
}
return 0;
}
char* codes_getenv(const char* name)
{
/* Look for the new ecCodes environment variable names */

View File

@ -1464,6 +1464,7 @@ grib_expression *grib_arguments_get_expression(grib_handle *h, grib_arguments *a
/* codes_util.c */
char get_dir_separator_char(void);
int path_is_directory(const char* filename);
char *codes_getenv(const char *name);
/* grib_util.c */

View File

@ -301,6 +301,9 @@ int grib_tool_init(grib_runtime_options* options)
context->blacklist=blacklist;
}
/* Check 1st file is not a directory */
exit_if_input_is_directory(grib_tool_name, options->infile_extra->name);
if (grib_options_on("r")) {
char* filename[1];
filename[0]=options->infile_extra->name;
@ -369,11 +372,9 @@ int grib_tool_init(grib_runtime_options* options)
{
/* Check for 2nd file being a directory. If so, we assume user is comparing to a file */
/* with the same name as first file in that directory */
struct stat s;
grib_tools_file* infile = options->infile; /* the 2nd file in comparison */
if (infile) {
int stat_val = stat(infile->name, &s);
if ( stat_val == 0 && S_ISDIR(s.st_mode)) {
if (path_is_directory(infile->name)) {
/* Take the filename of the 1st file and append to dir */
char bufr[2048] = {0,};
/* options->infile_extra->name is the 1st file */

View File

@ -162,7 +162,6 @@ int main(int argc,char* argv[])
FILE* infh = NULL;
char* filename;
int i, status=0;
struct stat s;
int err=0;
unsigned long count=0;
@ -176,11 +175,9 @@ int main(int argc,char* argv[])
}
filename=argv[i];
if (stat(filename, &s)==0) {
if (S_ISDIR(s.st_mode)) {
fprintf(stderr, "ERROR: %s: Is a directory\n", filename);
return 1;
}
if (path_is_directory(filename)) {
fprintf(stderr, "ERROR: %s: Is a directory\n", filename);
return 1;
}
infh=fopen(filename,"rb");
if (!infh) {

View File

@ -66,18 +66,6 @@ static int count_messages(FILE* in, int message_type, unsigned long *count)
return err;
}
static int is_a_directory(const char* filename)
{
struct stat s;
int stat_val = stat(filename, &s);
if ( stat_val == 0 ) {
if (S_ISDIR(s.st_mode)) {
return 1;
}
}
return 0;
}
int main(int argc,char* argv[])
{
FILE* infh = NULL;
@ -105,7 +93,7 @@ int main(int argc,char* argv[])
continue;
}
filename=argv[i];
if (is_a_directory(filename)) {
if (path_is_directory(filename)) {
fprintf(stderr, "%s: ERROR: \"%s\": Is a directory\n", tool_name, filename);
continue;
}

View File

@ -111,7 +111,6 @@ int main(int argc,char* argv[])
FILE* infh = NULL;
char* filename;
int i, status=0;
struct stat s;
int err=0,nchunks=0;
unsigned long count=0;
@ -133,11 +132,9 @@ int main(int argc,char* argv[])
i++;
filename=argv[i];
if (stat(filename, &s)==0) {
if (S_ISDIR(s.st_mode)) {
fprintf(stderr, "ERROR: %s: Is a directory\n", filename);
return 1;
}
if (path_is_directory(filename)) {
fprintf(stderr, "ERROR: %s: Is a directory\n", filename);
return 1;
}
infh=fopen(filename,"rb");
if (!infh) {

View File

@ -308,11 +308,9 @@ int grib_tool_init(grib_runtime_options* options)
{
/* Check for 2nd file being a directory. If so, we assume user is comparing to a file */
/* with the same name as first file in that directory */
struct stat s;
grib_tools_file* infile = options->infile; /* the 2nd file in comparison */
if (infile) {
int stat_val = stat(infile->name, &s);
if ( stat_val == 0 && S_ISDIR(s.st_mode)) {
if (path_is_directory(infile->name)) {
/* Take the filename of the 1st file and append to dir */
char bufr[2048] = {0,};
/* options->infile_extra->name is the 1st file */

View File

@ -1272,13 +1272,9 @@ void grib_tools_write_message(grib_runtime_options* options, grib_handle* h)
}
int exit_if_input_is_directory(const char* tool_name, const char* filename)
{
struct stat s;
int stat_val = stat(filename, &s);
if ( stat_val == 0 ) {
if (S_ISDIR(s.st_mode)) {
fprintf(stderr, "%s: ERROR: \"%s\": Is a directory\n", tool_name, filename);
exit(1);
}
if ( path_is_directory(filename) ) {
fprintf(stderr, "%s: ERROR: \"%s\": Is a directory\n", tool_name, filename);
exit(1);
}
return 0;
}

View File

@ -228,11 +228,9 @@ int grib_tool_init(grib_runtime_options* options)
{
/* Check for 2nd file being a directory. If so, we assume user is comparing to a file */
/* with the same name as first file in that directory */
struct stat s;
grib_tools_file* infile = options->infile; /* the 2nd file in comparison */
if (infile) {
int stat_val = stat(infile->name, &s);
if ( stat_val == 0 && S_ISDIR(s.st_mode)) {
if (path_is_directory(infile->name)) {
/* Take the filename of the 1st file and append to dir */
char bufr[2048] = {0,};
/* options->infile_extra->name is the 1st file */

View File

@ -313,11 +313,9 @@ int grib_tool_init(grib_runtime_options* options)
{
/* Check for 2nd file being a directory. If so, we assume user is comparing to a file */
/* with the same name as first file in that directory */
struct stat s;
grib_tools_file* infile = options->infile; /* the 2nd file in comparison */
if (infile) {
int stat_val = stat(infile->name, &s);
if ( stat_val == 0 && S_ISDIR(s.st_mode)) {
if (path_is_directory(infile->name)) {
/* Take the filename of the 1st file and append to dir */
char bufr[2048] = {0,};
/* options->infile_extra->name is the 1st file */