Skip to content

Commit

Permalink
Change Unix homepath to support XDG_DATA_HOME
Browse files Browse the repository at this point in the history
Existing installs continue to use ~/.q3a but new installs use
~/.local/share/q3a.

~/.local/share/q3a is always used if it exists. Otherwise it will use
~/.q3a if it exists or create ~/.local/share/q3a. This prevents
switching to ~/.q3a if another client creates it later.

This supports '+set com_homepath ".foo"' to override paths to ~/.foo and
~/.local/share/foo.
  • Loading branch information
zturtleman committed Jan 10, 2025
1 parent 3fb9006 commit 5201a07
Showing 1 changed file with 34 additions and 25 deletions.
59 changes: 34 additions & 25 deletions code/sys/sys_unix.c
Original file line number Diff line number Diff line change
Expand Up @@ -79,40 +79,49 @@ char *Sys_DefaultHomePath(void)
Q_strcat(homePath, sizeof(homePath), HOMEPATH_NAME_MACOSX);
}
#else
char origPath[ MAX_OSPATH ] = { 0 };

if( ( p = getenv( "FLATPAK_ID" ) ) != NULL && *p != '\0' )
{
if( ( p = getenv( "XDG_DATA_HOME" ) ) != NULL && *p != '\0' )
{
Com_sprintf(homePath, sizeof(homePath), "%s%c", p, PATH_SEP);
}
else if( ( p = getenv( "HOME" ) ) != NULL && *p != '\0' )
{
Com_sprintf(homePath, sizeof(homePath), "%s%c.local%cshare%c", p, PATH_SEP, PATH_SEP, PATH_SEP);
}

if( *homePath )
{
char *dir;

if(com_homepath->string[0])
dir = com_homepath->string;
else
dir = HOMEPATH_NAME_UNIX;

if(dir[0] == '.' && dir[1] != '\0')
dir++;

Q_strcat(homePath, sizeof(homePath), dir);
}
// don't use original homepath in Flatpak
}
else if( ( p = getenv( "HOME" ) ) != NULL )
{
Com_sprintf(origPath, sizeof(origPath), "%s%c", p, PATH_SEP);

if(com_homepath->string[0])
Q_strcat(origPath, sizeof(origPath), com_homepath->string);
else
Q_strcat(origPath, sizeof(origPath), HOMEPATH_NAME_UNIX);
}

if( ( p = getenv( "XDG_DATA_HOME" ) ) != NULL && *p != '\0' )
{
Com_sprintf(homePath, sizeof(homePath), "%s%c", p, PATH_SEP);
}
else if( ( p = getenv( "HOME" ) ) != NULL && *p != '\0' )
{
Com_sprintf(homePath, sizeof(homePath), "%s%c.local%cshare%c", p, PATH_SEP, PATH_SEP, PATH_SEP);
}

if( *homePath )
{
char *dir;

if(com_homepath->string[0])
Q_strcat(homePath, sizeof(homePath), com_homepath->string);
dir = com_homepath->string;
else
Q_strcat(homePath, sizeof(homePath), HOMEPATH_NAME_UNIX);
dir = HOMEPATH_NAME_UNIX;

if(dir[0] == '.' && dir[1] != '\0')
dir++;

Q_strcat(homePath, sizeof(homePath), dir);
}

if( *homePath == '\0' || ( *origPath != '\0' && access(origPath, F_OK) == 0 && access(homePath, F_OK) < 0 ) )
{
Q_strncpyz(homePath, origPath, sizeof(homePath));
}
#endif
}
Expand Down

0 comments on commit 5201a07

Please sign in to comment.