void TraceScreen_delete(Object* cast) { TraceScreen* this = (TraceScreen*) cast; if (this->child > 0) { kill(this->child, SIGTERM); waitpid(this->child, NULL, 0); fclose(this->strace); } CRT_enableDelay(); free(InfoScreen_done((InfoScreen*)cast)); }
.super = { .extends = Class(Object), .delete = EnvScreen_delete }, .scan = EnvScreen_scan, .draw = EnvScreen_draw }; EnvScreen* EnvScreen_new(Process* process) { EnvScreen* this = xMalloc(sizeof(EnvScreen)); Object_setClass(this, Class(EnvScreen)); return (EnvScreen*) InfoScreen_init(&this->super, process, NULL, LINES-3, " "); } void EnvScreen_delete(Object* this) { free(InfoScreen_done((InfoScreen*)this)); } void EnvScreen_draw(InfoScreen* this) { InfoScreen_drawTitled(this, "Environment of process %d - %s", this->process->pid, this->process->comm); } void EnvScreen_scan(InfoScreen* this) { Panel* panel = this->display; int idx = MAX(Panel_getSelectedIndex(panel), 0); Panel_prune(panel); uid_t euid = geteuid(); seteuid(getuid()); char *env = Platform_getProcessEnv(this->process->pid);