#include <pwd.h>
#include <sys/param.h>
#include <stdlib.h>
+#include <fcntl.h>
#if __MWERKS__
#include <unistd.h>
#endif
{
if (!inhibit_window_system && rfds && FD_ISSET (0, rfds))
return 1;
- else if (inhibit_window_system || noninteractive)
+ else if (inhibit_window_system || noninteractive ||
+ (timeout && (EMACS_SECS(*timeout)==0) &&
+ (EMACS_USECS(*timeout)==0)))
return select(n, rfds, wfds, efds, timeout);
else
{
EMACS_TIME end_time, now;
-
+
EMACS_GET_TIME (end_time);
if (timeout)
EMACS_ADD_TIME (end_time, end_time, *timeout);
-
+
do
{
int r;
EMACS_TIME one_second;
-
+ SELECT_TYPE orfds;
+
+ FD_ZERO (&orfds);
+ if (rfds)
+ {
+ orfds = *rfds;
+ }
+
EMACS_SET_SECS (one_second, 1);
EMACS_SET_USECS (one_second, 0);
-
- if ((r = select (n, rfds, wfds, efds, &one_second)) > 0)
- return r;
-
+
+ if (timeout && EMACS_TIME_LT(*timeout, one_second))
+ one_second = *timeout;
+
+ if ((r = select (n, &orfds, wfds, efds, &one_second)) > 0)
+ {
+ *rfds = orfds;
+ return r;
+ }
+
mac_check_for_quit_char();
-
+
EMACS_GET_TIME (now);
EMACS_SUB_TIME (now, end_time, now);
}
while (!timeout || !EMACS_TIME_NEG_P (now));
-
+
return 0;
}
}
int r;
/* Use select to block on IO while still checking for quit_char */
- if (!inhibit_window_system && !noninteractive)
+ if (!inhibit_window_system && !noninteractive &&
+ ! (fcntl(fds, F_GETFL, 0) & O_NONBLOCK))
{
FD_ZERO (&rfds);
FD_SET (fds, &rfds);
if (sys_select (fds+1, &rfds, 0, 0, NULL) < 0)
return -1;
}
-
+
return read (fds, buf, nbyte);
}
q[0] = '\0';
strcpy (p, app_bundle_pathname);
- strcat (p, "/Contents/MacOS/bin");
+ strcat (p, "/Contents/MacOS/libexec");
if (stat (p, &st) == 0 && (st.st_mode & S_IFMT) == S_IFDIR)
strcat (q, p);
strcpy (p, app_bundle_pathname);
- strcat (p, "/Contents/MacOS/libexec");
+ strcat (p, "/Contents/MacOS/bin");
if (stat (p, &st) == 0 && (st.st_mode & S_IFMT) == S_IFDIR)
{
if (q[0] != '\0')
defsubr (&Smac_file_name_to_posix);
defsubr (&Sposix_file_name_to_mac);
}
+
+/* arch-tag: 29d30c1f-0c6b-4f88-8a6d-0558d7f9dbff
+ (do not change this comment) */