Commit graph

34294 commits

Author SHA1 Message Date
Dmitry Antipov
c54aa1668e Avoid character to byte conversions in motion subroutines.
* indent.h (compute_motion, vmotion): Add byte position argument.
* indent.c (compute_motion): Use it and avoid CHAR_TO_BYTE.
Add eassert.
(Fcompute_motion): Break long line.  Adjust call to compute_motion.
Use list5 for return value.
(vmotion): Use byte position argument and avoid call to CHAR_TO_BYTE.
Adjust comments, style and calls to compute_motion.
(Fvertical_motion): Adjust call to vmotion.
* window.c (Fdelete_other_windows_internal): Record window start
byte position and adjust call to vmotion.
(window_scroll_line_based): Likewise with call to compute_motion.
Use SET_PT_BOTH.
(Frecenter): Adjust calls to vmotion.
2013-03-07 08:42:59 +04:00
Dmitry Antipov
3de717bdb4 * lisp.h (list2i, list3i): New functions.
(list4i): Move from window.c and make LISP_INLINE.
* editfns.c (make_lisp_time):
* fns.c (Flocale_info):
* keyboard.c (parse_modifiers):
* xterm.c (x_ewmh_activate_frame): Use list2i.
* instel.c (signal_after_change):
* nsfns.m (Fx_server_version, Fxw_color_values):
* w32fns.c (Fxw_color_values, Fx_server_version):
* xfns.c (Fxw_color_values, Fx_server_version): Use list3i.
* fileio.c (Fvisited_file_modtime):
* nsfns.m (Fns_display_usable_bounds):
* w32.c (ltime): Use list4i.
2013-03-07 07:01:17 +04:00
Eli Zaretskii
a611149e46 Rename find_next_newline to find_newline_no_quit.
src/search.c (find_newline_no_quit): Rename from find_next_newline.
 Add commentary.
 src/lisp.h (find_newline_no_quit): Rename prototype.
 src/xdisp.c (back_to_previous_line_start)
 (forward_to_next_line_start, get_visually_first_element)
 (move_it_vertically_backward): Callers of find_newline_no_quit changed.
 src/indent.c (vmotion): Callers of find_newline_no_quit changed.
 src/bidi.c (bidi_find_paragraph_start): Callers of
 find_newline_no_quit changed.
