diff options
Diffstat (limited to 'spectro/conv.c')
-rwxr-xr-x[-rw-r--r--] | spectro/conv.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/spectro/conv.c b/spectro/conv.c index 284a30c..a728566 100644..100755 --- a/spectro/conv.c +++ b/spectro/conv.c @@ -41,6 +41,9 @@ #include <stdarg.h> #include <errno.h> #include <string.h> +#include <sys/time.h> +#include <sys/types.h> +#include <pwd.h> /* select() defined, but not poll(), so emulate poll() */ #if defined(FD_CLR) && !defined(POLLIN) @@ -59,6 +62,7 @@ #include "sa_config.h" #endif #include "numsup.h" +#include "cgats.h" #include "xspect.h" #include "insttypes.h" #include "conv.h" @@ -241,6 +245,12 @@ void empty_con_chars(void) { if ((stdinh = GetStdHandle(STD_INPUT_HANDLE)) == INVALID_HANDLE_VALUE) return; for (;;) { + /* Wait for 1msec */ + + /* Do dummy read, as stdin seems to be signalled on startup */ + if (WaitForSingleObject(stdinh, 1) == WAIT_OBJECT_0) + ReadFile(stdinh, buf, 0, &bread, NULL); + if (WaitForSingleObject(stdinh, 1) == WAIT_OBJECT_0) { ReadFile(stdinh, buf, 100, &bread, NULL); } else { @@ -423,6 +433,13 @@ athread *new_athread( /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ +/* Return the login $HOME directory. */ +/* (Useful if we might be running sudo) */ +/* No NT equivalent ?? */ +char *login_HOME() { + return getenv("HOME"); +} + /* Delete a file */ void delete_file(char *fname) { _unlink(fname); @@ -789,6 +806,7 @@ static void *threadproc( athread *p = (athread *)param; /* Register this thread with the Objective-C garbage collector */ + /* (Hmm. Done by default in latter versions though, hence deprecated in them ?) */ #if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 objc_registerThreadWithCollector(); #endif @@ -833,6 +851,29 @@ athread *new_athread( /* - - - - - - - - - - - - - - - - - - - - - - - - */ +/* Return the login $HOME directory. */ +/* (Useful if we might be running sudo) */ +char *login_HOME() { + + if (getuid() == 0) { /* If we are running as root */ + char *uids; + + if ((uids = getenv("SUDO_UID")) != NULL) { /* And we sudo's to get it */ + int uid; + struct passwd *pwd; + + uid = atoi(uids); + + if ((pwd = getpwuid(uid)) != NULL) { + return pwd->pw_dir; + } + } + } + + return getenv("HOME"); +} + + /* Delete a file */ void delete_file(char *fname) { unlink(fname); |