mirror of
https://github.com/rhasspy/espeak-ng.git
synced 2026-10-31 05:35:35 +00:00
Use the error.h API in LoadSoundFile and check more return values. [Coverity]
This commit is contained in:
@@ -20,6 +20,7 @@
|
||||
#include "config.h"
|
||||
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
#include <locale.h>
|
||||
#include <math.h>
|
||||
#include <stdint.h>
|
||||
@@ -33,6 +34,7 @@
|
||||
#include <espeak-ng/espeak_ng.h>
|
||||
#include <espeak/speak_lib.h>
|
||||
|
||||
#include "error.h"
|
||||
#include "speech.h"
|
||||
#include "phoneme.h"
|
||||
#include "synthesize.h"
|
||||
@@ -780,7 +782,7 @@ int Read4Bytes(FILE *f)
|
||||
return acc;
|
||||
}
|
||||
|
||||
static int LoadSoundFile(const char *fname, int index)
|
||||
static espeak_ng_STATUS LoadSoundFile(const char *fname, int index, espeak_ng_ERROR_CONTEXT *context)
|
||||
{
|
||||
FILE *f;
|
||||
char *p;
|
||||
@@ -795,7 +797,7 @@ static int LoadSoundFile(const char *fname, int index)
|
||||
}
|
||||
|
||||
if (fname == NULL)
|
||||
return 1;
|
||||
return EINVAL;
|
||||
|
||||
if (fname[0] != '/') {
|
||||
// a relative path, look in espeak-data/soundicons
|
||||
@@ -811,7 +813,12 @@ static int LoadSoundFile(const char *fname, int index)
|
||||
int header[3];
|
||||
char command[sizeof(fname2)+sizeof(fname2)+40];
|
||||
|
||||
fseek(f, 20, SEEK_SET);
|
||||
if (fseek(f, 20, SEEK_SET) == -1) {
|
||||
int error = errno;
|
||||
fclose(f);
|
||||
return create_file_error_context(context, error, fname);
|
||||
}
|
||||
|
||||
for (ix = 0; ix < 3; ix++)
|
||||
header[ix] = Read4Bytes(f);
|
||||
|
||||
@@ -833,23 +840,26 @@ static int LoadSoundFile(const char *fname, int index)
|
||||
|
||||
if (f == NULL) {
|
||||
f = fopen(fname, "rb");
|
||||
if (f == NULL) {
|
||||
fprintf(stderr, "Can't read temp file: %s\n", fname);
|
||||
return 3;
|
||||
}
|
||||
if (f == NULL)
|
||||
return create_file_error_context(context, errno, fname);
|
||||
}
|
||||
|
||||
length = GetFileLength(fname);
|
||||
fseek(f, 0, SEEK_SET);
|
||||
if (fseek(f, 0, SEEK_SET) == -1) {
|
||||
int error = errno;
|
||||
fclose(f);
|
||||
return create_file_error_context(context, error, fname);
|
||||
}
|
||||
if ((p = (char *)realloc(soundicon_tab[index].data, length)) == NULL) {
|
||||
fclose(f);
|
||||
return 4;
|
||||
return ENOMEM;
|
||||
}
|
||||
if (fread(p, 1, length, f) != length) {
|
||||
int error = errno;
|
||||
fclose(f);
|
||||
remove(fname_temp);
|
||||
free(p);
|
||||
return 5;
|
||||
return create_file_error_context(context, error, fname);
|
||||
}
|
||||
fclose(f);
|
||||
remove(fname_temp);
|
||||
@@ -857,7 +867,7 @@ static int LoadSoundFile(const char *fname, int index)
|
||||
ip = (int *)(&p[40]);
|
||||
soundicon_tab[index].length = (*ip) / 2; // length in samples
|
||||
soundicon_tab[index].data = p;
|
||||
return 0;
|
||||
return ENS_OK;
|
||||
}
|
||||
|
||||
static int LookupSoundicon(int c)
|
||||
@@ -868,7 +878,7 @@ static int LookupSoundicon(int c)
|
||||
for (ix = N_SOUNDICON_SLOTS; ix < n_soundicon_tab; ix++) {
|
||||
if (soundicon_tab[ix].name == c) {
|
||||
if (soundicon_tab[ix].length == 0) {
|
||||
if (LoadSoundFile(NULL, ix) != 0)
|
||||
if (LoadSoundFile(NULL, ix, NULL) != ENS_OK)
|
||||
return -1; // sound file is not available
|
||||
}
|
||||
return ix;
|
||||
@@ -895,7 +905,7 @@ static int LoadSoundFile2(const char *fname)
|
||||
if (slot >= N_SOUNDICON_SLOTS)
|
||||
slot = 0;
|
||||
|
||||
if (LoadSoundFile(fname, slot) != 0)
|
||||
if (LoadSoundFile(fname, slot, NULL) != ENS_OK)
|
||||
return -1;
|
||||
|
||||
soundicon_tab[slot].filename = (char *)realloc(soundicon_tab[ix].filename, strlen(fname)+1);
|
||||
|
||||
Reference in New Issue
Block a user