Browse Source

Support using home (data) paths other than 'espeak-ng-data'.

master
Reece H. Dunn 8 years ago
parent
commit
773da20c16
2 changed files with 25 additions and 24 deletions
  1. 1
    0
      CHANGELOG.md
  2. 24
    24
      src/libespeak-ng/speech.c

+ 1
- 0
CHANGELOG.md View File

@@ -18,6 +18,7 @@ The espeak-ng project is a fork of the espeak project.
* Merged the Android port into the main espeak-ng codebase.
* Extend `--compile-phoneme` to support specifying the source directory for
phoneme files.
* Support using any directory as the data home, not just `espeak-ng-data`.

bug fixes:


+ 24
- 24
src/libespeak-ng/speech.c View File

@@ -218,6 +218,18 @@ int sync_espeak_terminated_msg(uint32_t unique_identifier, void *user_data)

#endif

static int check_data_path(const char *path)
{
if (!path) return 0;

snprintf(path_home, sizeof(path_home), "%s/espeak-ng-data", path);
if (GetFileLength(path_home) == -2)
return 1;

snprintf(path_home, sizeof(path_home), "%s", path);
return GetFileLength(path_home) == -2;
}

#pragma GCC visibility push(default)

ESPEAK_NG_API espeak_ng_STATUS espeak_ng_InitializeOutput(espeak_ng_OUTPUT_MODE output_mode, int buffer_length, const char *device)
@@ -267,23 +279,17 @@ int GetFileLength(const char *filename)

ESPEAK_NG_API void espeak_ng_InitializePath(const char *path)
{
if (path != NULL) {
sprintf(path_home, "%s/espeak-ng-data", path);
if (check_data_path(path))
return;
}

#ifdef PLATFORM_WINDOWS
HKEY RegKey;
unsigned long size;
unsigned long var_type;
char *env;
unsigned char buf[sizeof(path_home)-13];

if ((env = getenv("ESPEAK_DATA_PATH")) != NULL) {
sprintf(path_home, "%s/espeak-ng-data", env);
if (GetFileLength(path_home) == -2)
return; // an espeak-ng-data directory exists
}
if (check_data_path(getenv("ESPEAK_DATA_PATH")))
return;

buf[0] = 0;
RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\eSpeak NG", 0, KEY_READ, &RegKey);
@@ -293,23 +299,17 @@ ESPEAK_NG_API void espeak_ng_InitializePath(const char *path)
var_type = REG_SZ;
RegQueryValueExA(RegKey, "Path", 0, &var_type, buf, &size);

sprintf(path_home, "%s\\espeak-ng-data", buf);
#elif defined(PLATFORM_DOS)
strcpy(path_home, PATH_ESPEAK_DATA);
#else
char *env;

// check for environment variable
if ((env = getenv("ESPEAK_DATA_PATH")) != NULL) {
snprintf(path_home, sizeof(path_home), "%s/espeak-ng-data", env);
if (GetFileLength(path_home) == -2)
return; // an espeak-ng-data directory exists
}
if (check_data_path(buf))
return;
#elif !defined(PLATFORM_DOS)
if (check_data_path(getenv("ESPEAK_DATA_PATH")))
return;

snprintf(path_home, sizeof(path_home), "%s/espeak-ng-data", getenv("HOME"));
if (access(path_home, R_OK) != 0)
strcpy(path_home, PATH_ESPEAK_DATA);
if (check_data_path(getenv("HOME")))
return;
#endif

strcpy(path_home, PATH_ESPEAK_DATA);
}

ESPEAK_NG_API espeak_ng_STATUS espeak_ng_Initialize(espeak_ng_ERROR_CONTEXT *context)

Loading…
Cancel
Save