[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

[MD:1845]Bug?:user-real-login-name on Win9X



 不幸なことに私の使っている Windows98 では、日本語でログインできて
しまうので、dired が変になってしまいます。dired が変なのかと思って、

user-real-login-name

を C-u C-x C-e にて評価すると、

"\217\343\226\354 \223N\215K"

のように変な値で表示されてしまいます。少しは自分でやろうと思って
以下のように調べては見たのですが、

(1) user-real-login-name の定義
  Meadow-1.13b1/src/editfns.c(3289):
    DEFVAR_LISP ("user-real-login-name", &Vuser_real_login_name,
      "The user's name, based upon the real uid only.");

(2) Vuser_real_login_name の定義
  Meadow-1.13b1/src/editfns.c(72):
    Lisp_Object Vuser_real_login_name; /* login name of current user ID */

(3) Vuser_real_login_name を設定
  Meadow-1.13b1/src/editfns.c(72):
    init_editfns () の中
  Meadow-1.13b1/src/editfns.c(100):
    Vuser_real_login_name = build_string (pw ? pw->pw_name : "unknown");

(3-1) build_string の定義
  Meadow-1.13b1/src/alloc.c(398-403):
    Lisp_Object
    build_string (str)
         char *str;
    {
      return make_string (str, strlen (str));
    }

(3-2) make_string の定義
  Meadow-1.13b1/src/alloc.c(312-326):
    Lisp_Object
    make_string (contents, nbytes)
         char *contents;
         int nbytes;
    {
      register Lisp_Object val;
      int nchars = chars_in_text (contents, nbytes);
      val = make_uninit_multibyte_string (nchars, nbytes);
      bcopy (contents, XSTRING (val)->data, nbytes);
      if (STRING_BYTES (XSTRING (val)) == XSTRING (val)->size)
        SET_STRING_BYTES (XSTRING (val), -1);
      else
        register_composite_chars_string (val);
      return val;
    }

(3-3) make_uninit_multibyte_string の定義
  Meadow-1.13b1/src/alloc.c(1416):
   Lisp_Object make_uninit_multibyte_string (length, length_byte)

(4) pw->pw_name のpwを設定
  Meadow-1.13b1/src/editfns.c(94):
    pw = (struct passwd *) getpwuid (getuid ());

(5) getpwuid の定義
  Meadow-1.13b1/src/w32.c(214):
    struct passwd *
    getpwuid (int uid)
    {
      if (uid == the_passwd.pw_uid)
        return &the_passwd;
      return NULL;
    }

(6) the_passwd の定義
  Meadow-1.13b1/src/w32.c(176):
    static struct passwd the_passwd =

(7) the_passwd.pw_name の設定
  Meadow-1.13b1/src/w32.c(298-300):
    /* If security calls are not supported (presumably because we
       are running under Windows 95), fallback to this. */
    else if (GetUserName (name, &length))

make_uninit_multibyte_string に sjis 文字列が渡っているあたりが
原因かと思いますが、徐々に inside Mule の色合いが濃くなり、
断念!神様が集うメーリングリストにポストさせていただきます。

他力本願で恐縮ですが、よろしくお願いします。(^^;

--
uenox@xxxxxxxxxxxx
上野 哲幸