1
0
Fork 0
mirror of git://git.code.sf.net/p/cdesktopenv/code synced 2025-02-15 04:32:24 +00:00

dtlogin: make the language menu works.

This commit is contained in:
Liang Chang 2022-02-04 01:37:48 +08:00
parent d985889b74
commit 1eccd2e042
6 changed files with 31 additions and 28 deletions

View file

@ -1450,16 +1450,6 @@ SetTitle( char *name, char *ptr )
* *
*****************************************************************************/ *****************************************************************************/
#if defined (_AIX) && defined (_POWER)
#define GETTYPATH "/usr/sbin/getty"
#elif defined(__OpenBSD__)
#define GETTYPATH "/usr/libexec/getty"
#elif defined(__linux__)
#define GETTYPATH "/sbin/getty"
#else
#define GETTYPATH "/etc/getty"
#endif
static int static int
StartGetty( struct display *d ) StartGetty( struct display *d )
{ {

View file

@ -100,6 +100,7 @@
#define DEF_SUPATH "/usr/sbin:/usr/bin" /* same as ROOTPATH */ #define DEF_SUPATH "/usr/sbin:/usr/bin" /* same as ROOTPATH */
#define LANGLISTSIZE 2048 #define LANGLISTSIZE 2048
#define LANGUAGESIZE 50
#define DELIM " \t" /* delimiters in language list */ #define DELIM " \t" /* delimiters in language list */

View file

@ -51,6 +51,7 @@
* a simple linked list of known displays * a simple linked list of known displays
*/ */
# include <sys/mman.h>
# include "dm.h" # include "dm.h"
# include "vgmsg.h" # include "vgmsg.h"
@ -190,7 +191,7 @@ RemoveDisplay( struct display *old )
IfFree (d->peer); IfFree (d->peer);
IfFree (d->from); IfFree (d->from);
XdmcpDisposeARRAY8(&d->clientAddr); XdmcpDisposeARRAY8(&d->clientAddr);
IfFree (d->language); munmap (d->language, LANGUAGESIZE + 1);
IfFree (d->langList); IfFree (d->langList);
IfFree (d->utmpId); IfFree (d->utmpId);
IfFree (d->gettyLine); IfFree (d->gettyLine);
@ -216,8 +217,17 @@ RemoveDisplay( struct display *old )
struct display * struct display *
NewDisplay( char *name, char *class ) NewDisplay( char *name, char *class )
{ {
char *language;
struct display *d; struct display *d;
language = mmap (NULL, LANGUAGESIZE + 1, PROT_READ | PROT_WRITE,
MAP_SHARED | MAP_ANONYMOUS, -1, 0);
if (language == MAP_FAILED) {
LogOutOfMem (ReadCatalog(MC_LOG_SET,MC_LOG_NEW_DPY,MC_DEF_LOG_NEW_DPY));
return 0;
}
d = (struct display *) malloc (sizeof (struct display)); d = (struct display *) malloc (sizeof (struct display));
if (!d) { if (!d) {
LogOutOfMem (ReadCatalog(MC_LOG_SET,MC_LOG_NEW_DPY,MC_DEF_LOG_NEW_DPY)); LogOutOfMem (ReadCatalog(MC_LOG_SET,MC_LOG_NEW_DPY,MC_DEF_LOG_NEW_DPY));
@ -290,7 +300,7 @@ NewDisplay( char *name, char *class )
d->useChooser = 0; d->useChooser = 0;
d->clientAddr.data = NULL; d->clientAddr.data = NULL;
d->clientAddr.length = 0; d->clientAddr.length = 0;
d->language = NULL; d->language = language;
d->langList = NULL; d->langList = NULL;
d->utmpId = NULL; d->utmpId = NULL;
d->gettyLine = NULL; d->gettyLine = NULL;
@ -303,4 +313,3 @@ NewDisplay( char *name, char *class )
displays = d; displays = d;
return d; return d;
} }

View file

@ -672,6 +672,8 @@ LoadDisplayResources( struct display *d )
} }
} }
lang = d->language;
d->language = NULL;
for (i = 0; i < NUM_DISPLAY_RESOURCES; i++) { for (i = 0; i < NUM_DISPLAY_RESOURCES; i++) {
sprintf (name, "%s.%s.%s", AppName, sprintf (name, "%s.%s.%s", AppName,
@ -682,6 +684,13 @@ LoadDisplayResources( struct display *d )
(char **) (((char *) d) + DisplayResources[i].offset), DisplayResources[i].default_value); (char **) (((char *) d) + DisplayResources[i].offset), DisplayResources[i].default_value);
} }
if (!strlen(lang) && d->language && strlen(d->language))
*(strncpy(lang, d->language, LANGUAGESIZE) + LANGUAGESIZE) =
'\0';
free(d->language);
d->language = lang;
#ifdef _AIX #ifdef _AIX
if(d->language == NULL || strlen(d->language) == 0) if(d->language == NULL || strlen(d->language) == 0)
SetDefaultLanguage(d); SetDefaultLanguage(d);

