@@ -847,6 +847,10 @@ static espeak_ng_STATUS LoadSoundFile(const char *fname, int index, espeak_ng_ER | |||
} | |||
length = GetFileLength(fname); | |||
if (length < 0) { // length == -errno | |||
fclose(f); | |||
return create_file_error_context(context, -length, fname); | |||
} | |||
if (fseek(f, 0, SEEK_SET) == -1) { | |||
int error = errno; | |||
fclose(f); |
@@ -232,14 +232,14 @@ static int check_data_path(const char *path, int allow_directory) | |||
if (!path) return 0; | |||
snprintf(path_home, sizeof(path_home), "%s/espeak-ng-data", path); | |||
if (GetFileLength(path_home) == -2) | |||
if (GetFileLength(path_home) == -EISDIR) | |||
return 1; | |||
if (!allow_directory) | |||
return 0; | |||
snprintf(path_home, sizeof(path_home), "%s", path); | |||
return GetFileLength(path_home) == -2; | |||
return GetFileLength(path_home) == -EISDIR; | |||
} | |||
#pragma GCC visibility push(default) | |||
@@ -284,7 +284,7 @@ int GetFileLength(const char *filename) | |||
return 0; | |||
if (S_ISDIR(statbuf.st_mode)) | |||
return -2; // a directory | |||
return -EISDIR; | |||
return statbuf.st_size; | |||
} |
@@ -101,6 +101,8 @@ espeak_ng_STATUS LoadMbrolaTable(const char *mbrola_voice, const char *phtrans, | |||
// read eSpeak's mbrola phoneme translation data, eg. en1_phtrans | |||
sprintf(path, "%s/mbrola_ph/%s", path_home, phtrans); | |||
size = GetFileLength(path); | |||
if (size < 0) // size == -errno | |||
return -size; | |||
if ((f_in = fopen(path, "rb")) == NULL) { | |||
int error = errno; | |||
close_MBR(); |
@@ -78,6 +78,8 @@ static espeak_ng_STATUS ReadPhFile(void **ptr, const char *fname, int *size, esp | |||
sprintf(buf, "%s%c%s", path_home, PATHSEP, fname); | |||
length = GetFileLength(buf); | |||
if (length < 0) // length == -errno | |||
return create_file_error_context(context, -length, buf); | |||
if ((f_in = fopen(buf, "rb")) == NULL) | |||
return create_file_error_context(context, errno, buf); |
@@ -20,6 +20,7 @@ | |||
#include "config.h" | |||
#include <ctype.h> | |||
#include <errno.h> | |||
#include <stdint.h> | |||
#include <stdio.h> | |||
#include <stdlib.h> | |||
@@ -1190,7 +1191,7 @@ static int SetVoiceScores(espeak_VOICE *voice_select, espeak_VOICE **voices, int | |||
} | |||
sprintf(buf, "%s/voices/%s", path_home, language); | |||
if (GetFileLength(buf) == -2) { | |||
if (GetFileLength(buf) == -EISDIR) { | |||
// A subdirectory name has been specified. List all the voices in that subdirectory | |||
language[lang_len++] = PATHSEP; | |||
language[lang_len] = 0; | |||
@@ -1430,11 +1431,11 @@ static void GetVoices(const char *path) | |||
sprintf(fname, "%s%c%s", path, PATHSEP, FindFileData.cFileName); | |||
ftype = GetFileLength(fname); | |||
if (ftype == -2) { | |||
// a sub-sirectory | |||
if (ftype == -EISDIR) { | |||
// a sub-directory | |||
GetVoices(fname); | |||
} else if (ftype > 0) { | |||
// a regular line, add it to the voices list | |||
// a regular file, add it to the voices list | |||
if ((f_voice = fopen(fname, "r")) == NULL) | |||
continue; | |||
@@ -1466,11 +1467,11 @@ static void GetVoices(const char *path) | |||
ftype = GetFileLength(fname); | |||
if (ftype == -2) { | |||
// a sub-sirectory | |||
if (ftype == -EISDIR) { | |||
// a sub-directory | |||
GetVoices(fname); | |||
} else if (ftype > 0) { | |||
// a regular line, add it to the voices list | |||
// a regular file, add it to the voices list | |||
if ((f_voice = fopen(fname, "r")) == NULL) | |||
continue; | |||