Browse Source

mbrola_is_idle: Make /proc checks work with Solaris /proc

Signed-off-by: Alan Coopersmith <[email protected]>
master
Casper H.S. Dik 3 years ago
parent
commit
86e98470fb
1 changed files with 18 additions and 0 deletions
  1. 18
    0
      src/libespeak-ng/mbrowrap.c

+ 18
- 0
src/libespeak-ng/mbrowrap.c View File

@@ -219,7 +219,11 @@ static int start_mbrola(const char *voice_path)
_exit(1);
}

#if defined(__sun) && defined(__SVR4)
snprintf(charbuf, sizeof(charbuf), "/proc/%d/psinfo", mbr_pid);
#else
snprintf(charbuf, sizeof(charbuf), "/proc/%d/stat", mbr_pid);
#endif
mbr_proc_stat = open(charbuf, O_RDONLY);
if (mbr_proc_stat == -1) {
error = errno;
@@ -413,6 +417,19 @@ static int send_to_mbrola(const char *cmd)
return result;
}

#if defined(__sun) && defined(__SVR4) /* Solaris */
#include <procfs.h>
static int mbrola_is_idle(void)
{
psinfo_t ps;

// look in /proc to determine if mbrola is still running or sleeping
if (pread(mbr_proc_stat, &ps, sizeof(ps), 0) != sizeof(ps))
return 0;

return strcmp(ps.pr_fname, "mbrola") == 0 && ps.pr_lwp.pr_sname == 'S';
}
#else
static int mbrola_is_idle(void)
{
char *p;
@@ -428,6 +445,7 @@ static int mbrola_is_idle(void)
return 0;
return p[1] == ' ' && p[2] == 'S';
}
#endif

static ssize_t receive_from_mbrola(void *buffer, size_t bufsize)
{

Loading…
Cancel
Save