@@ -348,16 +348,19 @@ int main(int argc, char **argv)
348348 * with the filenames passed as parameter of opkrun */
349349 char * * ptr ;
350350 unsigned int arg ;
351- for (arg = 0 , ptr = params .exec ; * ptr && arg < NB_PARAMS_MAX ; ptr ++ , arg ++ ) {
351+ int rom_arg ;
352+ for (arg = 0 , rom_arg = -1 , ptr = params .exec ; * ptr && arg < NB_PARAMS_MAX ; ptr ++ , arg ++ ) {
352353 if (!strcmp ("%f" , * ptr )) {
353354 if (!opk_argc ) {
354355 fprintf (stderr , "WARNING: OPK requires a file as parameter, but none was given\n" );
355356 } else {
357+ rom_arg = arg ;
356358 args [arg ] = realpath (* opk_argv ++ , NULL );
357359 if (-- opk_argc )
358360 fprintf (stderr , "WARNING: OPK requires only one file as parameter\n" );
359361 }
360362 } else if (!strcmp ("%F" , * ptr )) {
363+ rom_arg = arg ;
361364 while (opk_argc && arg < NB_PARAMS_MAX ) {
362365 args [arg ++ ] = realpath (* opk_argv ++ , NULL );
363366 opk_argc -- ;
@@ -367,11 +370,13 @@ int main(int argc, char **argv)
367370 if (!opk_argc ) {
368371 fprintf (stderr , "WARNING: OPK requires an URL as parameter, but none was given\n" );
369372 } else {
373+ rom_arg = arg ;
370374 args [arg ] = get_url (* opk_argv ++ );
371375 if (-- opk_argc )
372376 fprintf (stderr , "WARNING: OPK requires only one URL as parameter\n" );
373377 }
374378 } else if (!strcmp ("%U" , * ptr )) {
379+ rom_arg = arg ;
375380 while (opk_argc && arg < NB_PARAMS_MAX ) {
376381 args [arg ++ ] = get_url (* opk_argv ++ );
377382 opk_argc -- ;
@@ -422,69 +427,15 @@ int main(int argc, char **argv)
422427 if (params .needs_downscaling )
423428 enable_downscaling ();
424429
425- /* Apply keymaps if found */
426- char * dirc = strdup (args [arg - 1 ]);
427- char * dname = dirname (dirc );
428- char * basec = strdup (args [arg - 1 ]);
429- char * bname = basename (basec );
430- char * p , command [PATH_MAX ];
431- FILE * fp ;
432-
433- /* Initialize keymap command */
434- strcpy (command , "keymap " );
435-
436- /* Compute basename without suffix */
437- p = strrchr (bname , '.' );
438- if (p ) {
439- * p = '\0' ;
430+ /* Initialize keymap rom command */
431+ char command [PATH_MAX ];
432+ strcpy (command , "keymap rom" );
433+ if (rom_arg >= 0 ) {
434+ strcat (command , " " );
435+ strncat (command , args [rom_arg ], PATH_MAX - 1 );
440436 }
441-
442- /* Apply console (directory) keymap first, if any */
443- sprintf (& command [7 ], "%s/default_config.key" , dname );
444- if (!access (& command [7 ], R_OK )) {
445- fp = popen (command , "r" );
446- if (fp != NULL ) {
447- printf ("Applied console keymap command: \"%s\"\n" , command );
448- pclose (fp );
449- } else {
450- fprintf (stderr , "WARNING: Cannot apply console keymap command: \"%s\"\n" ,
451- command );
452- }
453- }
454-
455- /* Then apply OPk keymap, if any */
456- if (params .keymap != NULL ) {
457- if (params .keymap [0 ] == '/' ) {
458- sprintf (& command [7 ], params .keymap );
459- } else {
460- sprintf (& command [7 ], "%s/%s" , OPK_MOUNTPOINT , params .keymap );
461- }
462- if (!access (& command [7 ], R_OK )) {
463- fp = popen (command , "r" );
464- if (fp != NULL ) {
465- printf ("Applied FK-Keymap command: \"%s\"\n" , command );
466- pclose (fp );
467- } else {
468- fprintf (stderr , "WARNING: Cannot apply FK-Keymap command: \"%s\"\n" ,
469- command );
470- }
471- }
472- }
473-
474- /* Eventually apply game keymap, if any */
475- sprintf (& command [7 ], "%s/%s.key" , dname , bname );
476- if (!access (& command [7 ], R_OK )) {
477- fp = popen (command , "r" );
478- if (fp != NULL ) {
479- printf ("Applied game keymap command: \"%s\"\n" , command );
480- pclose (fp );
481- } else {
482- fprintf (stderr , "WARNING: Cannot apply game keymap command: \"%s\"\n" ,
483- command );
484- }
485- }
486- free (dirc );
487- free (basec );
437+ printf ("Applied keymap rom command: \"%s\"\n" , command );
438+ system (command );
488439
489440 /* Launch executable here */
490441 pid_t son = fork ();
@@ -497,7 +448,7 @@ int main(int argc, char **argv)
497448 execvp (args [0 ], args );
498449 }
499450
500- fp = fopen ("/var/run/funkey.pid" , "w" );
451+ FILE * fp = fopen ("/var/run/funkey.pid" , "w" );
501452 if (fp != NULL ) {
502453 fprintf (fp , "%d\n" , son );
503454 fclose (fp );
@@ -511,10 +462,7 @@ int main(int argc, char **argv)
511462 chdir ("/" );
512463
513464 /* Restore default keymap */
514- fp = popen ("keymap reset" , "r" );
515- if (fp != NULL ) {
516- pclose (fp );
517- }
465+ system ("keymap default" );
518466
519467 /** Multiple trials to unmount OPK_MOUNTPOINT */
520468 #define MAX_UMOUNT_TRIALS 100
0 commit comments