#include <unistd.h>
#include <fcntl.h>
#include <cerrno>
-#include FORMS_H_LOCATION
#ifdef __GNUG__
#pragma implementation
return;
if ((outfd = startPipe(outPipeName(), true)) == -1) {
- endPipe(infd, inPipeName());
+ endPipe(infd, inPipeName(), false);
return;
}
return;
}
- endPipe(infd, inPipeName());
- endPipe(outfd, outPipeName());
+ endPipe(infd, inPipeName(), false);
+ endPipe(outfd, outPipeName(), true);
ready = false;
}
}
-void LyXComm::endPipe(int & fd, string const & filename)
+void LyXComm::endPipe(int & fd, string const & filename, bool write)
{
if (fd < 0)
return;
+ if (!write) {
+ lyx_gui::remove_read_callback(fd);
+ }
+
#ifdef __EMX__
APIRET rc;
int errnum;
void LyXComm::emergencyCleanup()
{
if (!pipename.empty()) {
- endPipe(infd, inPipeName());
- endPipe(outfd, outPipeName());
+ endPipe(infd, inPipeName(), false);
+ endPipe(outfd, outPipeName(), true);
}
}
errno = 0;
int status;
// the single = is intended here.
- while ((status = read(infd, charbuf, CMDBUFLEN-1))) {
+ while ((status = read(infd, charbuf, CMDBUFLEN - 1))) {
+ int rerrno = errno;
+
if (status > 0) {
charbuf[status]= '\0'; // turn it into a c string
- lsbuf += strip(charbuf, '\r');
+ lsbuf += rtrim(charbuf, "\r");
// commit any commands read
while (lsbuf.find('\n') != string::npos) {
// split() grabs the entire string if
//\n or not \n?
}
}
- if (errno == EAGAIN) {
+ if (rerrno == EAGAIN) {
errno = 0;
return;
}
- if (errno != 0) {
- lyxerr << "LyXComm: " << strerror(errno) << endl;
- if (!lsbuf.empty())
- {
- lyxerr << "LyxComm: truncated command: "
+ if (rerrno != 0) {
+ lyxerr << "LyXComm: " << strerror(rerrno) << endl;
+ if (!lsbuf.empty()) {
+ lyxerr << "LyXComm: truncated command: "
<< lsbuf << endl;
lsbuf.erase();
}
serv->func->dispatch(cmd + ' ' + arg);
string const rval = serv->func->getMessage();
-
+
//modified june 1999 stefano@zool.su.se:
//all commands produce an INFO or ERROR message
//in the output pipe, even if they do not return
/* ---F+------------------------------------------------------------------ *\
- Function : LyxNotifyClient
+ Function : LyXNotifyClient
Called by : WorkAreaKeyPress
Purpose : send a notify messge to a client
Parameters: s - string to send