Allow Tux Paint to interpret ~ in save and data directory paths as home directory.

This commit is contained in:
Martin Fuhrer 2008-03-31 00:14:57 +00:00
parent 09945fe4ab
commit 3674ace83d

View file

@ -1487,6 +1487,7 @@ static void draw_image_title(int t, SDL_Rect dest);
static void handle_keymouse(SDLKey key, Uint8 updown);
static void handle_active(SDL_Event * event);
static char *remove_slash(char *path);
static char *replace_tilde(const char* const path);
#ifdef NO_SDLPANGO
static void anti_carriage_return(int left, int right, int cur_top,
int new_top, int cur_bot, int line_width);
@ -6599,11 +6600,15 @@ static void setup(int argc, char *argv[])
{
if (i < argc - 1)
{
char *dir;
if (savedir != NULL)
free(savedir);
savedir = strdup(argv[i + 1]);
remove_slash(savedir);
dir = strdup(argv[i + 1]);
remove_slash(dir);
savedir = replace_tilde(dir);
free(dir);
i++;
}
else
@ -6619,11 +6624,15 @@ static void setup(int argc, char *argv[])
{
if (i < argc - 1)
{
char *dir;
if (datadir != NULL)
free(datadir);
datadir = strdup(argv[i + 1]);
remove_slash(datadir);
dir = strdup(argv[i + 1]);
remove_slash(dir);
datadir = replace_tilde(dir);
free(dir);
i++;
}
else
@ -15846,8 +15855,11 @@ static void parse_options(FILE * fi)
#endif
else if (strstr(str, "savedir=") == str)
{
savedir = strdup(str + 8);
remove_slash(savedir);
char *dir;
dir = strdup(str + 8);
remove_slash(dir);
savedir = replace_tilde(dir);
free(dir);
#ifdef DEBUG
printf("savedir set to: %s\n", savedir);
@ -15855,8 +15867,11 @@ static void parse_options(FILE * fi)
}
else if (strstr(str, "datadir=") == str)
{
datadir = strdup(str + 8);
remove_slash(datadir);
char *dir;
dir = strdup(str + 8);
remove_slash(dir);
datadir = replace_tilde(dir);
free(dir);
#ifdef DEBUG
printf("datadir set to: %s\n", datadir);
@ -15995,6 +16010,30 @@ static char *remove_slash(char *path)
return path;
}
/* replace '~' at the beginning of a path with home directory */
static char *replace_tilde(const char* const path)
{
char *newpath;
int newlen;
int len = strlen(path);
if (!len)
return strdup("");
if (path[0] == '~')
{
newlen = strlen(getenv("HOME")) + len;
newpath = malloc(sizeof(char)*newlen);
sprintf(newpath, "%s%s", getenv("HOME"), path+1);
}
else
newpath = strdup(path);
return newpath;
}
/* For right-to-left languages, when word-wrapping, we need to
make sure the text doesn't end up going from bottom-to-top, too! */