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:
parent
d985889b74
commit
1eccd2e042
6 changed files with 31 additions and 28 deletions
|
@ -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 )
|
||||
{
|
||||
|
|
|
@ -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 */
|
||||
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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:
|
||||
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue