return alist;
 }
 
-DEFUN ("get-char-attribute", Fget_char_attribute, 2, 2, 0, /*
+DEFUN ("get-char-attribute", Fget_char_attribute, 2, 3, 0, /*
 Return the value of CHARACTER's ATTRIBUTE.
+Return DEFAULT-VALUE if the value is not exist.
 */
-       (character, attribute))
+       (character, attribute, default_value))
 {
   Lisp_Object ccs;
 
 
       if (CHAR_ID_TABLE_P (encoding_table))
        return get_char_id_table (XCHAR (character), encoding_table);
-      else
-       return Qnil;
     }
   else
     {
            return ret;
        }
     }
-  return Qnil;
+  return default_value;
 }
 
 DEFUN ("put-char-attribute", Fput_char_attribute, 3, 3, 0, /*
 
       if (VECTORP (v))
        {
-         Lisp_Object cpos = Fget_char_attribute (character, ccs);
+         Lisp_Object cpos = Fget_char_attribute (character, ccs, Qnil);
          if (!NILP (cpos))
            {
              decoding_table_remove_char (v, dim, byte_offset, XINT (cpos));
 
   if (VECTORP (decoding_table))
     {
-      Lisp_Object cpos = Fget_char_attribute (character, ccs);
+      Lisp_Object cpos = Fget_char_attribute (character, ccs, Qnil);
 
       if (!NILP (cpos))
        {