Mercurial > emacs
comparison src/process.c @ 110829:4d672e9d91bf
Complement a coding system for encoding arguments and input to a process.
| author | Kenichi Handa <handa@m17n.org> |
|---|---|
| date | Thu, 30 Sep 2010 13:28:34 +0900 |
| parents | 44a0c766b765 |
| children | bec49af30c2f f2cb0d643a91 |
comparison
equal
deleted
inserted
replaced
| 110824:bf3b8d29e992 | 110829:4d672e9d91bf |
|---|---|
| 1725 val = XCDR (coding_systems); | 1725 val = XCDR (coding_systems); |
| 1726 else if (CONSP (Vdefault_process_coding_system)) | 1726 else if (CONSP (Vdefault_process_coding_system)) |
| 1727 val = XCDR (Vdefault_process_coding_system); | 1727 val = XCDR (Vdefault_process_coding_system); |
| 1728 } | 1728 } |
| 1729 XPROCESS (proc)->encode_coding_system = val; | 1729 XPROCESS (proc)->encode_coding_system = val; |
| 1730 /* Note: At this momemnt, the above coding system may leave | |
| 1731 text-conversion or eol-conversion unspecified. They will be | |
| 1732 decided after we read output from the process and decode it by | |
| 1733 some coding system, or just before we actually send a text to | |
| 1734 the process. */ | |
| 1730 } | 1735 } |
| 1731 | 1736 |
| 1732 | 1737 |
| 1733 XPROCESS (proc)->decoding_buf = make_uninit_string (0); | 1738 XPROCESS (proc)->decoding_buf = make_uninit_string (0); |
| 1734 XPROCESS (proc)->decoding_carryover = 0; | 1739 XPROCESS (proc)->decoding_carryover = 0; |
| 1767 if (SBYTES (tem) > 2 && SREF (tem, 0) == '/' | 1772 if (SBYTES (tem) > 2 && SREF (tem, 0) == '/' |
| 1768 && SREF (tem, 1) == ':') | 1773 && SREF (tem, 1) == ':') |
| 1769 tem = Fsubstring (tem, make_number (2), Qnil); | 1774 tem = Fsubstring (tem, make_number (2), Qnil); |
| 1770 | 1775 |
| 1771 { | 1776 { |
| 1777 Lisp_Object arg_encoding = Qnil; | |
| 1772 struct gcpro gcpro1; | 1778 struct gcpro gcpro1; |
| 1773 GCPRO1 (tem); | 1779 GCPRO1 (tem); |
| 1774 | 1780 |
| 1775 /* Encode the file name and put it in NEW_ARGV. | 1781 /* Encode the file name and put it in NEW_ARGV. |
| 1776 That's where the child will use it to execute the program. */ | 1782 That's where the child will use it to execute the program. */ |
| 1784 for (i = 3; i < nargs; i++) | 1790 for (i = 3; i < nargs; i++) |
| 1785 { | 1791 { |
| 1786 tem = Fcons (args[i], tem); | 1792 tem = Fcons (args[i], tem); |
| 1787 CHECK_STRING (XCAR (tem)); | 1793 CHECK_STRING (XCAR (tem)); |
| 1788 if (STRING_MULTIBYTE (XCAR (tem))) | 1794 if (STRING_MULTIBYTE (XCAR (tem))) |
| 1789 XSETCAR (tem, | 1795 { |
| 1790 code_convert_string_norecord | 1796 if (NILP (arg_encoding)) |
| 1791 (XCAR (tem), XPROCESS (proc)->encode_coding_system, 1)); | 1797 arg_encoding = (complement_process_encoding_system |
| 1798 (XPROCESS (proc)->encode_coding_system)); | |
| 1799 XSETCAR (tem, | |
| 1800 code_convert_string_norecord | |
| 1801 (XCAR (tem), arg_encoding, 1)); | |
| 1802 } | |
| 1792 } | 1803 } |
| 1793 | 1804 |
| 1794 UNGCPRO; | 1805 UNGCPRO; |
| 1795 } | 1806 } |
| 1796 | 1807 |
| 5688 if ((STRINGP (object) && STRING_MULTIBYTE (object)) | 5699 if ((STRINGP (object) && STRING_MULTIBYTE (object)) |
| 5689 || (BUFFERP (object) | 5700 || (BUFFERP (object) |
| 5690 && !NILP (XBUFFER (object)->enable_multibyte_characters)) | 5701 && !NILP (XBUFFER (object)->enable_multibyte_characters)) |
| 5691 || EQ (object, Qt)) | 5702 || EQ (object, Qt)) |
| 5692 { | 5703 { |
| 5704 p->encode_coding_system | |
| 5705 = complement_process_encoding_system (p->encode_coding_system); | |
| 5693 if (!EQ (Vlast_coding_system_used, p->encode_coding_system)) | 5706 if (!EQ (Vlast_coding_system_used, p->encode_coding_system)) |
| 5694 /* The coding system for encoding was changed to raw-text | 5707 { |
| 5695 because we sent a unibyte text previously. Now we are | 5708 /* The coding system for encoding was changed to raw-text |
| 5696 sending a multibyte text, thus we must encode it by the | 5709 because we sent a unibyte text previously. Now we are |
| 5697 original coding system specified for the current process. */ | 5710 sending a multibyte text, thus we must encode it by the |
| 5698 setup_coding_system (p->encode_coding_system, coding); | 5711 original coding system specified for the current process. |
| 5712 | |
| 5713 Another reason we comming here is that the coding system | |
| 5714 was just complemented and new one was returned by | |
| 5715 complement_process_encoding_system. */ | |
| 5716 setup_coding_system (p->encode_coding_system, coding); | |
| 5717 Vlast_coding_system_used = p->encode_coding_system; | |
| 5718 } | |
| 5699 coding->src_multibyte = 1; | 5719 coding->src_multibyte = 1; |
| 5700 } | 5720 } |
| 5701 else | 5721 else |
| 5702 { | 5722 { |
| 5703 /* For sending a unibyte text, character code conversion should | 5723 /* For sending a unibyte text, character code conversion should |