2013-03-06 18:35:23 +02:00
Eli Zaretskii
d26e478eaa Fix bug #13879 with raw-text encoding of msdos.c.
src/msdos.c: Change encoding to cp850.  (Bug#13879)
 (fr_keyboard, it_keyboard, dk_keyboard): Update keyboard layouts.
2013-03-06 18:21:26 +02:00
Dmitry Antipov
1af1a51aad Coding system support cleanup and minor refactoring.
* coding.h (enum coding_result_code): Remove
CODING_RESULT_INCONSISTENT_EOL and CODING_RESULT_INSUFFICIENT_MEM.
(toplevel): Remove unused CODING_MODE_INHIBIT_INCONSISTENT_EOL.
(CODING_MODE_LAST_BLOCK, CODING_MODE_SELECTIVE_DISPLAY)
(CODING_MODE_DIRECTION, CODING_MODE_FIXED_DESTINATION)
(CODING_MODE_SAFE_ENCODING): Rearrange bit values.
(decode_coding_region, encode_coding_region, decode_coding_string):
Remove unused compatibility macros.
* coding.c (Qinconsistent_eol, Qinsufficient_memory): Remove.
(record_conversion_result): Adjust user.
(syms_of_coding): Likewise.
(ALLOC_CONVERSION_WORK_AREA): Use SAFE_ALLOCA.
(decode_coding, encode_coding): Add USE_SAFE_ALLOCA and SAFE_FREE.
(decode_coding_object): Simplify since xrealloc never returns NULL.
Add eassert.
2013-03-06 15:26:30 +04:00
Glenn Morris
0bafabe7b2 Merge from emacs-24; up to 2012-12-25T11:37:21Z!dmantipov@yandex.ru 2013-03-06 00:01:47 -08:00
Paul Eggert
0845a75c6a Fix a build failure on OpenBSD 4.x and MirBSD.
* sysdep.c (list_system_processes): Make it a stub on all BSD_SYSTEM
hosts, except for DARWIN_OS and FreeBSD where it's been tested.

Fixes: debbugs:13881
2013-03-05 23:46:09 -08:00
Dmitry Antipov
ffc65beee9 * lisp.h (find_next_newline_no_quit): Rename to find_next_newline.
* xdisp.c (back_to_previous_line_start, forward_to_next_line_start)
(get_visually_first_element, move_it_vertically_backward): Ajust users.
* bidi.c (bidi_find_paragraph_start): Likewise.
* indent.c (vmotion): Likewise.
2013-03-06 03:08:11 +04:00
Paul Eggert
707431575a FILE's lock is now always .#FILE and may be a regular file.
* etc/NEWS: Document this.
* nt/inc/unistd.h (O_NOFOLLOW): New macro.
* src/filelock.c: Include <c-ctype.h>.
(MAX_LFINFO): New top-level constant.
(lock_info_type): Remove members pid, boot_time.  Add members at,
dot, colon.  Change user member to be the entire buffer, not a
pointer.  This allows us to handle the case where a foreign
pid or boot time exceeds the local range.  All uses changed.
(LINKS_MIGHT_NOT_WORK): New constant.
(FREE_LOCK_INFO): Remove, as the pieces no longer need freeing.
(defined_WINDOWSNT): Remove.
(MAKE_LOCK_NAME, file_in_lock_file_name):
Always use .#FILE (not .#-FILE) for the file lock,
even if it is a regular file.
(rename_lock_file): New function.
(create_lock_file): Use it.
(create_lock_file, read_lock_data):
Prefer a symbolic link for the lock file, falling back on a
regular file if symlinks don't work.  Do not try to create
symlinks on MS-Windows, due to security hassles.  Stick with
POSIXish functions (open, read, write, close, fchmod, readlink, symlink,
link, rename, unlink, mkstemp) when creating locks, as a GNUish
host may be using a Windowsish file system, and cannot use
MS-Windows-only system calls.  Fall back on mktemp if mkstemp
doesn't work.  Don't fail merely because of a symlink-contents
length limit in the current file system; fall back on regular
files.  Increase the symlink contents length limit to 8 KiB, this
should be big enough for any real use and doesn't crunch the
stack.
(create_lock_file, lock_file_1, read_lock_data):
Simplify allocation of lock file buffers now that they fit in 8 KiB.
(lock_file_1): Return error number, not bool.  All callers changed.
(ELOOP): New macro, if not already defined.
(read_lock_data): Return size of lock file contents, not Lisp object.
All callers changed.  Handle a race condition if some other process
replaces a regular-file lock with a symlink lock or vice versa,
while we're trying to read the lock.
(current_lock_owner): Parse contents more carefully, to help avoid
confusing a regular-file lock with some other application's use
of the file.  Check for lock file contents being too long, or
not parsing correctly.
(current_lock_owner, lock_file):
Allow foreign pid and boot times that exceed the local range.
(current_lock_owner, lock_if_free, lock_file):
Simplify allocation of lock file contents.
* src/w32.c (sys_rename_replace): New function, containing most of
the contents of the old sys_rename.
(sys_rename): Use it.
(fchmod): New dummy function.
* src/w32.h (sys_rename_replace, fchmod): New decls.

Fixes: debbugs:13807
2013-03-05 14:35:41 -08:00
Paul Eggert
9b1c327138 Fix a build failure on OpenBSD 4.x and MirBSD.
* sysdep.c (list_system_processes) [__OpenBSD__ || __MirBSD__]:
Make it a stub in this case; otherwise the build might fail,
and even if the build worked the function would just return nil anyway.
Problem reported by Nelson H. F. Beebe in
<http://lists.gnu.org/archive/html/emacs-devel/2013-03/msg00021.html>
and analyzed by Jérémie Courrèges-Anglas in
<http://lists.gnu.org/archive/html/emacs-devel/2013-03/msg00062.html>.

Fixes: debbugs:13881
2013-03-05 13:56:36 -08:00
Eli Zaretskii
05e193f170 Don't sync charpos and bytepos in bidi_resolve_explicit_1.
src/bidi.c (bidi_resolve_explicit_1): Don't call CHAR_TO_BYTE or
 bidi_count_bytes, as the callers now arrange for bidi_it->charpos
 to be in sync with bidi_it->bytepos.  Suggested by Dmitry Antipov
 <dmantipov@yandex.ru>.
2013-03-05 20:12:25 +02:00
Paul Eggert
a2332e8da9 Remove stray character from license URL. 2013-03-04 23:10:55 -08:00
Glenn Morris
28b6b84d4e Merge from emacs-24; up to 2012-12-24T15:56:17Z!eliz@gnu.org 2013-03-04 19:59:35 -08:00
Paul Eggert
a318f81169 Also port to MirBSD. 2013-03-04 18:15:35 -08:00
Paul Eggert
725eb02724 Fix a build failure on OpenBSD 4.x.
* sysdep.c (KERN_PROC, kinfo_proc) [BSD_SYSTEM && !KERN_PROC]:
Define to KERN_PROC2 and kinfo_proc2, for OpenBSD 4.9.
list-system-processes still returns nil, but at least it doesn't crash.
Problem reported by Nelson H. F. Beebe in
<http://lists.gnu.org/archive/html/emacs-devel/2013-03/msg00021.html>.
2013-03-04 18:03:05 -08:00
Dmitry Antipov
3bfc46eb53 * composite.c (get_composition_id, fill_gstring_header):
Use make_uninit_vector where appropriate.
* font.c (Ffont_get_glyphs, build_style_table): Likewise.
* xselect.c (clean_local_selection_data): Likewise.
2013-03-05 05:48:30 +04:00
Paul Eggert
84ac6f9d21 Fix misuse of ImageMagick that caused core dump.
* image.c (imagemagick_load_image): Calculate height and width
after flattening the image, not before.

Fixes: debbugs:13846
2013-03-04 09:35:29 -08:00
Dmitry Antipov
42926ec878 * font.c (Ffont_get_glyphs): Use convenient LGLYPH_NEW.
* ftfont.c (ftfont_shape_by_flt): Likewise.
* w32uniscribe.c (uniscribe_shape): Likewise.
2013-03-04 11:41:01 +04:00
Paul Eggert
2db4137542 * filelock.c (lock_file): Don't access freed storage. 2013-03-02 13:05:52 -08:00
Paul Eggert
b5029e230d The lock for FILE is now .#FILE or .#-FILE.
The old approach, which fell back on DIR/.#FILE.0 through
DIR/.#FILE.9, had race conditions that could not be easily fixed.
If DIR/.#FILE is a non-symlink file, Emacs now does not create a
lock file for DIR/FILE; that is, DIR/FILE is no longer partly
protected by a lock if DIR/.#FILE is a non-symlink file ("partly"
because the locking mechanism was never reliable in that case).
This patch fixes this and other bugs discovered by a code
inspection that was prompted by
<http://lists.gnu.org/archive/html/emacs-devel/2013-02/msg00531.html>.
Also, this patch switches to .#-FILE (not .#FILE) on MS-Windows,
to avoid interoperability problems between the MS-Windows and
non-MS-Windows implementations.  MS-Windows and non-MS-Windows
instances of Emacs now ignore each others' locks.
* etc/NEWS: Document this.
* src/filelock.c (defined_WINDOWSNT): New constant.
(MAKE_LOCK_NAME, fill_in_lock_file_name):
Don't create DIR/.#FILE.0 through DIR/.#FILE.9.  Instead, create
DIR/.#FILE symlinks on non-MS-Windows hosts, and DIR/.#-FILE
regular files on MS-Windows hosts.
(MAKE_LOCK_NAME, unlock_file, Ffile_locked_p):
Use SAFE_ALLOCA to avoid problems with long file names.
(MAX_LFINFO): Now a local constant, not a global macro.
(IS_LOCK_FILE): Remove.
(lock_file_1): Don't inspect errno if symlink call succeeds;
that's not portable.
(lock_file): Document that this function can return if lock
creation fails.

