Blob Blame History Raw
--- src/cups-pdf.c.orig	2017-02-27 17:26:31.128115849 -0400
+++ src/cups-pdf.c	2017-02-27 16:51:39.304434210 -0400
@@ -443,6 +443,46 @@
   return;
 }
 
+static char *getdesktopdir(struct passwd *passwd) {
+  static char bufret[BUFSIZE];
+  char *need, *ret, buftmp[BUFSIZE];
+  FILE *fic;
+
+  // Default (if not found) = $HOME
+  ret=passwd->pw_dir;
+
+  snprintf(buftmp, BUFSIZE, "%s/.config/user-dirs.dirs", passwd->pw_dir);
+  fic = fopen(buftmp, "r");
+  if (fic) {
+    while (fgets(buftmp, BUFSIZE, fic)) {
+      need=strstr(buftmp, "XDG_DESKTOP_DIR=");
+      if (need) {
+        need+=16;
+        // Remove opening quote
+        if ((*need)=='"') need++;
+        if (memcmp(need, "$HOME", 5)) {
+          strncpy(bufret, need, BUFSIZE);
+        }
+        else {
+          snprintf(bufret, BUFSIZE, "%s%s", passwd->pw_dir, need+5);
+        }
+        // Remove closing quote
+        need=strrchr(bufret, '"');
+        if (need) *need=0;
+        // Return internal buffer
+        ret = bufret;
+        
+        log_event(CPDEBUG, "XDG_DESKTOP_DIR:", ret);
+      }
+    } 
+    fclose(fic);
+  }
+  else
+    log_event(CPERROR, "Can't read", buftmp);
+  return ret;
+}
+
+
 static char *preparedirname(struct passwd *passwd, char *uname) {
   int size;
   char bufin[BUFSIZE], bufout[BUFSIZE], *needle, *cptr;
@@ -453,6 +493,15 @@
 
   strncpy(bufin, Conf_Out, BUFSIZE);
   do {
+    needle=strstr(bufin, "${DESKTOP}");
+    if (needle == NULL)
+      break;
+    needle[0]='\0';
+    cptr=needle+10;
+    snprintf(bufout, BUFSIZE, "%s%s%s", bufin, getdesktopdir(passwd), cptr);
+    strncpy(bufin, bufout, BUFSIZE);
+  } while (needle != NULL);
+  do {
     needle=strstr(bufin, "${HOME}");
     if (needle == NULL)
       break;