1
0
Fork 0
mirror of git://git.code.sf.net/p/cdesktopenv/code synced 2025-02-13 03: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
StartGetty( struct display *d )
{

View file

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

View file

@ -51,6 +51,7 @@
* a simple linked list of known displays
*/
# include <sys/mman.h>
# include "dm.h"
# include "vgmsg.h"
@ -190,7 +191,7 @@ RemoveDisplay( struct display *old )
IfFree (d->peer);
IfFree (d->from);
XdmcpDisposeARRAY8(&d->clientAddr);
IfFree (d->language);
munmap (d->language, LANGUAGESIZE + 1);
IfFree (d->langList);
IfFree (d->utmpId);
IfFree (d->gettyLine);
@ -216,8 +217,17 @@ RemoveDisplay( struct display *old )
struct display *
NewDisplay( char *name, char *class )
{
char *language;
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));
if (!d) {
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->clientAddr.data = NULL;
d->clientAddr.length = 0;
d->language = NULL;
d->language = language;
d->langList = NULL;
d->utmpId = NULL;
d->gettyLine = NULL;
@ -303,4 +313,3 @@ NewDisplay( char *name, char *class )
displays = 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++) {
sprintf (name, "%s.%s.%s", AppName,
@ -682,6 +684,13 @@ LoadDisplayResources( struct display *d )
(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
if(d->language == NULL || strlen(d->language) == 0)
SetDefaultLanguage(d);

View file

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

View file

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