aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMiles Bader2007-12-06 00:46:18 +0000
committerMiles Bader2007-12-06 00:46:18 +0000
commite5e76c04310d287a56675876dd83e1089faba215 (patch)
treea4b4f1cc134e4fd5af42671ec6689e07afe48ff2 /src
parentb890d447fb56bfe9f2e4742eda4b3ab4b5f4b32a (diff)
parenta2afc99dbad3fa9a3170ad72c578451c3aea58a4 (diff)
downloademacs-e5e76c04310d287a56675876dd83e1089faba215.tar.gz
emacs-e5e76c04310d287a56675876dd83e1089faba215.zip
Merge from emacs--rel--22
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-943
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog43
-rw-r--r--src/image.c15
-rw-r--r--src/mac.c51
-rw-r--r--src/process.c1
-rw-r--r--src/sysdep.c9
-rw-r--r--src/unexmacosx.c103
-rw-r--r--src/w32proc.c9
-rw-r--r--src/xdisp.c8
8 files changed, 225 insertions, 14 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index d1507f7edde..f55e4ac786c 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,46 @@
12007-12-05 Magnus Henoch <mange@freemail.hu>
2
3 * process.c (make_process): Initialize pty_flag to 0.
4
52007-12-05 Jason Rumney <jasonr@gnu.org>
6
7 * image.c (xbm_load) [WINDOWSNT]: Shuffle the bits of directly
8 specified XBMs.
9
102007-12-05 Richard Stallman <rms@gnu.org>
11
12 * xdisp.c (syms_of_xdisp) <scroll-conservatively>: Doc fix.
13
142007-12-05 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
15
16 * mac.c (cfsockets_for_select) [MAC_OSX && SELECT_USE_CFSOCKET]:
17 New variable.
18 (mac_try_close_socket) [MAC_OSX]: New function.
19 [MAC_OSX] (sys_select) [SELECT_USE_CFSOCKET]:
20 Update cfsockets_for_select. Replace invalid CFRunLoop source.
21
22 * sysdep.c (emacs_close) [MAC_OSX && HAVE_CARBON]:
23 Use mac_try_close_socket.
24
252007-12-05 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
26
27 * unexmacosx.c (unrelocate): New argument BASE. Use it instead of
28 reloc_base.
29 (copy_dysymtab): Compute relocation base here.
30 (rebase_reloc_address) [__ppc64__]: New function.
31 (copy_dysymtab) [__ppc64__]: Use it if relocation base needs to be
32 changed.
33
342007-12-05 Jason Rumney <jasonr@gnu.org>
35
36 * w32proc.c (sys_spawnve): Quote args with wildcards.
37
382007-12-05 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
39
40 * unexmacosx.c (copy_data_segment): Also copy __gcc_except_tab and
41 __objc_* sections.
42 (unrelocate) [_LP64]: Set relocation base to address of data segment.
43
12007-12-05 Michael Albinus <michael.albinus@gmx.de> 442007-12-05 Michael Albinus <michael.albinus@gmx.de>
2 45
3 * dbusbind.c (xd_read_message): Return value is a Lisp_Object. 46 * dbusbind.c (xd_read_message): Return value is a Lisp_Object.
diff --git a/src/image.c b/src/image.c
index 91be3f4b57e..a9b1e9835ed 100644
--- a/src/image.c
+++ b/src/image.c
@@ -3128,6 +3128,8 @@ convert_mono_to_color_image (f, img, foreground, background)
3128 release_frame_dc (f, hdc); 3128 release_frame_dc (f, hdc);
3129 old_prev = SelectObject (old_img_dc, img->pixmap); 3129 old_prev = SelectObject (old_img_dc, img->pixmap);
3130 new_prev = SelectObject (new_img_dc, new_pixmap); 3130 new_prev = SelectObject (new_img_dc, new_pixmap);
3131 /* Windows convention for mono bitmaps is black = background,
3132 white = foreground. */
3131 SetTextColor (new_img_dc, background); 3133 SetTextColor (new_img_dc, background);
3132 SetBkColor (new_img_dc, foreground); 3134 SetBkColor (new_img_dc, foreground);
3133 3135
@@ -3523,6 +3525,19 @@ xbm_load (f, img)
3523 else 3525 else
3524 bits = XBOOL_VECTOR (data)->data; 3526 bits = XBOOL_VECTOR (data)->data;
3525 3527
3528#ifdef WINDOWSNT
3529 {
3530 char *invertedBits;
3531 int nbytes, i;
3532 /* Windows mono bitmaps are reversed compared with X. */
3533 invertedBits = bits;
3534 nbytes = (img->width + BITS_PER_CHAR - 1) / BITS_PER_CHAR
3535 * img->height;
3536 bits = (char *) alloca(nbytes);
3537 for (i = 0; i < nbytes; i++)
3538 bits[i] = XBM_BIT_SHUFFLE (invertedBits[i]);
3539 }
3540#endif
3526 /* Create the pixmap. */ 3541 /* Create the pixmap. */
3527 3542
3528 Create_Pixmap_From_Bitmap_Data (f, img, bits, 3543 Create_Pixmap_From_Bitmap_Data (f, img, bits,
diff --git a/src/mac.c b/src/mac.c
index 75a606b60b3..9c1a08075f8 100644
--- a/src/mac.c
+++ b/src/mac.c
@@ -5004,6 +5004,10 @@ extern int noninteractive;
5004#if SELECT_USE_CFSOCKET 5004#if SELECT_USE_CFSOCKET
5005#define SELECT_TIMEOUT_THRESHOLD_RUNLOOP 0.2 5005#define SELECT_TIMEOUT_THRESHOLD_RUNLOOP 0.2
5006 5006
5007/* Dictionary of file descriptors vs CFSocketRef's allocated in
5008 sys_select. */
5009static CFMutableDictionaryRef cfsockets_for_select;
5010
5007static void 5011static void
5008socket_callback (s, type, address, data, info) 5012socket_callback (s, type, address, data, info)
5009 CFSocketRef s; 5013 CFSocketRef s;
@@ -5089,6 +5093,43 @@ select_and_poll_event (nfds, rfds, wfds, efds, timeout)
5089 return 0; 5093 return 0;
5090} 5094}
5091 5095
5096/* Clean up the CFSocket associated with the file descriptor FD in
5097 case the same descriptor is used in other threads later. If no
5098 CFSocket is associated with FD, then return 0 without closing FD.
5099 Otherwise, return 1 with closing FD. */
5100
5101int
5102mac_try_close_socket (fd)
5103 int fd;
5104{
5105#if SELECT_USE_CFSOCKET
5106 if (cfsockets_for_select)
5107 {
5108 void *key = (void *) fd;
5109 CFSocketRef socket =
5110 (CFSocketRef) CFDictionaryGetValue (cfsockets_for_select, key);
5111
5112 if (socket)
5113 {
5114#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1020
5115 CFOptionFlags flags = CFSocketGetSocketFlags (socket);
5116
5117 if (!(flags & kCFSocketCloseOnInvalidate))
5118 CFSocketSetSocketFlags (socket, flags | kCFSocketCloseOnInvalidate);
5119#endif
5120 BLOCK_INPUT;
5121 CFSocketInvalidate (socket);
5122 CFDictionaryRemoveValue (cfsockets_for_select, key);
5123 UNBLOCK_INPUT;
5124
5125 return 1;
5126 }
5127 }
5128#endif
5129
5130 return 0;
5131}
5132
5092int 5133int
5093sys_select (nfds, rfds, wfds, efds, timeout) 5134sys_select (nfds, rfds, wfds, efds, timeout)
5094 int nfds; 5135 int nfds;
@@ -5165,6 +5206,11 @@ sys_select (nfds, rfds, wfds, efds, timeout)
5165 CFDictionaryCreateMutable (NULL, 0, NULL, 5206 CFDictionaryCreateMutable (NULL, 0, NULL,
5166 &kCFTypeDictionaryValueCallBacks); 5207 &kCFTypeDictionaryValueCallBacks);
5167 5208
5209 if (cfsockets_for_select == NULL)
5210 cfsockets_for_select =
5211 CFDictionaryCreateMutable (NULL, 0, NULL,
5212 &kCFTypeDictionaryValueCallBacks);
5213
5168 for (minfd = 1; ; minfd++) /* nfds-1 works as a sentinel. */ 5214 for (minfd = 1; ; minfd++) /* nfds-1 works as a sentinel. */
5169 if (FD_ISSET (minfd, rfds) || (wfds && FD_ISSET (minfd, wfds))) 5215 if (FD_ISSET (minfd, rfds) || (wfds && FD_ISSET (minfd, wfds)))
5170 break; 5216 break;
@@ -5176,7 +5222,7 @@ sys_select (nfds, rfds, wfds, efds, timeout)
5176 CFRunLoopSourceRef source = 5222 CFRunLoopSourceRef source =
5177 (CFRunLoopSourceRef) CFDictionaryGetValue (sources, key); 5223 (CFRunLoopSourceRef) CFDictionaryGetValue (sources, key);
5178 5224
5179 if (source == NULL) 5225 if (source == NULL || !CFRunLoopSourceIsValid (source))
5180 { 5226 {
5181 CFSocketRef socket = 5227 CFSocketRef socket =
5182 CFSocketCreateWithNative (NULL, fd, 5228 CFSocketCreateWithNative (NULL, fd,
@@ -5186,11 +5232,12 @@ sys_select (nfds, rfds, wfds, efds, timeout)
5186 5232
5187 if (socket == NULL) 5233 if (socket == NULL)
5188 continue; 5234 continue;
5235 CFDictionarySetValue (cfsockets_for_select, key, socket);
5189 source = CFSocketCreateRunLoopSource (NULL, socket, 0); 5236 source = CFSocketCreateRunLoopSource (NULL, socket, 0);
5190 CFRelease (socket); 5237 CFRelease (socket);
5191 if (source == NULL) 5238 if (source == NULL)
5192 continue; 5239 continue;
5193 CFDictionaryAddValue (sources, key, source); 5240 CFDictionarySetValue (sources, key, source);
5194 CFRelease (source); 5241 CFRelease (source);
5195 } 5242 }
5196 CFRunLoopAddSource (runloop, source, kCFRunLoopDefaultMode); 5243 CFRunLoopAddSource (runloop, source, kCFRunLoopDefaultMode);
diff --git a/src/process.c b/src/process.c
index dc96bc27e78..0204388e672 100644
--- a/src/process.c
+++ b/src/process.c
@@ -631,6 +631,7 @@ make_process (name)
631 p->tick = 0; 631 p->tick = 0;
632 p->update_tick = 0; 632 p->update_tick = 0;
633 p->pid = 0; 633 p->pid = 0;
634 p->pty_flag = 0;
634 p->raw_status_new = 0; 635 p->raw_status_new = 0;
635 p->status = Qrun; 636 p->status = Qrun;
636 p->mark = Fmake_marker (); 637 p->mark = Fmake_marker ();
diff --git a/src/sysdep.c b/src/sysdep.c
index 81850919dd3..d1f378a3f87 100644
--- a/src/sysdep.c
+++ b/src/sysdep.c
@@ -3486,6 +3486,15 @@ emacs_close (fd)
3486 int did_retry = 0; 3486 int did_retry = 0;
3487 register int rtnval; 3487 register int rtnval;
3488 3488
3489#if defined (MAC_OSX) && defined (HAVE_CARBON)
3490 {
3491 extern int mac_try_close_socket P_ ((int));
3492
3493 if (mac_try_close_socket (fd))
3494 return 0;
3495 }
3496#endif
3497
3489 while ((rtnval = close (fd)) == -1 3498 while ((rtnval = close (fd)) == -1
3490 && (errno == EINTR)) 3499 && (errno == EINTR))
3491 did_retry = 1; 3500 did_retry = 1;
diff --git a/src/unexmacosx.c b/src/unexmacosx.c
index 3646aec6983..dadc19d52e3 100644
--- a/src/unexmacosx.c
+++ b/src/unexmacosx.c
@@ -819,7 +819,9 @@ copy_data_segment (struct load_command *lc)
819 || strncmp (sectp->sectname, "__la_sym_ptr2", 16) == 0 819 || strncmp (sectp->sectname, "__la_sym_ptr2", 16) == 0
820 || strncmp (sectp->sectname, "__dyld", 16) == 0 820 || strncmp (sectp->sectname, "__dyld", 16) == 0
821 || strncmp (sectp->sectname, "__const", 16) == 0 821 || strncmp (sectp->sectname, "__const", 16) == 0
822 || strncmp (sectp->sectname, "__cfstring", 16) == 0) 822 || strncmp (sectp->sectname, "__cfstring", 16) == 0
823 || strncmp (sectp->sectname, "__gcc_except_tab", 16) == 0
824 || strncmp (sectp->sectname, "__objc_", 7) == 0)
823 { 825 {
824 if (!unexec_copy (sectp->offset, old_file_offset, sectp->size)) 826 if (!unexec_copy (sectp->offset, old_file_offset, sectp->size))
825 unexec_error ("cannot copy section %s", sectp->sectname); 827 unexec_error ("cannot copy section %s", sectp->sectname);
@@ -898,12 +900,13 @@ copy_symtab (struct load_command *lc, long delta)
898 900
899/* Fix up relocation entries. */ 901/* Fix up relocation entries. */
900static void 902static void
901unrelocate (const char *name, off_t reloff, int nrel) 903unrelocate (const char *name, off_t reloff, int nrel, vm_address_t base)
902{ 904{
903 int i, unreloc_count; 905 int i, unreloc_count;
904 struct relocation_info reloc_info; 906 struct relocation_info reloc_info;
905 struct scattered_relocation_info *sc_reloc_info 907 struct scattered_relocation_info *sc_reloc_info
906 = (struct scattered_relocation_info *) &reloc_info; 908 = (struct scattered_relocation_info *) &reloc_info;
909 vm_address_t location;
907 910
908 for (unreloc_count = 0, i = 0; i < nrel; i++) 911 for (unreloc_count = 0, i = 0; i < nrel; i++)
909 { 912 {
@@ -917,14 +920,15 @@ unrelocate (const char *name, off_t reloff, int nrel)
917 switch (reloc_info.r_type) 920 switch (reloc_info.r_type)
918 { 921 {
919 case GENERIC_RELOC_VANILLA: 922 case GENERIC_RELOC_VANILLA:
920 if (reloc_info.r_address >= data_segment_scp->vmaddr 923 location = base + reloc_info.r_address;
921 && reloc_info.r_address < (data_segment_scp->vmaddr 924 if (location >= data_segment_scp->vmaddr
922 + data_segment_scp->vmsize)) 925 && location < (data_segment_scp->vmaddr
926 + data_segment_scp->vmsize))
923 { 927 {
924 off_t src_off = data_segment_old_fileoff 928 off_t src_off = data_segment_old_fileoff
925 + reloc_info.r_address - data_segment_scp->vmaddr; 929 + (location - data_segment_scp->vmaddr);
926 off_t dst_off = data_segment_scp->fileoff 930 off_t dst_off = data_segment_scp->fileoff
927 + reloc_info.r_address - data_segment_scp->vmaddr; 931 + (location - data_segment_scp->vmaddr);
928 932
929 if (!unexec_copy (dst_off, src_off, 1 << reloc_info.r_length)) 933 if (!unexec_copy (dst_off, src_off, 1 << reloc_info.r_length))
930 unexec_error ("unrelocate: %s:%d cannot copy original value", 934 unexec_error ("unrelocate: %s:%d cannot copy original value",
@@ -955,15 +959,73 @@ unrelocate (const char *name, off_t reloff, int nrel)
955 unreloc_count, nrel, name); 959 unreloc_count, nrel, name);
956} 960}
957 961
962#if __ppc64__
963/* Rebase r_address in the relocation table. */
964static void
965rebase_reloc_address (off_t reloff, int nrel, long linkedit_delta, long diff)
966{
967 int i;
968 struct relocation_info reloc_info;
969 struct scattered_relocation_info *sc_reloc_info
970 = (struct scattered_relocation_info *) &reloc_info;
971
972 for (i = 0; i < nrel; i++, reloff += sizeof (reloc_info))
973 {
974 if (lseek (infd, reloff - linkedit_delta, L_SET)
975 != reloff - linkedit_delta)
976 unexec_error ("rebase_reloc_table: cannot seek to reloc_info");
977 if (!unexec_read (&reloc_info, sizeof (reloc_info)))
978 unexec_error ("rebase_reloc_table: cannot read reloc_info");
979
980 if (sc_reloc_info->r_scattered == 0
981 && reloc_info.r_type == GENERIC_RELOC_VANILLA)
982 {
983 reloc_info.r_address -= diff;
984 if (!unexec_write (reloff, &reloc_info, sizeof (reloc_info)))
985 unexec_error ("rebase_reloc_table: cannot write reloc_info");
986 }
987 }
988}
989#endif
990
958/* Copy a LC_DYSYMTAB load command from the input file to the output 991/* Copy a LC_DYSYMTAB load command from the input file to the output
959 file, adjusting the file offset fields. */ 992 file, adjusting the file offset fields. */
960static void 993static void
961copy_dysymtab (struct load_command *lc, long delta) 994copy_dysymtab (struct load_command *lc, long delta)
962{ 995{
963 struct dysymtab_command *dstp = (struct dysymtab_command *) lc; 996 struct dysymtab_command *dstp = (struct dysymtab_command *) lc;
997 vm_address_t base;
964 998
965 unrelocate ("local", dstp->locreloff, dstp->nlocrel); 999#ifdef _LP64
966 unrelocate ("external", dstp->extreloff, dstp->nextrel); 1000#if __ppc64__
1001 {
1002 int i;
1003
1004 base = 0;
1005 for (i = 0; i < nlc; i++)
1006 if (lca[i]->cmd == LC_SEGMENT)
1007 {
1008 struct segment_command *scp = (struct segment_command *) lca[i];
1009
1010 if (scp->vmaddr + scp->vmsize > 0x100000000
1011 && (scp->initprot & VM_PROT_WRITE) != 0)
1012 {
1013 base = data_segment_scp->vmaddr;
1014 break;
1015 }
1016 }
1017 }
1018#else
1019 /* First writable segment address. */
1020 base = data_segment_scp->vmaddr;
1021#endif
1022#else
1023 /* First segment address in the file (unless MH_SPLIT_SEGS set). */
1024 base = 0;
1025#endif
1026
1027 unrelocate ("local", dstp->locreloff, dstp->nlocrel, base);
1028 unrelocate ("external", dstp->extreloff, dstp->nextrel, base);
967 1029
968 if (dstp->nextrel > 0) { 1030 if (dstp->nextrel > 0) {
969 dstp->extreloff += delta; 1031 dstp->extreloff += delta;
@@ -982,6 +1044,29 @@ copy_dysymtab (struct load_command *lc, long delta)
982 unexec_error ("cannot write symtab command to header"); 1044 unexec_error ("cannot write symtab command to header");
983 1045
984 curr_header_offset += lc->cmdsize; 1046 curr_header_offset += lc->cmdsize;
1047
1048#if __ppc64__
1049 /* Check if the relocation base needs to be changed. */
1050 if (base == 0)
1051 {
1052 vm_address_t newbase = 0;
1053 int i;
1054
1055 for (i = 0; i < num_unexec_regions; i++)
1056 if (unexec_regions[i].range.address + unexec_regions[i].range.size
1057 > 0x100000000)
1058 {
1059 newbase = data_segment_scp->vmaddr;
1060 break;
1061 }
1062
1063 if (newbase)
1064 {
1065 rebase_reloc_address (dstp->locreloff, dstp->nlocrel, delta, newbase);
1066 rebase_reloc_address (dstp->extreloff, dstp->nextrel, delta, newbase);
1067 }
1068 }
1069#endif
985} 1070}
986 1071
987/* Copy a LC_TWOLEVEL_HINTS load command from the input file to the output 1072/* Copy a LC_TWOLEVEL_HINTS load command from the input file to the output
diff --git a/src/w32proc.c b/src/w32proc.c
index c21d589c525..a14a8ee384c 100644
--- a/src/w32proc.c
+++ b/src/w32proc.c
@@ -781,7 +781,14 @@ sys_spawnve (int mode, char *cmdname, char **argv, char **envp)
781 variable in their environment. */ 781 variable in their environment. */
782 char ppid_env_var_buffer[64]; 782 char ppid_env_var_buffer[64];
783 char *extra_env[] = {ppid_env_var_buffer, NULL}; 783 char *extra_env[] = {ppid_env_var_buffer, NULL};
784 char *sepchars = " \t"; 784 /* These are the characters that cause an argument to need quoting.
785 Arguments with whitespace characters need quoting to prevent the
786 argument being split into two or more. Arguments with wildcards
787 are also quoted, for consistency with posix platforms, where wildcards
788 are not expanded if we run the program directly without a shell.
789 Some extra whitespace characters need quoting in Cygwin programs,
790 so this list is conditionally modified below. */
791 char *sepchars = " \t*?";
785 792
786 /* We don't care about the other modes */ 793 /* We don't care about the other modes */
787 if (mode != _P_NOWAIT) 794 if (mode != _P_NOWAIT)
diff --git a/src/xdisp.c b/src/xdisp.c
index eb0fda1fa91..22f51859eff 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -24160,8 +24160,12 @@ If you want scrolling to always be a line at a time, you should set
24160 24160
24161 DEFVAR_INT ("scroll-conservatively", &scroll_conservatively, 24161 DEFVAR_INT ("scroll-conservatively", &scroll_conservatively,
24162 doc: /* *Scroll up to this many lines, to bring point back on screen. 24162 doc: /* *Scroll up to this many lines, to bring point back on screen.
24163A value of zero means to scroll the text to center point vertically 24163If point moves off-screen, redisplay will scroll by up to
24164in the window. */); 24164`scroll-conservatively' lines in order to bring point just barely
24165onto the screen again. If that cannot be done, then redisplay
24166recenters point as usual.
24167
24168A value of zero means always recenter point if it moves off screen. */);
24165 scroll_conservatively = 0; 24169 scroll_conservatively = 0;
24166 24170
24167 DEFVAR_INT ("scroll-margin", &scroll_margin, 24171 DEFVAR_INT ("scroll-margin", &scroll_margin,