chiark / gitweb /
core/killall: use procfs_file_alloca
[elogind.git] / src / shared / util.h
index cfb54939cd5d21730b4adcc3cf96a915a9dd58d8..6575f5681199108799b54dfa5fb5059538dce9b8 100644 (file)
@@ -21,6 +21,7 @@
   along with systemd; If not, see <http://www.gnu.org/licenses/>.
 ***/
 
+#include <alloca.h>
 #include <inttypes.h>
 #include <time.h>
 #include <sys/time.h>
@@ -696,3 +697,12 @@ int unlink_noerrno(const char *path);
                 strcpy(stpcpy(_c_, _a_), _b_);          \
                 _c_;                                    \
         })
+
+#define procfs_file_alloca(pid, field)                                  \
+        ({                                                              \
+                pid_t _pid_ = (pid);                                    \
+                char *_r_;                                              \
+                _r_ = alloca(sizeof("/proc/") -1 + DECIMAL_STR_MAX(pid_t) + 1 + sizeof(field)); \
+                sprintf(_r_, "/proc/%lu/" field, (unsigned long) _pid_); \
+                _r_;                                                    \
+        })