]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
process-util: make sure procfs_file_alloca() works for non-literal field names too
authorLennart Poettering <lennart@poettering.net>
Tue, 14 Jul 2020 14:59:22 +0000 (16:59 +0200)
committerLennart Poettering <lennart@poettering.net>
Tue, 14 Jul 2020 15:06:23 +0000 (17:06 +0200)
src/basic/process-util.h

index e0b52246ba5d539459f6a7b397d03cc5fd7f8540..49bb74ac0ff0c5e026253787628c2d61d8779863 100644 (file)
 #define procfs_file_alloca(pid, field)                                  \
         ({                                                              \
                 pid_t _pid_ = (pid);                                    \
-                const char *_r_;                                        \
+                const char *_field_ = (field);                          \
+                char *_r_;                                              \
                 if (_pid_ == 0) {                                       \
-                        _r_ = ("/proc/self/" field);                    \
+                        _r_ = newa(char, STRLEN("/proc/self/") + strlen(_field_) + 1); \
+                        strcpy(stpcpy(_r_, "/proc/self/"), _field_);    \
                 } else {                                                \
-                        _r_ = newa(char, STRLEN("/proc/") + DECIMAL_STR_MAX(pid_t) + 1 + sizeof(field)); \
-                        sprintf((char*) _r_, "/proc/"PID_FMT"/" field, _pid_); \
+                        _r_ = newa(char, STRLEN("/proc/") + DECIMAL_STR_MAX(pid_t) + 1 + strlen(_field_) + 1); \
+                        sprintf(_r_, "/proc/" PID_FMT "/%s", _pid_, _field_); \
                 }                                                       \
-                _r_;                                                    \
+                (const char*) _r_;                                      \
         })
 
 typedef enum ProcessCmdlineFlags {