View file

@ -2406,12 +2406,10 @@ RunGreeter( struct display *d, struct greet_info *greet,
Debug("Greeter returned language (NULL)\n"); Debug("Greeter returned language (NULL)\n");
if (strcmp(d->language, "default") == 0) { if (strcmp(d->language, "default") == 0)
int len = strlen(defaultLanguage) + 1; *(strncpy(d->language, defaultLanguage, LANGUAGESIZE) +
d->language = (d->language == NULL ? LANGUAGESIZE) = '\0';
malloc(len) : realloc (d->language, len));
strcpy(d->language, defaultLanguage);
}
return; return;
#ifdef BLS #ifdef BLS
case NOTIFY_BAD_SECLEVEL: case NOTIFY_BAD_SECLEVEL:
@ -2678,7 +2676,7 @@ ManageGreeter( struct display *d, struct greet_info *greet,
Debug("GREET_STATE_AUTHENTICATE\n"); Debug("GREET_STATE_AUTHENTICATE\n");
r = (ResponseChallenge *)state->response; r = (ResponseChallenge *)state->response;
if (greet->name == NULL) if (greet->name == NULL)
{ {
greet->name = strdup(((char *)r) + r->offResponse); greet->name = strdup(((char *)r) + r->offResponse);
@ -2805,17 +2803,14 @@ ManageGreeter( struct display *d, struct greet_info *greet,
*/ */
ResponseLang *r; ResponseLang *r;
char *lang; char *lang;
int len;
Debug("GREET_STATE_LANG\n"); Debug("GREET_STATE_LANG\n");
r = (ResponseLang *)state->response; r = (ResponseLang *)state->response;
lang = ((char *)r) + r->offLang; lang = ((char *)r) + r->offLang;
len = strlen(lang) + 1;
d->language = (d->language == NULL ? *(strncpy(d->language, lang, LANGUAGESIZE) + LANGUAGESIZE) = '\0';
malloc(len) : realloc(d->language, len));
strcpy(d->language, lang);
Debug("Language returned: %s\n", d->language); Debug("Language returned: %s\n", d->language);
} }
break; break;

View file

@ -766,7 +766,6 @@ SetDefaultLanguage(struct display *d)
* If LANG is set for hft, we need to change it for X. * If LANG is set for hft, we need to change it for X.
* Currently there are four hft LANG variables. * Currently there are four hft LANG variables.
*/ */
d->language = (char *)malloc(strlen(lang)+1);
if(strcmp(lang, "En_JP") == 0) if(strcmp(lang, "En_JP") == 0)
strcpy(d->language, "Ja_JP"); strcpy(d->language, "Ja_JP");
else if(strcmp(lang, "en_JP") == 0) else if(strcmp(lang, "en_JP") == 0)
@ -776,7 +775,7 @@ SetDefaultLanguage(struct display *d)
else if(strcmp(lang, "en_TW") == 0) else if(strcmp(lang, "en_TW") == 0)
strcpy(d->language, "zh_TW"); strcpy(d->language, "zh_TW");
else else
strcpy(d->language, lang); *(strncpy(d->language, lang, LANGUAGESIZE) + LANGUAGESIZE) = '\0';
} }
} }
#endif /* _AIX */ #endif /* _AIX */
@ -820,7 +819,7 @@ setLang( struct display *d, char **env , char *langptr)
if (set_def_lang) { if (set_def_lang) {
env = setEnv(env, "LANG", "C"); env = setEnv(env, "LANG", "C");
d->language = strdup("C"); strcpy(d->language, "C");
} }
return env; return env;
} }