diff options
| author | Richard M. Stallman | 1998-01-05 17:39:32 +0000 |
|---|---|---|
| committer | Richard M. Stallman | 1998-01-05 17:39:32 +0000 |
| commit | 30d57b8e6e138b354768ea8b218412e55e027bbc (patch) | |
| tree | 0dbf93de3a2ec87731e973fafb9af2cd625eec95 /src/callproc.c | |
| parent | 1d2fc6120d6a7f3f435506cdb69c76afe2b8a463 (diff) | |
| download | emacs-30d57b8e6e138b354768ea8b218412e55e027bbc.tar.gz emacs-30d57b8e6e138b354768ea8b218412e55e027bbc.zip | |
(Fcall_process): When deciding whether to encode args,
check them for multibyteness, don't check enable-multibyte-characters.
(Fcall_process): Use size_byte for the args.
(Fcall_process_region): Likewise for temp file.
(child_setup, getenv_internal, Fgetenv): Likewise.
Diffstat (limited to 'src/callproc.c')
| -rw-r--r-- | src/callproc.c | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/src/callproc.c b/src/callproc.c index 697a3befb1d..e1eff4f549d 100644 --- a/src/callproc.c +++ b/src/callproc.c | |||
| @@ -248,9 +248,15 @@ If you quit, the process is killed with SIGINT, or SIGKILL if you quit again.") | |||
| 248 | /* If arguments are supplied, we may have to encode them. */ | 248 | /* If arguments are supplied, we may have to encode them. */ |
| 249 | if (nargs >= 5) | 249 | if (nargs >= 5) |
| 250 | { | 250 | { |
| 251 | int must_encode = 0; | ||
| 252 | |||
| 253 | for (i = 0; i < nargs; i++) | ||
| 254 | if (STRING_MULTIBYTE (args[i])) | ||
| 255 | must_encode = 1; | ||
| 256 | |||
| 251 | if (!NILP (Vcoding_system_for_write)) | 257 | if (!NILP (Vcoding_system_for_write)) |
| 252 | val = Vcoding_system_for_write; | 258 | val = Vcoding_system_for_write; |
| 253 | else if (NILP (current_buffer->enable_multibyte_characters)) | 259 | else if (! must_encode) |
| 254 | val = Qnil; | 260 | val = Qnil; |
| 255 | else | 261 | else |
| 256 | { | 262 | { |
| @@ -439,7 +445,7 @@ If you quit, the process is killed with SIGINT, or SIGKILL if you quit again.") | |||
| 439 | for (i = 4; i < nargs; i++) | 445 | for (i = 4; i < nargs; i++) |
| 440 | { | 446 | { |
| 441 | int size = encoding_buffer_size (&argument_coding, | 447 | int size = encoding_buffer_size (&argument_coding, |
| 442 | XSTRING (args[i])->size); | 448 | XSTRING (args[i])->size_byte); |
| 443 | unsigned char *dummy1 = (unsigned char *) alloca (size); | 449 | unsigned char *dummy1 = (unsigned char *) alloca (size); |
| 444 | int produced, dummy; | 450 | int produced, dummy; |
| 445 | 451 | ||
| @@ -448,7 +454,8 @@ If you quit, the process is killed with SIGINT, or SIGKILL if you quit again.") | |||
| 448 | produced = encode_coding (&argument_coding, | 454 | produced = encode_coding (&argument_coding, |
| 449 | XSTRING (args[i])->data, | 455 | XSTRING (args[i])->data, |
| 450 | new_argv[i - 3], | 456 | new_argv[i - 3], |
| 451 | XSTRING (args[i])->size, size, &dummy); | 457 | XSTRING (args[i])->size_byte, |
| 458 | size, &dummy); | ||
| 452 | new_argv[i - 3][produced] = 0; | 459 | new_argv[i - 3][produced] = 0; |
| 453 | } | 460 | } |
| 454 | UNGCPRO; | 461 | UNGCPRO; |
| @@ -824,9 +831,9 @@ If you quit, the process is killed with SIGINT, or SIGKILL if you quit again.") | |||
| 824 | strcat (tempfile, "detmp.XXX"); | 831 | strcat (tempfile, "detmp.XXX"); |
| 825 | #endif | 832 | #endif |
| 826 | #else /* not DOS_NT */ | 833 | #else /* not DOS_NT */ |
| 827 | char *tempfile = (char *) alloca (XSTRING (Vtemp_file_name_pattern)->size + 1); | 834 | char *tempfile = (char *) alloca (XSTRING (Vtemp_file_name_pattern)->size_byte + 1); |
| 828 | bcopy (XSTRING (Vtemp_file_name_pattern)->data, tempfile, | 835 | bcopy (XSTRING (Vtemp_file_name_pattern)->data, tempfile, |
| 829 | XSTRING (Vtemp_file_name_pattern)->size + 1); | 836 | XSTRING (Vtemp_file_name_pattern)->size_byte + 1); |
| 830 | #endif /* not DOS_NT */ | 837 | #endif /* not DOS_NT */ |
| 831 | 838 | ||
| 832 | mktemp (tempfile); | 839 | mktemp (tempfile); |
| @@ -964,7 +971,7 @@ child_setup (in, out, err, new_argv, set_pgrp, current_dir) | |||
| 964 | register char *temp; | 971 | register char *temp; |
| 965 | register int i; | 972 | register int i; |
| 966 | 973 | ||
| 967 | i = XSTRING (current_dir)->size; | 974 | i = XSTRING (current_dir)->size_byte; |
| 968 | pwd_var = (char *) alloca (i + 6); | 975 | pwd_var = (char *) alloca (i + 6); |
| 969 | temp = pwd_var + 4; | 976 | temp = pwd_var + 4; |
| 970 | bcopy ("PWD=", pwd_var, 4); | 977 | bcopy ("PWD=", pwd_var, 4); |
| @@ -1159,7 +1166,7 @@ getenv_internal (var, varlen, value, valuelen) | |||
| 1159 | 1166 | ||
| 1160 | entry = XCONS (scan)->car; | 1167 | entry = XCONS (scan)->car; |
| 1161 | if (STRINGP (entry) | 1168 | if (STRINGP (entry) |
| 1162 | && XSTRING (entry)->size > varlen | 1169 | && XSTRING (entry)->size_byte > varlen |
| 1163 | && XSTRING (entry)->data[varlen] == '=' | 1170 | && XSTRING (entry)->data[varlen] == '=' |
| 1164 | #ifdef WINDOWSNT | 1171 | #ifdef WINDOWSNT |
| 1165 | /* NT environment variables are case insensitive. */ | 1172 | /* NT environment variables are case insensitive. */ |
| @@ -1170,7 +1177,7 @@ getenv_internal (var, varlen, value, valuelen) | |||
| 1170 | ) | 1177 | ) |
| 1171 | { | 1178 | { |
| 1172 | *value = (char *) XSTRING (entry)->data + (varlen + 1); | 1179 | *value = (char *) XSTRING (entry)->data + (varlen + 1); |
| 1173 | *valuelen = XSTRING (entry)->size - (varlen + 1); | 1180 | *valuelen = XSTRING (entry)->size_byte - (varlen + 1); |
| 1174 | return 1; | 1181 | return 1; |
| 1175 | } | 1182 | } |
| 1176 | } | 1183 | } |
| @@ -1189,7 +1196,7 @@ This function consults the variable ``process-environment'' for its value.") | |||
| 1189 | int valuelen; | 1196 | int valuelen; |
| 1190 | 1197 | ||
| 1191 | CHECK_STRING (var, 0); | 1198 | CHECK_STRING (var, 0); |
| 1192 | if (getenv_internal (XSTRING (var)->data, XSTRING (var)->size, | 1199 | if (getenv_internal (XSTRING (var)->data, XSTRING (var)->size_byte, |
| 1193 | &value, &valuelen)) | 1200 | &value, &valuelen)) |
| 1194 | return make_string (value, valuelen); | 1201 | return make_string (value, valuelen); |
| 1195 | else | 1202 | else |