diff --git a/legacy/efreet/src/tests/Makefile.am b/legacy/efreet/src/tests/Makefile.am index 13c1274166..1eae154153 100644 --- a/legacy/efreet/src/tests/Makefile.am +++ b/legacy/efreet/src/tests/Makefile.am @@ -16,7 +16,8 @@ bin_PROGRAMS = \ efreet_test \ efreet_spec_test \ efreet_cache_test \ -efreet_icon_cache_dump +efreet_icon_cache_dump \ +efreet_user_dir efreet_test_LDADD = $(top_builddir)/src/lib/libefreet.la \ $(top_builddir)/src/lib/libefreet_mime.la \ @@ -64,3 +65,6 @@ $(top_builddir)/src/lib/libefreet.la \ efreet_icon_cache_dump_SOURCES = \ efreet_icon_cache_dump.c + +efreet_user_dir_SOURCES = efreet_user_dir.c +efreet_user_dir_LDADD = $(top_builddir)/src/lib/libefreet.la @EFREET_LIBS@ diff --git a/legacy/efreet/src/tests/efreet_user_dir.c b/legacy/efreet/src/tests/efreet_user_dir.c new file mode 100644 index 0000000000..3c4bd60b7b --- /dev/null +++ b/legacy/efreet/src/tests/efreet_user_dir.c @@ -0,0 +1,276 @@ +#include + +static void +_print_data_home(void) +{ + const char *s = efreet_data_home_get(); + if (!s) return; + fputs(s, stdout); +} + +static void +_print_data_dirs(void) +{ + const Eina_List *itr, *lst = efreet_data_dirs_get(); + const char *s; + Eina_Bool first = EINA_TRUE; + + EINA_LIST_FOREACH(lst, itr, s) + { + if (first) + first = EINA_FALSE; + else + putchar(':'); + fputs(s, stdout); + } +} + +static void +_print_config_home(void) +{ + const char *s = efreet_config_home_get(); + if (!s) return; + fputs(s, stdout); +} + +static void +_print_config_dirs(void) +{ + const Eina_List *itr, *lst = efreet_config_dirs_get(); + const char *s; + Eina_Bool first = EINA_TRUE; + + EINA_LIST_FOREACH(lst, itr, s) + { + if (first) + first = EINA_FALSE; + else + putchar(':'); + fputs(s, stdout); + } +} + +static void +_print_cache_home(void) +{ + const char *s = efreet_cache_home_get(); + if (!s) return; + fputs(s, stdout); +} + +static void +_print_runtime_dir(void) +{ + const char *s = efreet_runtime_dir_get(); + if (!s) return; + fputs(s, stdout); +} + +static void +_print_desktop_dir(void) +{ + const char *s = efreet_desktop_dir_get(); + if (!s) return; + fputs(s, stdout); +} + +static void +_print_download_dir(void) +{ + const char *s = efreet_download_dir_get(); + if (!s) return; + fputs(s, stdout); +} + +static void +_print_templates_dir(void) +{ + const char *s = efreet_templates_dir_get(); + if (!s) return; + fputs(s, stdout); +} + +static void +_print_public_share_dir(void) +{ + const char *s = efreet_public_share_dir_get(); + if (!s) return; + fputs(s, stdout); +} + +static void +_print_documents_dir(void) +{ + const char *s = efreet_documents_dir_get(); + if (!s) return; + fputs(s, stdout); +} + +static void +_print_music_dir(void) +{ + const char *s = efreet_music_dir_get(); + if (!s) return; + fputs(s, stdout); +} + +static void +_print_pictures_dir(void) +{ + const char *s = efreet_pictures_dir_get(); + if (!s) return; + fputs(s, stdout); +} + +static void +_print_videos_dir(void) +{ + const char *s = efreet_videos_dir_get(); + if (!s) return; + fputs(s, stdout); +} + +struct var_alias { + const char *alias; + const char *name; +}; + +struct var_print { + const char *name; + void (*print)(void); +}; + +static const struct var_alias aliases[] = { + {"DATA_HOME", "XDG_DATA_HOME"}, + {"DATA_DIRS", "XDG_DATA_DIRS"}, + {"CONFIG_HOME", "XDG_CONFIG_HOME"}, + {"CONFIG_DIRS", "XDG_CONFIG_DIRS"}, + {"CACHE_HOME", "XDG_CACHE_HOME"}, + {"RUNTIME_DIR", "XDG_RUNTIME_DIR"}, + {"DESKTOP", "XDG_DESKTOP_DIR"}, + {"DOWNLOAD", "XDG_DOWNLOAD_DIR"}, + {"TEMPLATES", "XDG_TEMPLATES_DIR"}, + {"PUBLICSHARE", "XDG_PUBLICSHARE_DIR"}, + {"DOCUMENTS", "XDG_DOCUMENTS_DIR"}, + {"MUSIC", "XDG_MUSIC_DIR"}, + {"PICTURES", "XDG_PICTURES_DIR"}, + {"VIDEOS", "XDG_VIDEOS_DIR"}, + {NULL, NULL} +}; + +static const struct var_print printers[] = { + {"XDG_DATA_HOME", _print_data_home}, + {"XDG_DATA_DIRS", _print_data_dirs}, + {"XDG_CONFIG_HOME", _print_config_home}, + {"XDG_CONFIG_DIRS", _print_config_dirs}, + {"XDG_CACHE_HOME", _print_cache_home}, + {"XDG_RUNTIME_DIR", _print_runtime_dir}, + {"XDG_DESKTOP_DIR", _print_desktop_dir}, + {"XDG_DOWNLOAD_DIR", _print_download_dir}, + {"XDG_TEMPLATES_DIR", _print_templates_dir}, + {"XDG_PUBLICSHARE_DIR", _print_public_share_dir}, + {"XDG_DOCUMENTS_DIR", _print_documents_dir}, + {"XDG_MUSIC_DIR", _print_music_dir}, + {"XDG_PICTURES_DIR", _print_pictures_dir}, + {"XDG_VIDEOS_DIR", _print_videos_dir}, + {NULL, NULL} +}; + +static void +_print_do(const struct var_print *itr) +{ + printf("%s=", itr->name); + itr->print(); + putchar('\n'); +} + +static const struct var_print * +_resolve_printer(const char *alias) +{ + const struct var_print *p = printers; + const struct var_alias *a; + + for (; p->name != NULL; p++) + if (strcmp(p->name, alias) == 0) + return p; + + for (a = aliases; a->alias != NULL; a++) + if (strcmp(a->alias, alias) == 0) + { + for (p = printers; p->name != NULL; p++) + if (strcmp(p->name, a->name) == 0) + return p; + return NULL; + } + + return NULL; +} + +static void +_print(const char *alias) +{ + const struct var_print *itr = _resolve_printer(alias); + + if (!itr) + { + fprintf(stderr, "ERROR: unknown variable %s\n", alias); + return; + } + + _print_do(itr); +} + +static void +_print_all(void) +{ + const struct var_print *itr = printers; + for (; itr->name != NULL; itr++) + _print_do(itr); +} + +static void +_help(const char *prog) +{ + const struct var_print *itr = printers; + + printf("Usage:\n\n" + "\t%s [varname1] ... [varnameN]\n\n" + "Where varnameN is one of:\n", + prog); + + for (; itr->name != NULL; itr++) + printf("\t%s\n", itr->name); + putchar('\n'); +} + +int +main(int argc, char *argv[]) +{ + if (!efreet_init()) + { + fputs("ERROR: Could not initialize efreet!\n", stderr); + return EXIT_FAILURE; + } + + if (argc < 2) + _print_all(); + else + { + int i; + + for (i = 1; i < argc; i++) + if ((strcmp(argv[i], "-h") == 0) || + (strcmp(argv[i], "--help") == 0)) + { + _help(argv[0]); + goto end; + } + + for (i = 1; i < argc; i++) + _print(argv[i]); + } + + end: + efreet_shutdown(); + return EXIT_SUCCESS; +}