15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  This file is not licenced under the GPL like the rest of the code.
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Its is under the MIT license, to encourage reuse by cut-and-paste.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Copyright (c) 2007 Red Hat, inc
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Permission is hereby granted, free of charge, to any person
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  obtaining a copy of this software and associated documentation files
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  (the "Software"), to deal in the Software without restriction,
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  including without limitation the rights to use, copy, modify, merge,
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  publish, distribute, sublicense, and/or sell copies of the Software,
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  and to permit persons to whom the Software is furnished to do so,
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  subject to the following conditions:
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  The above copyright notice and this permission notice shall be
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  included in all copies or substantial portions of the Software.
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SOFTWARE.
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdio.h>
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdlib.h>
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string.h>
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xdg_user_dir_lookup_with_fallback:
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type: a string specifying the type of directory
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @fallback: value to use if the directory isn't specified by the user
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @returns: a newly allocated absolute pathname
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Looks up a XDG user directory of the specified type.
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Example of types are "DESKTOP" and "DOWNLOAD".
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * In case the user hasn't specified any directory for the specified
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * type the value returned is @fallback.
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The return value is newly allocated and must be freed with
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * free(). The return value is never NULL if @fallback != NULL, unless
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * out of memory.
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) **/
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static char *
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xdg_user_dir_lookup_with_fallback (const char *type, const char *fallback)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FILE *file;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  char *home_dir, *config_home, *config_file;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  char buffer[512];
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  char *user_dir;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  char *p, *d;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int len;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int relative;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  home_dir = getenv ("HOME");
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (home_dir == NULL)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    goto error;
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  config_home = getenv ("XDG_CONFIG_HOME");
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (config_home == NULL || config_home[0] == 0)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      config_file = (char*) malloc (strlen (home_dir) + strlen ("/.config/user-dirs.dirs") + 1);
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (config_file == NULL)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        goto error;
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      strcpy (config_file, home_dir);
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      strcat (config_file, "/.config/user-dirs.dirs");
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      config_file = (char*) malloc (strlen (config_home) + strlen ("/user-dirs.dirs") + 1);
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (config_file == NULL)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        goto error;
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      strcpy (config_file, config_home);
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      strcat (config_file, "/user-dirs.dirs");
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  file = fopen (config_file, "r");
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  free (config_file);
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (file == NULL)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    goto error;
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  user_dir = NULL;
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  while (fgets (buffer, sizeof (buffer), file))
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      /* Remove newline at end */
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      len = strlen (buffer);
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (len > 0 && buffer[len-1] == '\n')
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	buffer[len-1] = 0;
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      p = buffer;
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      while (*p == ' ' || *p == '\t')
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	p++;
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (strncmp (p, "XDG_", 4) != 0)
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	continue;
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      p += 4;
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (strncmp (p, type, strlen (type)) != 0)
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	continue;
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      p += strlen (type);
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (strncmp (p, "_DIR", 4) != 0)
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	continue;
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      p += 4;
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      while (*p == ' ' || *p == '\t')
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	p++;
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (*p != '=')
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	continue;
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      p++;
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      while (*p == ' ' || *p == '\t')
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	p++;
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (*p != '"')
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	continue;
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      p++;
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      relative = 0;
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (strncmp (p, "$HOME/", 6) == 0)
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	{
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	  p += 6;
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	  relative = 1;
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	}
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      else if (*p != '/')
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	continue;
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (relative)
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	{
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	  user_dir = (char*) malloc (strlen (home_dir) + 1 + strlen (p) + 1);
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          if (user_dir == NULL)
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            goto error2;
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	  strcpy (user_dir, home_dir);
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	  strcat (user_dir, "/");
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	}
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      else
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	{
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	  user_dir = (char*) malloc (strlen (p) + 1);
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          if (user_dir == NULL)
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            goto error2;
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	  *user_dir = 0;
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	}
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      d = user_dir + strlen (user_dir);
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      while (*p && *p != '"')
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	{
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	  if ((*p == '\\') && (*(p+1) != 0))
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	    p++;
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	  *d++ = *p++;
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	}
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      *d = 0;
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)error2:
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  fclose (file);
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (user_dir)
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return user_dir;
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error:
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (fallback)
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return strdup (fallback);
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return NULL;
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * xdg_user_dir_lookup:
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @type: a string specifying the type of directory
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @returns: a newly allocated absolute pathname
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Looks up a XDG user directory of the specified type.
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Example of types are "DESKTOP" and "DOWNLOAD".
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The return value is always != NULL (unless out of memory),
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * and if a directory
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * for the type is not specified by the user the default
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * is the home directory. Except for DESKTOP which defaults
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * to ~/Desktop.
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The return value is newly allocated and must be freed with
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * free().
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) **/
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)char *
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xdg_user_dir_lookup (const char *type)
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  char *dir, *home_dir, *user_dir;
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  dir = xdg_user_dir_lookup_with_fallback (type, NULL);
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (dir != NULL)
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return dir;
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  home_dir = getenv ("HOME");
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (home_dir == NULL)
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return strdup ("/tmp");
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /* Special case desktop for historical compatibility */
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (strcmp (type, "DESKTOP") == 0)
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      user_dir = (char*) malloc (strlen (home_dir) + strlen ("/Desktop") + 1);
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (user_dir == NULL)
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return NULL;
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      strcpy (user_dir, home_dir);
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      strcat (user_dir, "/Desktop");
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return user_dir;
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return strdup (home_dir);
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef STANDALONE_XDG_USER_DIR_LOOKUP
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)main (int argc, char *argv[])
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (argc != 2)
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      fprintf (stderr, "Usage %s <dir-type>\n", argv[0]);
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      exit (1);
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  printf ("%s\n", xdg_user_dir_lookup (argv[1]));
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return 0;
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
233