+/**
+ * Tiny helper around putenv: add the variable name=value
+ *
+ * @param name name of the variable to set
+ * @param value value to set to the variable
+ *
+ * @return 0 in case of success or -1 in case of error (with errno set to ENOMEM)
+ */
+static int addenv(const char *name, const char *value)
+{
+ char *head, *middle;
+
+ head = malloc(2 + strlen(name) + strlen(value));
+ if (head == NULL) {
+ errno = ENOMEM;
+ return -1;
+ }
+ middle = stpcpy(head, name);
+ middle[0] = '=';
+ strcpy(&middle[1], value);
+ return putenv(head);
+}
+
+/**
+ * Tiny helper around addenv that export the real path
+ *
+ * @param name name of the variable to set
+ * @param path the path value to export to the variable
+ *
+ * @return 0 in case of success or -1 in case of error (with errno set to ENOMEM)
+ */
+static int addenv_realpath(const char *name, const char *path)
+{
+ char buffer[PATH_MAX];
+ char *p = realpath(path, buffer);
+ return p ? addenv(name, p) : -1;
+}
+
+/**
+ * Tiny helper around addenv that export an integer
+ *
+ * @param name name of the variable to set
+ * @param value the integer value to export
+ *
+ * @return 0 in case of success or -1 in case of error (with errno set to ENOMEM)
+ */
+static int addenv_int(const char *name, int value)
+{
+ char buffer[64];
+ snprintf(buffer, sizeof buffer, "%d", value);
+ return addenv(name, buffer);
+}
+