diff --git a/.flatpak-builder/ccache/disabled/ccache.conf b/.flatpak-builder/ccache/disabled/ccache.conf new file mode 100644 index 0000000..4d6556c --- /dev/null +++ b/.flatpak-builder/ccache/disabled/ccache.conf @@ -0,0 +1 @@ +disable = true diff --git a/libhtmlw/meson.build b/libhtmlw/meson.build index 4b05082..4a63182 100644 --- a/libhtmlw/meson.build +++ b/libhtmlw/meson.build @@ -22,6 +22,7 @@ libhtmlw_static = static_library( 'htmlw', sources, dependencies: [openmotif, xmu], - include_directories: libhtmlw_inc + include_directories: libhtmlw_inc, + c_args: '-fcommon' ) diff --git a/libutils/checkDir.c b/libutils/checkDir.c new file mode 100644 index 0000000..9e5741c --- /dev/null +++ b/libutils/checkDir.c @@ -0,0 +1,18 @@ +#include +#include +#include + +int checkDir(char* directory) { + DIR *dir = opendir(directory); + if (dir) { + closedir(dir); + free (directory); + return 1; + } else if (ENOENT == errno) { + free (directory); + return 0; + } else { + free (directory); + return 0; + } +} diff --git a/libutils/checkDir.h b/libutils/checkDir.h new file mode 100644 index 0000000..7912efe --- /dev/null +++ b/libutils/checkDir.h @@ -0,0 +1 @@ +int checkDir(char* directory); diff --git a/libutils/createDir.c b/libutils/createDir.c new file mode 100644 index 0000000..47ba7a3 --- /dev/null +++ b/libutils/createDir.c @@ -0,0 +1,6 @@ +#include +#include + +void createDir(const char* directory) { + mkdir(directory, 0777); +} diff --git a/libutils/createDir.h b/libutils/createDir.h new file mode 100644 index 0000000..e8b5da3 --- /dev/null +++ b/libutils/createDir.h @@ -0,0 +1 @@ +void createDir(const char* directory); diff --git a/libutils/flatpakCheck.c b/libutils/flatpakCheck.c new file mode 100644 index 0000000..f4fbdfb --- /dev/null +++ b/libutils/flatpakCheck.c @@ -0,0 +1,34 @@ +#include +#include +#include +#include "isFlatpak.h" +#include "checkDir.h" +#include "createDir.h" + +char* flatpakCheck() { + char *checkFileName; + char *homeDirectory = getenv ("HOME"); + char *mosaicDirectory; + + if (isFlatpak()) { + char *xdgdatahome = getenv ("XDG_DATA_HOME"); + return xdgdatahome; + } + + checkFileName = (char *)malloc(( + strlen (getenv ("HOME") + strlen (".mosaic")) + )); + + sprintf (checkFileName, "%s/%s", homeDirectory, ".mosaic"); + + mosaicDirectory = (char *)malloc(( + strlen (homeDirectory + strlen("/") + strlen(".mosaic")) + )); + + sprintf(mosaicDirectory, "%s/%s", homeDirectory, ".mosaic"); + + if (!checkDir(checkFileName)) + createDir(mosaicDirectory); + + return mosaicDirectory; +} diff --git a/libutils/flatpakCheck.h b/libutils/flatpakCheck.h new file mode 100644 index 0000000..bc1f7c9 --- /dev/null +++ b/libutils/flatpakCheck.h @@ -0,0 +1 @@ +char* flatpakCheck(); diff --git a/libutils/isFlatpak.c b/libutils/isFlatpak.c new file mode 100644 index 0000000..b855fb5 --- /dev/null +++ b/libutils/isFlatpak.c @@ -0,0 +1,11 @@ +#include + +int isFlatpak() { + FILE *file; + if ((file = fopen("/.flatpak-info", "r"))) { + fclose(file); + return 1; + } else { + return 0; + } +} diff --git a/libutils/isFlatpak.h b/libutils/isFlatpak.h new file mode 100644 index 0000000..b6404dd --- /dev/null +++ b/libutils/isFlatpak.h @@ -0,0 +1 @@ +int isFlatpak(); diff --git a/libutils/meson.build b/libutils/meson.build new file mode 100644 index 0000000..54087f5 --- /dev/null +++ b/libutils/meson.build @@ -0,0 +1,14 @@ +sources = [ + 'checkDir.c', + 'createDir.c', + 'isFlatpak.c', + 'flatpakCheck.c' +] + +libutils_inc = include_directories('.') + +libutils_static = static_library( + 'utils', + sources, + include_directories: libutils_inc +) diff --git a/libwww2/meson.build b/libwww2/meson.build index 6b9bc97..972c562 100644 --- a/libwww2/meson.build +++ b/libwww2/meson.build @@ -44,6 +44,7 @@ libwww2_static = static_library( 'www2', sources, dependencies: compactstring, - include_directories: libwww2_inc + include_directories: libwww2_inc, + c_args: '-fcommon' ) diff --git a/meson.build b/meson.build index 3474c83..1a6a161 100644 --- a/meson.build +++ b/meson.build @@ -19,10 +19,12 @@ compactstring = declare_dependency(link_with: libcompactstring_static, include_d subdir('libwww2') subdir('libXmx') subdir('libhtmlw') +subdir('libutils') nut = declare_dependency(link_with: libnut_static, include_directories: include_dir) www2 = declare_dependency(link_with: libwww2_static, include_directories: include_dir) Xmx = declare_dependency(link_with: libXmx_static, include_directories: include_dir) htmlw = declare_dependency(link_with: libhtmlw_static, include_directories: include_dir) +utils = declare_dependency(link_with: libutils_static, include_directories: include_dir) subdir('src') diff --git a/src/cciBindings2.c b/src/cciBindings2.c index d4ba4e6..34c4707 100644 --- a/src/cciBindings2.c +++ b/src/cciBindings2.c @@ -63,6 +63,7 @@ #include "cciServer.h" #include "list.h" #include "memStuffForPipSqueeks.h" +#include #include "libwww2/HTFormat.h" @@ -455,7 +456,7 @@ int retVal; retVal = MCCIServerInitialize(portNumber); if (retVal) { /* Write port number to .mosaiccciport */ - char *home = getenv ("XDG_DATA_HOME"), *fnam; + char *home = flatpakCheck(), *fnam; FILE *fp; if (!home) diff --git a/src/globalhist.c b/src/globalhist.c index 9f521be..479aa51 100644 --- a/src/globalhist.c +++ b/src/globalhist.c @@ -58,6 +58,7 @@ #include "libhtmlw/HTML.h" #include #include "../libnut/system.h" +#include /*for memset*/ #include @@ -506,7 +507,7 @@ mo_status mo_wipe_global_history (mo_window *win) static char *cached_global_hist_fname = NULL; mo_status mo_setup_global_history (void) { - char *home = getenv ("XDG_DATA_HOME"); + char *home = flatpakCheck(); char *default_filename = get_pref_string(eGLOBAL_HISTORY_FILE); char *filename; FILE *fp; diff --git a/src/gui.c b/src/gui.c index c9c2ace..2ad3ef9 100644 --- a/src/gui.c +++ b/src/gui.c @@ -63,6 +63,7 @@ #include "pixmaps.h" #include "libnut/system.h" #include "libwww2/HTAABrow.h" +#include struct Proxy *noproxy_list = NULL, *proxy_list = NULL, *ReadProxies(); @@ -4516,7 +4517,7 @@ splash_goto: if (get_pref_string(ePERSONAL_EXTENSION_MAP)) { - char *home = getenv ("XDG_DATA_HOME"); + char *home = flatpakCheck(); if (!home) home = "/tmp"; @@ -4535,7 +4536,7 @@ splash_goto: global_type_map = get_pref_string(eGLOBAL_TYPE_MAP); if (get_pref_string(ePERSONAL_TYPE_MAP)) { - char *home = getenv ("XDG_DATA_HOME"); + char *home = flatpakCheck(); if (!home) home = "/tmp"; @@ -4673,7 +4674,7 @@ splash_goto: /* Write pid into "~/.mosaicpid". */ { - char *home = getenv ("XDG_DATA_HOME"), *fnam; + char *home = flatpakCheck(), *fnam; FILE *fp; if (!home) diff --git a/src/hotlist.c b/src/hotlist.c index 47615d9..bf05664 100644 --- a/src/hotlist.c +++ b/src/hotlist.c @@ -62,6 +62,7 @@ #include #include #include +#include #include "bitmaps/hotlist.xbm" #include "../libnut/system.h" @@ -1295,7 +1296,7 @@ mo_status mo_dump_hotlist (mo_hotlist *list) */ mo_status mo_setup_default_hotlist (void) { - char *home = getenv ("XDG_DATA_HOME"); + char *home = flatpakCheck(); char *default_filename = get_pref_string(eDEFAULT_HOTLIST_FILE); char *hot_filename = get_pref_string(eDEFAULT_HOT_FILE); char *filename; diff --git a/src/meson.build b/src/meson.build index 051cef2..d6dd6e8 100644 --- a/src/meson.build +++ b/src/meson.build @@ -51,6 +51,7 @@ exe = executable('Mosaic', sources, dependencies: [ Xmx, htmlw, nut, + utils, openmotif, libpng, libjpeg diff --git a/src/pan.c b/src/pan.c index 816290a..9f5e2d0 100644 --- a/src/pan.c +++ b/src/pan.c @@ -58,6 +58,7 @@ #include #include #include "libhtmlw/HTML.h" +#include /*for memset*/ #include @@ -450,7 +451,7 @@ mo_status mo_setup_pan_list (void) mo_init_pan (); - home = getenv ("XDG_DATA_HOME"); + home = flatpakCheck(); /* This shouldn't happen. */ if (!home)