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

_exit(1); _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); snprintf(charbuf, sizeof(charbuf), "/proc/%d/stat", mbr_pid);
#endif
mbr_proc_stat = open(charbuf, O_RDONLY); mbr_proc_stat = open(charbuf, O_RDONLY);
if (mbr_proc_stat == -1) { if (mbr_proc_stat == -1) {
error = errno; error = errno;
return result; 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) static int mbrola_is_idle(void)
{ {
char *p; char *p;
return 0; return 0;
return p[1] == ' ' && p[2] == 'S'; return p[1] == ' ' && p[2] == 'S';
} }
#endif


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

Loading…
Cancel
Save