--- rxvt-unicode/src/init.C 2007/10/08 15:36:13 1.215 +++ rxvt-unicode/src/init.C 2007/10/28 11:25:04 1.220 @@ -43,6 +43,19 @@ #include +#ifdef HAVE_XSETLOCALE +# define X_LOCALE +# include +#else +# ifdef HAVE_SETLOCALE +# include +# endif +#endif + +#ifdef HAVE_NL_LANGINFO +# include +#endif + #ifdef DISPLAY_IS_IP /* On Solaris link with -lsocket and -lnsl */ #include @@ -355,15 +368,10 @@ if (!strcmp (argv[r_argc], "-e")) break; - r_argv = (const char **)rxvt_malloc (sizeof (char *) * (r_argc + 1)); - - for (i = 0; i < r_argc; i++) - r_argv[i] = (const char *)argv[i]; - - r_argv[i] = NULL; - if (r_argc == argc) cmd_argv = NULL; + else if (!argv[r_argc + 1]) + rxvt_fatal ("option '-e' requires an argument, aborting.\n"); else { cmd_argv = (const char **)rxvt_malloc (sizeof (char *) * (argc - r_argc)); @@ -374,6 +382,13 @@ cmd_argv[i] = NULL; } + r_argv = (const char **)rxvt_malloc (sizeof (char *) * (r_argc + 1)); + + for (i = 0; i < r_argc; i++) + r_argv[i] = (const char *)argv[i]; + + r_argv[i] = NULL; + rs[Rs_name] = rxvt_basename (argv[0]); /* @@ -386,7 +401,10 @@ get_options (r_argc, r_argv); if (!(display = displays.get (rs[Rs_display_name]))) - rxvt_fatal ("can't open display %s, aborting.\n", rs[Rs_display_name]); + { + free (r_argv); + rxvt_fatal ("can't open display %s, aborting.\n", rs[Rs_display_name]); + } // using a local pointer decreases code size a lot xa = display->xa; @@ -641,7 +659,7 @@ } - this->locale = rxvt_strdup (this->locale); + this->locale = strdup (this->locale); SET_LOCALE (this->locale); mbstate.reset (); #endif