Mercurial > hg > xemacs-beta
comparison src/buffer.c @ 2353:186992a01a13
[xemacs-hg @ 2004-10-28 10:41:35 by stephent]
fix record-buffer crash <87u0sf2ksj.fsf_-_@tleepslib.sk.tsukuba.ac.jp>
author | stephent |
---|---|
date | Thu, 28 Oct 2004 10:41:40 +0000 |
parents | 61855263cb07 |
children | ecf1ebac70d8 |
comparison
equal
deleted
inserted
replaced
2352:cae9d7b3fe76 | 2353:186992a01a13 |
---|---|
1372 */ | 1372 */ |
1373 (buffer)) | 1373 (buffer)) |
1374 { | 1374 { |
1375 REGISTER Lisp_Object lynk, prev; | 1375 REGISTER Lisp_Object lynk, prev; |
1376 struct frame *f = selected_frame (); | 1376 struct frame *f = selected_frame (); |
1377 | 1377 int buffer_found = 0; |
1378 | |
1379 CHECK_BUFFER (buffer); | |
1380 if (!BUFFER_LIVE_P (XBUFFER (buffer))) | |
1381 return Qnil; | |
1378 prev = Qnil; | 1382 prev = Qnil; |
1379 for (lynk = Vbuffer_alist; CONSP (lynk); lynk = XCDR (lynk)) | 1383 for (lynk = Vbuffer_alist; CONSP (lynk); lynk = XCDR (lynk)) |
1380 { | 1384 { |
1381 if (EQ (XCDR (XCAR (lynk)), buffer)) | 1385 if (EQ (XCDR (XCAR (lynk)), buffer)) |
1382 break; | 1386 { |
1387 buffer_found = 1; | |
1388 break; | |
1389 } | |
1383 prev = lynk; | 1390 prev = lynk; |
1384 } | 1391 } |
1385 /* Effectively do Vbuffer_alist = delq_no_quit (lynk, Vbuffer_alist) */ | 1392 if (buffer_found) |
1386 if (NILP (prev)) | 1393 { |
1387 Vbuffer_alist = XCDR (Vbuffer_alist); | 1394 /* Effectively do Vbuffer_alist = delq_no_quit (lynk, Vbuffer_alist) */ |
1395 if (NILP (prev)) | |
1396 Vbuffer_alist = XCDR (Vbuffer_alist); | |
1397 else | |
1398 XCDR (prev) = XCDR (XCDR (prev)); | |
1399 XCDR (lynk) = Vbuffer_alist; | |
1400 Vbuffer_alist = lynk; | |
1401 } | |
1388 else | 1402 else |
1389 XCDR (prev) = XCDR (XCDR (prev)); | 1403 Vbuffer_alist = Fcons (Fcons (Fbuffer_name(buffer), buffer), Vbuffer_alist); |
1390 XCDR (lynk) = Vbuffer_alist; | |
1391 Vbuffer_alist = lynk; | |
1392 | 1404 |
1393 /* That was the global one. Now do the same thing for the | 1405 /* That was the global one. Now do the same thing for the |
1394 per-frame buffer-alist. */ | 1406 per-frame buffer-alist. */ |
1407 buffer_found = 0; | |
1395 prev = Qnil; | 1408 prev = Qnil; |
1396 for (lynk = f->buffer_alist; CONSP (lynk); lynk = XCDR (lynk)) | 1409 for (lynk = f->buffer_alist; CONSP (lynk); lynk = XCDR (lynk)) |
1397 { | 1410 { |
1398 if (EQ (XCDR (XCAR (lynk)), buffer)) | 1411 if (EQ (XCDR (XCAR (lynk)), buffer)) |
1399 break; | 1412 { |
1413 buffer_found = 1; | |
1414 break; | |
1415 } | |
1400 prev = lynk; | 1416 prev = lynk; |
1401 } | 1417 } |
1402 /* Effectively do f->buffer_alist = delq_no_quit (lynk, f->buffer_alist) */ | 1418 if (buffer_found) |
1403 if (NILP (prev)) | 1419 { |
1404 f->buffer_alist = XCDR (f->buffer_alist); | 1420 /* Effectively do f->buffer_alist = delq_no_quit (lynk, f->buffer_alist) */ |
1421 if (NILP (prev)) | |
1422 f->buffer_alist = XCDR (f->buffer_alist); | |
1423 else | |
1424 XCDR (prev) = XCDR (XCDR (prev)); | |
1425 XCDR (lynk) = f->buffer_alist; | |
1426 f->buffer_alist = lynk; | |
1427 } | |
1405 else | 1428 else |
1406 XCDR (prev) = XCDR (XCDR (prev)); | 1429 f->buffer_alist = Fcons (Fcons (Fbuffer_name(buffer), buffer), |
1407 XCDR (lynk) = f->buffer_alist; | 1430 f->buffer_alist); |
1408 f->buffer_alist = lynk; | |
1409 | 1431 |
1410 return Qnil; | 1432 return Qnil; |
1411 } | 1433 } |
1412 | 1434 |
1413 DEFUN ("set-buffer-major-mode", Fset_buffer_major_mode, 1, 1, 0, /* | 1435 DEFUN ("set-buffer-major-mode", Fset_buffer_major_mode, 1, 1, 0, /* |