Beispiel #1
0
extern "C" int ttyname_r(int fd, char *buf, size_t buflen)
{
    char tmpbuf[64];
    DMTCP_PLUGIN_DISABLE_CKPT();
    int ret = _real_ttyname_r(fd, tmpbuf, sizeof(tmpbuf));

    if (ret == 0 && strcmp(tmpbuf, "/dev/tty") != 0) {
        Connection* c = FileConnList::instance().getConnection(fd);
        JASSERT(c != NULL) (fd) (tmpbuf);
        PtyConnection* ptyCon =(PtyConnection*) c;
        string virtPtsName = ptyCon->virtPtsName();

        if (virtPtsName.length() >= buflen) {
            JWARNING(false) (virtPtsName) (virtPtsName.length()) (buflen)
            .Text("fake ptsname() too long for user buffer");
            errno = ERANGE;
            ret = -1;
        } else {
            strncpy(buf, virtPtsName.c_str(), buflen);
        }
    }
    DMTCP_PLUGIN_ENABLE_CKPT();

    return ret;
}
Beispiel #2
0
static int ptsname_r_work(int fd, char * buf, size_t buflen)
{
    JTRACE("Calling ptsname_r");

    Connection* c = FileConnList::instance().getConnection(fd);
    PtyConnection* ptyCon =(PtyConnection*) c;

    string virtPtsName = ptyCon->virtPtsName();

    JTRACE("ptsname_r") (virtPtsName);

    if (virtPtsName.length() >= buflen)
    {
        JWARNING(false) (virtPtsName) (virtPtsName.length()) (buflen)
        .Text("fake ptsname() too long for user buffer");
        errno = ERANGE;
        return -1;
    }

    strcpy(buf, virtPtsName.c_str());

    return 0;
}