X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Futil.c;h=7f5fa05dca4d1beb15da5b82db6a6792198dec9b;hb=4627d39661ffcdd11e814650dfcc9ac3d0d0ec0b;hp=cdfc9e0158828f70d6adbcd4550e3973739faaf1;hpb=fab56fc541cebdbbc4cc273c3f0807eb7807b9fd;p=elogind.git diff --git a/src/util.c b/src/util.c index cdfc9e015..7f5fa05dc 100644 --- a/src/util.c +++ b/src/util.c @@ -609,6 +609,9 @@ int get_process_cmdline(pid_t pid, size_t max_length, char **line) { fclose(f); + if (r[0] == 0) + return get_process_name(pid, line); + *line = r; return 0; } @@ -2782,7 +2785,7 @@ fail: char **replace_env_argv(char **argv, char **env) { char **r, **i; - unsigned k; + unsigned k = 0; if (!(r = new(char*, strv_length(argv)+1))) return NULL; @@ -2798,6 +2801,49 @@ char **replace_env_argv(char **argv, char **env) { return r; } +int columns(void) { + static __thread int parsed_columns = 0; + const char *e; + + if (parsed_columns > 0) + return parsed_columns; + + if ((e = getenv("COLUMNS"))) + parsed_columns = atoi(e); + + if (parsed_columns <= 0) { + struct winsize ws; + zero(ws); + + if (ioctl(STDIN_FILENO, TIOCGWINSZ, &ws) >= 0) + parsed_columns = ws.ws_col; + } + + if (parsed_columns <= 0) + parsed_columns = 80; + + return parsed_columns; +} + +int running_in_chroot(void) { + struct stat a, b; + + zero(a); + zero(b); + + /* Only works as root */ + + if (stat("/proc/1/root", &a) < 0) + return -errno; + + if (stat("/", &b) < 0) + return -errno; + + return + a.st_dev != b.st_dev || + a.st_ino != b.st_ino; +} + static const char *const ioprio_class_table[] = { [IOPRIO_CLASS_NONE] = "none", [IOPRIO_CLASS_RT] = "realtime",