mem bug, install games while browsing

This commit is contained in:
p.kosyh 2010-06-02 17:37:15 +00:00
parent bb1c124429
commit b844752bd8
5 changed files with 21 additions and 9 deletions

View file

@ -111,7 +111,7 @@ static void games_sort()
{
qsort(games, games_nr, sizeof(struct game), cmp_game);
}
int games_add(const char *path, const char *dir)
static int games_add(const char *path, const char *dir)
{
char *p;
if (!is_game(path, dir))
@ -146,6 +146,9 @@ int games_replace(const char *path, const char *dir)
return 0;
}
}
games = realloc(games, sizeof(struct game) * (1 + games_nr));
if (!games)
return -1;
return games_add(path, dir);
}
@ -2352,7 +2355,7 @@ int game_from_disk(void)
b = basename(b);
/* fprintf(stderr,"%s:%s\n", d, b); */
#ifdef _USE_UNPACK
p = game_tmp_path();
p = game_local_games_path(1);
fprintf(stderr,"Trying to install: %s\n", g);
if (!unpack(g, p) && zip_game_dirname[0]) {
games_replace(p, zip_game_dirname);

View file

@ -21,7 +21,7 @@ extern char *err_msg; /* last error message */
extern char game_cwd[]; /* current game cwd */
extern char *curgame_dir;
extern char *game_local_games_path(void);
extern char *game_local_games_path(int cr);
extern char *game_tmp_path(void);
extern int game_theme_select(const char *name);

View file

@ -158,7 +158,7 @@ int main(int argc, char **argv)
}
if (!nostdgames_sw)
games_lookup(game_local_games_path());
games_lookup(game_local_games_path(0));
if (noauto_sw)
opt_autosave = 0;

View file

@ -143,14 +143,18 @@ char *open_file_dialog(void)
#endif
}
char *game_local_games_path(void)
char *game_local_games_path(int cr)
{
struct passwd *pw;
pw = getpwuid(getuid());
if (!pw)
return NULL;
snprintf(local_games_path, sizeof(local_games_path) - 1 , "%s/.instead/games/", pw->pw_dir);
snprintf(local_games_path, sizeof(local_games_path) - 1 , "%s/.instead", pw->pw_dir);
if (mkdir(local_games_path, S_IRWXU) && errno != EEXIST)
return NULL;
strcat(local_games_path,"/games");
if (mkdir(local_games_path, S_IRWXU) && errno != EEXIST)
return NULL;
return local_games_path;
}

View file

@ -108,9 +108,14 @@ char *game_tmp_path(void)
return (char*)lpTempPathBuffer;
}
char *game_local_games_path(void)
char *game_local_games_path(int cr)
{
snprintf(local_games_path, sizeof(local_games_path) - 1 , "%s/instead/games/", app_dir());
snprintf(local_games_path, sizeof(local_games_path) - 1 , "%s/instead", app_dir());
if (mkdir(local_games_path) && errno != EEXIST)
return NULL;
strcat(local_games_path,"/games");
if (mkdir(local_games_path) && errno != EEXIST)
return NULL;
return local_games_path;
}