Fixes: debbugs:13807
2013-03-02 12:41:53 -08:00
Glenn Morris
06b583dec7 Merge from emacs-24; up to 2012-12-23T17:06:58Z!eliz@gnu.org 2013-03-02 12:10:05 -08:00
Paul Eggert
81c23309e4 * textprop.c: Use bool for booleans.
(validate_interval_range, Fadd_text_properties)
(Fremove_text_properties): Prefer bool to int when either works.
2013-03-02 10:39:34 -08:00
Eli Zaretskii
18f2ac090d Protect against changes of interval tree when adding/removing text props.
src/textprop.c (Fadd_text_properties, Fremove_text_properties): If
 the interval tree changes as a side effect of calling
 modify_region, re-do processing starting from the call to
 validate_interval_range.  (Bug#13743)
2013-03-02 11:28:53 +02:00
Eli Zaretskii
c856b8d467 Revert last commit; fixed on emacs-24 branch instead. 2013-03-02 11:02:12 +02:00
Eli Zaretskii
474b43d90f Fix bug #13734 with errors in lisp.h macro expansion.
src/lisp.h (XPNTR) [!USE_LSB_TAG]: Fix parentheses nesting.
2013-03-02 10:19:45 +02:00
Andreas Schwab
b270d11649 Fixes: debbugs:13734
* lisp.h (XPNTR) [!USE_LSB_TAG]: Remove extra paren.
2013-03-02 08:48:18 +01:00
Glenn Morris
929aeac608 Merge from emacs-24; up to 2012-12-23T02:41:17Z!rgm@gnu.org 2013-02-27 22:30:48 -08:00
Eli Zaretskii
531e70eca4 Fix race conditions with MS-Windows lock files by using _sopen.
src/filelock.c (create_lock_file) [WINDOWSNT]: Use _sopen with
 _SH_DENYRW flag, instead of emacs_open, to deny any other process
 access to the lock file until it is written and closed.

Fixes: debbugs:13807
2013-02-27 20:37:31 +02:00
Eli Zaretskii
c49e225602 w32.c (sys_open): Don't reset the flags for FD in fd_info[].
Related to bug #13546.
2013-02-27 20:00:57 +02:00
Paul Eggert
6e65b9ccff Qcall_interactively and Qexecute_kbd_macro are now static. 2013-02-26 23:42:43 -08:00
Bastien Guerry
3b166f0908 * window.c (Frecenter): Tiny docstring enhancement. 2013-02-26 15:28:37 +01:00
Paul Eggert
ecc0fdd49e Minor textprop integer cleanup.
* intervals.h, textprop.c (add_text_properties_from_list):
Return void, not int, since nobody uses the return value.
* textprop.c (validate_plist, add_properties, remove_properties)
(Fadd_text_properties):
Don't assume list length fits in int.
(interval_has_all_properties, interval_has_some_properties)
(interval_has_some_properties_list, add_properties, remove_properties)
(Fadd_text_properties, Fremove_text_properties)
(Fremove_list_of_text_properties, text_property_stickiness):
Use bool for booleans.
(Fadd_text_properties, Fremove_text_properties):
(Fremove_list_of_text_properties):
Reindent do-while as per GNU style.
2013-02-25 19:09:08 -08:00
Eli Zaretskii
343a2aefb5 Implement CLASH_DETECTION for MS-Windows.
src/filelock.c [WINDOWSNT]: Include w32.h.
 (MAKE_LOCK_NAME): Don't use 'lock', it clashes with MS runtime
 function of that name.  Up-case the macro arguments.
 (IS_LOCK_FILE): New macro.
 (fill_in_lock_file_name): Use IS_LOCK_FILE instead of S_ISLNK.
 (create_lock_file): New function, with body extracted from
 lock_file_1.
 [WINDOWSNT]: Implement lock files by writing a regular file with
 the lock information as its contents.
 (read_lock_data): New function, on Posix platforms just calls
 emacs_readlinkat.
 [WINDOWSNT]: Read the lock info from the file.
 (current_lock_owner): Call read_lock_data instead of calling
 emacs_readlinkat directly.
 (lock_file) [WINDOWSNT]: Run the file name through
 dostounix_filename.
 src/w32proc.c (sys_kill): Support the case of SIG = 0, in which case
 just check if the process by that PID exists.
 src/w32.c (sys_open): Don't reset the _O_CREAT flag if _O_EXCL is
 also present, as doing so will fail to error out if the file
 already exists.
 src/makefile.w32-in ($(BLD)/filelock.$(O)): Depend on src/w32.h.

 nt/inc/ms-w32.h (BOOT_TIME_FILE): Define.
 nt/config.nt (CLASH_DETECTION): Define to 1.

 lisp/emacs-lisp/bytecomp.el (byte-recompile-directory): Reject files
 that match "\`\.#", to avoid compiling lock files, even if they
 are readable (as they are on MS-Windows).

 doc/emacs/files.texi (Interlocking): Don't refer to symlinks as the
 exclusive means of locking files.

 etc/NEWS: Mention support for lock files on MS-Windows.
2013-02-25 19:36:03 +02:00
Eli Zaretskii
0248b0d70b Fix bug #13743 with crashes due to recursive add-text-properties.
src/textprop.c (Fadd_text_properties, Fremove_text_properties)
 (Fremove_list_of_text_properties): Skip all of the intervals in
 the region between START and END that already have resp. don't
 have the requested properties, not just the first one.  Add
 assertions that the loop afterwards always modifies the
 properties.
2013-02-25 18:13:42 +02:00
Stefan Monnier
b5071fc755 * src/callint.c (Fcall_interactively): Use the right lexical environment
for `interactive' specs.
* src/eval.c (Feval): Accept a lexical environment.

Fixes: debbugs:13811
2013-02-25 11:05:49 -05:00
Paul Eggert
1ddc2bd6ff Simplify data_start configuration.
This is a followon simplification to the fix for Bug#13650.
* admin/CPP-DEFINES (DATA_START, ORDINARY_LINK): Remove.
* configure.ac (CRT_DIR, LIB_STANDARD, START_FILES, DATA_START)
(LD_FIRSTFLAG, ORDINARY_LINK, LIB_GCC): Remove.
(AC_CHECK_HEADERS_ONCE): Remove sys/resource.h, as it's
not always needed.
(HAVE_DATA_START): New macro.
* etc/PROBLEMS (LIBS_SYSTEM, LIBS_MACHINE, LIBS_STANDARD): Remove.
Remove legacy-systems section, as this stuff is no longer
applicable with current linking strategies.
* src/Makefile.in (LD_FIRSTFLAG, LIB_GCC, CRT_DIR, LIB_STANDARD)
(START_FILES): Remove.  All uses removed.
(otherobj): Remove $(VMLIMIT_OBJ), as it's now first.
(ALLOBJS): Move here from autodeps.mk, and with VMLIMITS_OBJ first.
(buildobj.h): Use it.
($(ALLOBJS)): Depend on globals.h.
(temacs$(EXEEXT)): Use $(ALLOBJS).
* src/autodeps.mk (ALLOBJS): Move to Makefile.in.
* src/deps.mk (vm-limit.o):
* src/makefile.w32-in ($(BLD)/vm-limit.$(O)):
Do not depend on mem-limits.h.
* src/emacs.c (__do_global_ctors, __do_global_ctors_aux)
(__do_global_dtors, __CTOR_LIST__, __DTOR_LIST__)
[__GNUC__ && !ORDINARY_LINK]: Remove.
* src/mem-limits.h, src/pre-crt0.c: Remove.
* src/unexaix.c, src/unexcoff.c: Don't include mem-limits.h.
* src/unexcoff.c (etext): New decl.
(make_hdr): Use it instead of start_of_data.
* src/vm-limit.c: Move most of mem-limits.h's contents here.
(data_start): New decl.  It's OK if this is approximate,
so simplify-away some unnecessary exactness.
(POINTER): Remove; all uses removed.
(data_space_start): Now char *, to avoid casts.
(exceeds_lisp_ptr): New function, replacing the old
EXCEEDS_LISP_PTR macro.  All uses changed.
(check_memory_limits): Simplify and remove casts.
(start_of_data) [!CANNOT_DUMP || !SYSTEM_MALLOC]: Remove.
(memory_warnings): Use data_start instead of start_of_data.

Fixes: debbugs:13783
2013-02-24 21:55:37 -08:00
Glenn Morris
1abfd3e85f Merge from emacs-24; up to 2012-12-22T19:09:52Z!rgm@gnu.org 2013-02-24 11:45:17 -08:00
Andreas Schwab
51aa2a8b79 Fixes: debbugs:13797
* xdisp.c (set_message): Only check for debug-on-message if STRING
is a string.
2013-02-24 09:09:24 +01:00
Paul Eggert
1938d88c74 Fix regression introduced by July 10 filelock.c patch.
* filelock.c (fill_in_lock_file_name): Fix crash caused by the
2012-07-10 patch to this file.  Reported by Eli Zaretskii in
<http://lists.gnu.org/archive/html/emacs-devel/2013-02/msg00533.html>
and diagnosed by Andreas Schwab in
<http://lists.gnu.org/archive/html/emacs-devel/2013-02/msg00534.html>.
2013-02-23 16:21:06 -08:00
Paul Eggert
fcee502812 Assume C89 or better.
* ralloc.c (SIZE, POINTER, NIL):
* vm-limit.c (POINTER):
Remove, replacing all uses with C89 equivalents.  These old
symbols were present only for porting to pre-C89 platforms.
2013-02-22 11:23:12 -08:00
Claudio Bley
d78cf5edf9 Don't call 'select' from emacs_gnutls_pull.
src/w32.c (emacs_gnutls_pull): Don't call 'select', and don't loop.
 This avoids warning messages reported as part of Bug#13546.
2013-02-22 18:00:14 +02:00
Ken Brown
6bcd97a44a * src/sheap.c (report_sheap_usage): Fix arguments of message1_no_log. 2013-02-20 21:35:33 -05:00
Stefan Monnier
e11dacb577 * src/sheap.c (report_sheap_usage): Prefer message1_nolog. 2013-02-20 16:02:37 -05:00
Stefan Monnier
b6c2bfff02 * lisp/simple.el (command-execute): Move from C. Add obsolete check.
(extended-command-history): Move from C.
* src/keyboard.c (Qcommand_execute): New var.
(command_loop_1, read_char): Use it.
(Fcommand_execute): Remove, replace by an Elisp implementation.
(syms_of_keyboard): Adjust accordingly.
2013-02-20 11:37:06 -05:00
Daniel Colascione
6181850468 * sheap.c (report_sheap_usage): Use message, not message1, so
that we don't try to create a buffer while we're in the middle
  of dumping Emacs.  Explain why.
2013-02-19 21:56:28 -08:00
Daniel Colascione
d69f1120d8 2013-02-19 Daniel Colascione <dancol@dancol.org>
* sheap.c (report_sheap_usage): Use message, not message1, so
       that we don't try to create a buffer while we're in the middle
       of dumping Emacs.  Explain why.
2013-02-19 21:43:53 -08:00
Dmitry Antipov
2a14a4f13c * search.c (find_newline): Return byte position in bytepos.
Adjust comment.
(find_next_newline_no_quit, find_before_next_newline): Add
bytepos argument.
* lisp.h (find_newline, find_next_newline_no_quit)
(find_before_next_newline): Adjust prototypes.
* bidi.c (bidi_find_paragraph_start):
* editfns.c (Fconstrain_to_field, Fline_end_position):
* indent.c (compute_motion, vmotion):
* xdisp.c (back_to_previous_line_start, forward_to_next_line_start):
(get_visually_first_element, move_it_vertically_backward):
Adjust users and avoid calls to CHAR_TO_BYTE where appropriate.
2013-02-20 09:18:20 +04:00
Paul Eggert
8b17a8b958 Spelling fixes. 2013-02-19 06:44:03 -08:00
Glenn Morris
872faefb07 Merge from emacs-24; up to 2012-12-20T16:09:05Z!dmantipov@yandex.ru 2013-02-18 19:29:28 -08:00
Eli Zaretskii
17ddfd150f Avoid leaking handles on MS-Windows.
src/w32proc.c (new_child): Avoid leaking handles if the subprocess
 resources were not orderly released.
2013-02-18 18:38:50 +02:00