}
static int pakfire_pty_disconnect(struct pakfire_pty* pty) {
- if (pty->master.fd >= 0) {
- close(pty->master.fd);
- pty->master.fd = 1;
- }
-
- // Restore any changed terminal attributes
- pakfire_pty_restore_attrs(pty, &pty->stdin);
- pakfire_pty_restore_attrs(pty, &pty->stdout);
-
// Clear events
if (pty->master.event)
pty->master.event = sd_event_source_unref(pty->master.event);
if (pty->sigwinch_event)
pty->sigwinch_event = sd_event_source_unref(pty->sigwinch_event);
+ // Close the PTY
+ if (pty->master.fd >= 0) {
+ close(pty->master.fd);
+ pty->master.fd = 1;
+ }
+
+ // Restore any changed terminal attributes
+ pakfire_pty_restore_attrs(pty, &pty->stdin);
+ pakfire_pty_restore_attrs(pty, &pty->stdout);
+
return 0;
}
// Output
if (pty->output.iov_base)
munmap(pty->output.iov_base, pty->output.iov_len);
- if (pty->outputfd)
+ if (pty->outputfd >= 0)
close(pty->outputfd);
if (pty->loop)