示例#1
0
文件: kpty.cpp 项目: vasi/kdelibs
void KPty::close()
{
    Q_D(KPty);

    if (d->masterFd < 0)
        return;
    closeSlave();
    if (d->ownMaster) {
#ifndef HAVE_OPENPTY
        // don't bother resetting unix98 pty, it will go away after closing master anyway.
        if (memcmp(d->ttyName.data(), "/dev/pts/", 9)) {
            if (!geteuid()) {
                struct stat st;
                if (!stat(d->ttyName.data(), &st)) {
                    chown(d->ttyName.data(), 0, st.st_gid == getgid() ? 0 : -1);
                    chmod(d->ttyName.data(), S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH);
                }
            } else {
                fcntl(d->masterFd, F_SETFD, 0);
                d->chownpty(false);
            }
        }
#endif
        ::close(d->masterFd);
    }
    d->masterFd = -1;
}
示例#2
0
文件: kpty.cpp 项目: qmlos/terminal
void KPty::close()
{
    Q_D(KPty);

    if (d->masterFd < 0) {
        return;
    }
    closeSlave();
    // don't bother resetting unix98 pty, it will go away after closing master anyway.
    if (memcmp(d->ttyName.data(), "/dev/pts/", 9)) {
        if (!geteuid()) {
            struct stat st;
            if (!stat(d->ttyName.data(), &st)) {
                if (chown(d->ttyName.data(), 0, st.st_gid == getgid() ? 0 : -1) < 0)
                    qDebug() << "Cannot change pseudo teletype slave ownership";
                if (chmod(d->ttyName.data(), S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH) < 0)
                    qDebug() << "Cannot change pseudo teletype slave permission";
            }
        } else {
            fcntl(d->masterFd, F_SETFD, 0);
            d->chownpty(false);
        }
    }
    ::close(d->masterFd);
    d->masterFd = -1;
}