]> skyeroc.xyz Git - dgamelaunch/commitdiff
Add new config file value 'mkdir', and allow variables in mkdir and chdir
authorPasi Kallinen <paxed@alt.org>
Sun, 1 Apr 2007 12:09:42 +0000 (12:09 +0000)
committerPasi Kallinen <paxed@alt.org>
Sun, 1 Apr 2007 12:09:42 +0000 (12:09 +0000)
git-svn-id: svn://katsu.triplehelix.org/dgamelaunch/trunk@355 db0b04b0-f4d1-0310-9a6d-de3e77497b0e

config.l
config.y
dgamelaunch.c
dgamelaunch.h
dgl-common.c
ttyrec.c

index 4823f05973ec4078d53fb887d05a8134cc6c4021..d41dcb5dff0ccc63bbc42d10a5806908c7226265 100644 (file)
--- a/config.l
+++ b/config.l
@@ -65,6 +65,7 @@ COMMENT               ^#.*
 "short_name"   { return TYPE_GAME_SHORT_NAME; }
 "game_path"    { return TYPE_PATH_GAME; }
 "chdir"                { return TYPE_PATH_CHDIR; }
+"mkdir"                { return TYPE_PATH_MKDIR; }
 "dglroot"      { return TYPE_PATH_DGLDIR; }
 "spooldir"     { return TYPE_PATH_SPOOL; }
 "banner"       { return TYPE_PATH_BANNER; }
index ff197ed3f70320b9c604b59795ee4f9b0d77d642..58a554eea1e1eee871a8fee35aca2280d149d766 100644 (file)
--- a/config.y
+++ b/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_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_BANNER TYPE_PATH_CANNED TYPE_PATH_CHROOT TYPE_GAMENUM
 %token TYPE_PATH_PASSWD TYPE_PATH_LOCKFILE TYPE_PATH_SAVEFILEFMT
@@ -149,6 +149,11 @@ KeyPair: KeyType '=' TYPE_VALUE {
       myconfig[ncnf]->chdir = strdup ($3);
       break;
 
+    case TYPE_PATH_MKDIR:
+      if (myconfig[ncnf]->mkdir) free(myconfig[ncnf]->mkdir);
+      myconfig[ncnf]->mkdir = strdup ($3);
+      break;
+
     case TYPE_PATH_DGLDIR:
       if (globalconfig.dglroot) free(globalconfig.dglroot);
       globalconfig.dglroot = strdup($3);
@@ -304,6 +309,7 @@ KeyType : TYPE_SUSER        { $$ = TYPE_SUSER; }
         | TYPE_NAME_GAME        { $$ = TYPE_NAME_GAME; }
        | TYPE_GAME_SHORT_NAME  { $$ = TYPE_GAME_SHORT_NAME; }
        | TYPE_PATH_CHDIR       { $$ = TYPE_PATH_CHDIR; }
+       | TYPE_PATH_MKDIR       { $$ = TYPE_PATH_MKDIR; }
        | TYPE_PATH_DGLDIR      { $$ = TYPE_PATH_DGLDIR; }
        | TYPE_PATH_SPOOL       { $$ = TYPE_PATH_SPOOL; }
        | TYPE_PATH_BANNER      { $$ = TYPE_PATH_BANNER; }
@@ -331,6 +337,7 @@ const char* lookup_token (int t)
     case TYPE_GAMENUM: return "game_num";
     case TYPE_PATH_CHROOT: return "chroot_path";
     case TYPE_PATH_CHDIR: return "chdir";
+    case TYPE_PATH_MKDIR: return "mkdir";
     case TYPE_PATH_GAME: return "game_path";
     case TYPE_NAME_GAME: return "game_name";
     case TYPE_GAME_SHORT_NAME: return "short_name";
index 866d4e0cd92207012cdd978f836895bcfce7503d..eaf3e68f26b1ab020679d319301df106c856ae7e 100644 (file)
@@ -1749,6 +1749,7 @@ main (int argc, char** argv)
   int c, i;
   int nhext = 0, nhauth = 0;
   int userchoice;
+  char *tmp;
 
 #ifndef HAVE_SETPROCTITLE
   /* save argc, argv */
@@ -1953,11 +1954,19 @@ main (int argc, char** argv)
 
   /* fix the variables in the arguments */
   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]);
       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 */
   ttyrec_main (userchoice, me->username, gen_ttyrec_filename());
 
index b89e7de19b6e52cc673ece7596a11c042fe3b8fc..af87eb305dd36fa928baf9e7643785496100aebb 100644 (file)
@@ -14,7 +14,7 @@
 
 
 /* max # of different games playable from within this dgl */
-#define DIFF_GAMES 3
+#define DIFF_GAMES 4
 
 struct dg_user
 {
@@ -48,6 +48,7 @@ struct dg_config
   char* game_name;
   char* shortname;
   char* chdir;
+  char* mkdir;
   char* rcfile;
   char* spool;
   char* savefilefmt;
index 7686d8c58a6f82b3ea600a83902c73ae6a43dd0f..f07c759e776b14c5f08d7d046ae8ea79459ab521 100644 (file)
@@ -23,6 +23,7 @@ struct dg_config defconfig = {
   /* game_name = */ "NetHack",
   /* shortname = */ "NH",
   /* chdir = */ NULL,
+  /* mkdir = */ NULL,
   /* dglroot = *//*  "/dgldir/",*/
   /* lockfile = */ /*"/dgl-lock",*/
   /* passwd = */ /*"/dgl-login",*/
index f0f925bf5be2e6ee7472e705e4613623bc47018d..c4a3b95944c6cbd6d40ca8be6123c178455674cf 100644 (file)
--- a/ttyrec.c
+++ b/ttyrec.c
@@ -271,6 +271,9 @@ doshell (int game, char *username)
   (void) dup2 (slave, 2);
   (void) close (slave);
 
+  if (myconfig[game]->mkdir)
+      (void) mkdir(myconfig[game]->mkdir, 0755);
+
   if (myconfig[game]->chdir)
       (void) chdir(myconfig[game]->chdir);