Process *get_process(pid_t pid) { /* TODO: Add test for invalid pid. Right now, we get a lot of errors and some * structure.*/ Process *retval = (Process *)calloc(1, sizeof(Process)); unsigned int *uids = NULL; unsigned int *gids = NULL; retval->pid = pid; retval->ppid = get_ppid(pid); retval->name = get_procname(pid); retval->exe = get_exe(pid); retval->cmdline = get_cmdline(pid); retval->create_time = get_create_time(pid); uids = get_ids(pid, "Uid:"); if (uids) { retval->uid = uids[0]; retval->euid = uids[1]; retval->suid = uids[2]; retval->username = get_username(retval->uid); /* Uses real uid and not euid */ } else { retval->uid = retval->euid = retval->suid = 0; retval->username = NULL; } gids = get_ids(pid, "Gid:"); if (uids) { retval->gid = gids[0]; retval->egid = gids[1]; retval->sgid = gids[2]; } else { retval->uid = retval->euid = retval->suid = 0; } retval->terminal = get_terminal(pid); free(uids); free(gids); return retval; }
Process * get_process(unsigned pid) { Process *retval = calloc(1, sizeof(Process)); unsigned int *uids = NULL; unsigned int *gids = NULL; retval->pid = pid; retval->ppid = get_ppid(pid); retval->name = get_procname(pid); retval->exe = get_exe(pid); retval->cmdline = get_cmdline(pid); retval->create_time = get_create_time(pid); uids = get_ids(pid, "Uid:"); if (uids) { retval->uid = uids[0]; retval->euid = uids[1]; retval->suid = uids[2]; retval->username = get_username(retval->uid); /* Uses real uid and not euid */ } else { retval->uid = retval->euid = retval->suid = 0; retval->username = NULL; } gids = get_ids(pid, "Gid:"); if (uids) { retval->gid = gids[0]; retval->egid = gids[1]; retval->sgid = gids[2]; } else { retval->uid = retval->euid = retval->suid = 0; } retval->terminal = get_terminal(pid); if (uids) free(uids); if (gids) free(gids); return retval; }