mirror of
https://github.com/paxed/dgamelaunch.git
synced 2025-07-28 08:04:47 +02:00
Add new config file value 'mkdir', and allow variables in mkdir and chdir
git-svn-id: svn://katsu.triplehelix.org/dgamelaunch/trunk@355 db0b04b0-f4d1-0310-9a6d-de3e77497b0e
This commit is contained in:
parent
1feff8677b
commit
4e509075f4
1
config.l
1
config.l
@ -65,6 +65,7 @@ COMMENT ^#.*
|
|||||||
"short_name" { return TYPE_GAME_SHORT_NAME; }
|
"short_name" { return TYPE_GAME_SHORT_NAME; }
|
||||||
"game_path" { return TYPE_PATH_GAME; }
|
"game_path" { return TYPE_PATH_GAME; }
|
||||||
"chdir" { return TYPE_PATH_CHDIR; }
|
"chdir" { return TYPE_PATH_CHDIR; }
|
||||||
|
"mkdir" { return TYPE_PATH_MKDIR; }
|
||||||
"dglroot" { return TYPE_PATH_DGLDIR; }
|
"dglroot" { return TYPE_PATH_DGLDIR; }
|
||||||
"spooldir" { return TYPE_PATH_SPOOL; }
|
"spooldir" { return TYPE_PATH_SPOOL; }
|
||||||
"banner" { return TYPE_PATH_BANNER; }
|
"banner" { return TYPE_PATH_BANNER; }
|
||||||
|
9
config.y
9
config.y
@ -31,7 +31,7 @@ static const char* lookup_token (int t);
|
|||||||
}
|
}
|
||||||
|
|
||||||
%token TYPE_SUSER TYPE_SGROUP TYPE_SGID TYPE_SUID TYPE_MAX TYPE_MAXNICKLEN
|
%token TYPE_SUSER TYPE_SGROUP TYPE_SGID TYPE_SUID TYPE_MAX TYPE_MAXNICKLEN
|
||||||
%token TYPE_PATH_CHDIR TYPE_GAME_SHORT_NAME
|
%token TYPE_PATH_CHDIR TYPE_PATH_MKDIR TYPE_GAME_SHORT_NAME
|
||||||
%token TYPE_PATH_GAME TYPE_NAME_GAME TYPE_PATH_DGLDIR TYPE_PATH_SPOOL
|
%token TYPE_PATH_GAME TYPE_NAME_GAME TYPE_PATH_DGLDIR TYPE_PATH_SPOOL
|
||||||
%token TYPE_PATH_BANNER TYPE_PATH_CANNED TYPE_PATH_CHROOT TYPE_GAMENUM
|
%token TYPE_PATH_BANNER TYPE_PATH_CANNED TYPE_PATH_CHROOT TYPE_GAMENUM
|
||||||
%token TYPE_PATH_PASSWD TYPE_PATH_LOCKFILE TYPE_PATH_SAVEFILEFMT
|
%token TYPE_PATH_PASSWD TYPE_PATH_LOCKFILE TYPE_PATH_SAVEFILEFMT
|
||||||
@ -149,6 +149,11 @@ KeyPair: KeyType '=' TYPE_VALUE {
|
|||||||
myconfig[ncnf]->chdir = strdup ($3);
|
myconfig[ncnf]->chdir = strdup ($3);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case TYPE_PATH_MKDIR:
|
||||||
|
if (myconfig[ncnf]->mkdir) free(myconfig[ncnf]->mkdir);
|
||||||
|
myconfig[ncnf]->mkdir = strdup ($3);
|
||||||
|
break;
|
||||||
|
|
||||||
case TYPE_PATH_DGLDIR:
|
case TYPE_PATH_DGLDIR:
|
||||||
if (globalconfig.dglroot) free(globalconfig.dglroot);
|
if (globalconfig.dglroot) free(globalconfig.dglroot);
|
||||||
globalconfig.dglroot = strdup($3);
|
globalconfig.dglroot = strdup($3);
|
||||||
@ -304,6 +309,7 @@ KeyType : TYPE_SUSER { $$ = TYPE_SUSER; }
|
|||||||
| TYPE_NAME_GAME { $$ = TYPE_NAME_GAME; }
|
| TYPE_NAME_GAME { $$ = TYPE_NAME_GAME; }
|
||||||
| TYPE_GAME_SHORT_NAME { $$ = TYPE_GAME_SHORT_NAME; }
|
| TYPE_GAME_SHORT_NAME { $$ = TYPE_GAME_SHORT_NAME; }
|
||||||
| TYPE_PATH_CHDIR { $$ = TYPE_PATH_CHDIR; }
|
| TYPE_PATH_CHDIR { $$ = TYPE_PATH_CHDIR; }
|
||||||
|
| TYPE_PATH_MKDIR { $$ = TYPE_PATH_MKDIR; }
|
||||||
| TYPE_PATH_DGLDIR { $$ = TYPE_PATH_DGLDIR; }
|
| TYPE_PATH_DGLDIR { $$ = TYPE_PATH_DGLDIR; }
|
||||||
| TYPE_PATH_SPOOL { $$ = TYPE_PATH_SPOOL; }
|
| TYPE_PATH_SPOOL { $$ = TYPE_PATH_SPOOL; }
|
||||||
| TYPE_PATH_BANNER { $$ = TYPE_PATH_BANNER; }
|
| TYPE_PATH_BANNER { $$ = TYPE_PATH_BANNER; }
|
||||||
@ -331,6 +337,7 @@ const char* lookup_token (int t)
|
|||||||
case TYPE_GAMENUM: return "game_num";
|
case TYPE_GAMENUM: return "game_num";
|
||||||
case TYPE_PATH_CHROOT: return "chroot_path";
|
case TYPE_PATH_CHROOT: return "chroot_path";
|
||||||
case TYPE_PATH_CHDIR: return "chdir";
|
case TYPE_PATH_CHDIR: return "chdir";
|
||||||
|
case TYPE_PATH_MKDIR: return "mkdir";
|
||||||
case TYPE_PATH_GAME: return "game_path";
|
case TYPE_PATH_GAME: return "game_path";
|
||||||
case TYPE_NAME_GAME: return "game_name";
|
case TYPE_NAME_GAME: return "game_name";
|
||||||
case TYPE_GAME_SHORT_NAME: return "short_name";
|
case TYPE_GAME_SHORT_NAME: return "short_name";
|
||||||
|
@ -1749,6 +1749,7 @@ main (int argc, char** argv)
|
|||||||
int c, i;
|
int c, i;
|
||||||
int nhext = 0, nhauth = 0;
|
int nhext = 0, nhauth = 0;
|
||||||
int userchoice;
|
int userchoice;
|
||||||
|
char *tmp;
|
||||||
|
|
||||||
#ifndef HAVE_SETPROCTITLE
|
#ifndef HAVE_SETPROCTITLE
|
||||||
/* save argc, argv */
|
/* save argc, argv */
|
||||||
@ -1953,11 +1954,19 @@ main (int argc, char** argv)
|
|||||||
|
|
||||||
/* fix the variables in the arguments */
|
/* fix the variables in the arguments */
|
||||||
for (i = 0; i < myconfig[userchoice]->num_args; i++) {
|
for (i = 0; i < myconfig[userchoice]->num_args; i++) {
|
||||||
char *tmp = strdup(dgl_format_str(userchoice, me, myconfig[userchoice]->bin_args[i]));
|
tmp = strdup(dgl_format_str(userchoice, me, myconfig[userchoice]->bin_args[i]));
|
||||||
free(myconfig[userchoice]->bin_args[i]);
|
free(myconfig[userchoice]->bin_args[i]);
|
||||||
myconfig[userchoice]->bin_args[i] = tmp;
|
myconfig[userchoice]->bin_args[i] = tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tmp = strdup(dgl_format_str(userchoice, me, myconfig[userchoice]->mkdir));
|
||||||
|
free(myconfig[userchoice]->mkdir);
|
||||||
|
myconfig[userchoice]->mkdir = tmp;
|
||||||
|
|
||||||
|
tmp = strdup(dgl_format_str(userchoice, me, myconfig[userchoice]->chdir));
|
||||||
|
free(myconfig[userchoice]->chdir);
|
||||||
|
myconfig[userchoice]->chdir = tmp;
|
||||||
|
|
||||||
/* launch program */
|
/* launch program */
|
||||||
ttyrec_main (userchoice, me->username, gen_ttyrec_filename());
|
ttyrec_main (userchoice, me->username, gen_ttyrec_filename());
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
|
|
||||||
/* max # of different games playable from within this dgl */
|
/* max # of different games playable from within this dgl */
|
||||||
#define DIFF_GAMES 3
|
#define DIFF_GAMES 4
|
||||||
|
|
||||||
struct dg_user
|
struct dg_user
|
||||||
{
|
{
|
||||||
@ -48,6 +48,7 @@ struct dg_config
|
|||||||
char* game_name;
|
char* game_name;
|
||||||
char* shortname;
|
char* shortname;
|
||||||
char* chdir;
|
char* chdir;
|
||||||
|
char* mkdir;
|
||||||
char* rcfile;
|
char* rcfile;
|
||||||
char* spool;
|
char* spool;
|
||||||
char* savefilefmt;
|
char* savefilefmt;
|
||||||
|
@ -23,6 +23,7 @@ struct dg_config defconfig = {
|
|||||||
/* game_name = */ "NetHack",
|
/* game_name = */ "NetHack",
|
||||||
/* shortname = */ "NH",
|
/* shortname = */ "NH",
|
||||||
/* chdir = */ NULL,
|
/* chdir = */ NULL,
|
||||||
|
/* mkdir = */ NULL,
|
||||||
/* dglroot = *//* "/dgldir/",*/
|
/* dglroot = *//* "/dgldir/",*/
|
||||||
/* lockfile = */ /*"/dgl-lock",*/
|
/* lockfile = */ /*"/dgl-lock",*/
|
||||||
/* passwd = */ /*"/dgl-login",*/
|
/* passwd = */ /*"/dgl-login",*/
|
||||||
|
3
ttyrec.c
3
ttyrec.c
@ -271,6 +271,9 @@ doshell (int game, char *username)
|
|||||||
(void) dup2 (slave, 2);
|
(void) dup2 (slave, 2);
|
||||||
(void) close (slave);
|
(void) close (slave);
|
||||||
|
|
||||||
|
if (myconfig[game]->mkdir)
|
||||||
|
(void) mkdir(myconfig[game]->mkdir, 0755);
|
||||||
|
|
||||||
if (myconfig[game]->chdir)
|
if (myconfig[game]->chdir)
|
||||||
(void) chdir(myconfig[game]->chdir);
|
(void) chdir(myconfig[game]->chdir);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user