annotate netinstall/log.cc @ 4967:0d4c9d0f6a8d

rewrite dynarr code -------------------- ChangeLog entries follow: -------------------- src/ChangeLog addition: 2010-02-03 Ben Wing <ben@xemacs.org> * device-x.c (x_get_resource_prefix): * device-x.c (Fx_get_resource): * device-x.c (Fx_get_resource_prefix): * device-x.c (Fx_put_resource): * dialog-msw.c: * dialog-msw.c (handle_question_dialog_box): * dired-msw.c (mswindows_sort_files): * dired-msw.c (mswindows_get_files): * extents.c (extent_fragment_sort_by_priority): * extents.c (Fset_extent_parent): * file-coding.c (coding_reader): * file-coding.c (coding_writer): * file-coding.c (gzip_convert): * frame.c (generate_title_string): * gutter.c (calculate_gutter_size_from_display_lines): * indent.c (vmotion_1): * lread.c (read_bit_vector): * mule-coding.c (iso2022_decode): * rangetab.c: * rangetab.c (Fcopy_range_table): * rangetab.c (Fget_range_table): * rangetab.c (unified_range_table_copy_data): * redisplay-msw.c (mswindows_output_string): * redisplay-output.c (output_display_line): * redisplay-output.c (redisplay_move_cursor): * redisplay-output.c (redisplay_clear_bottom_of_window): * redisplay-tty.c (tty_output_ichar_dynarr): * redisplay-tty.c (set_foreground_to): * redisplay-tty.c (set_background_to): * redisplay-xlike-inc.c (XLIKE_output_string): * redisplay.c (redisplay_window_text_width_string): * redisplay.c (redisplay_text_width_string): * redisplay.c (create_text_block): * redisplay.c (SET_CURRENT_MODE_CHARS_PIXSIZE): * redisplay.c (generate_fstring_runes): * redisplay.c (regenerate_modeline): * redisplay.c (ensure_modeline_generated): * redisplay.c (real_current_modeline_height): * redisplay.c (create_string_text_block): * redisplay.c (regenerate_window): * redisplay.c (REGEN_INC_FIND_START_END): * redisplay.c (point_visible): * redisplay.c (redisplay_window): * redisplay.c (mark_glyph_block_dynarr): * redisplay.c (line_start_cache_start): * redisplay.c (start_with_line_at_pixpos): * redisplay.c (update_line_start_cache): * redisplay.c (glyph_to_pixel_translation): * redisplay.c (pixel_to_glyph_translation): * sysdep.c (qxe_readdir): * text.c (dfc_convert_to_external_format): * text.c (dfc_convert_to_internal_format): * toolbar-common.c (common_output_toolbar_button): * window.c (window_modeline_height): * window.c (Fwindow_last_line_visible_height): * window.c (window_displayed_height): * window.c (window_scroll): * window.c (get_current_pixel_pos): Use Dynarr_begin() in place of Dynarr_atp (foo, 0). * dynarr.c (Dynarr_realloc): * dynarr.c (Dynarr_lisp_realloc): * dynarr.c (Dynarr_resize): * dynarr.c (Dynarr_insert_many): * dynarr.c (Dynarr_delete_many): * dynarr.c (Dynarr_memory_usage): * dynarr.c (stack_like_malloc): * dynarr.c (stack_like_free): * lisp.h: * lisp.h (DECLARE_DYNARR_LISP_IMP): * lisp.h (XD_DYNARR_DESC): * lisp.h (Dynarr_pop): * gutter.c (output_gutter): * redisplay-output.c (sync_rune_structs): * redisplay-output.c (redisplay_output_window): Redo the dynarr code, add greater checks. Rename the `len', `largest' and `max' members to `len_', `largest_' and `max_' to try and catch existing places that might directly modify these values. Make new accessors Dynarr_largest() and Dynarr_max() and make them and existing Dynarr_length() be non-lvalues by adding '+ 0' to them; fix a couple of places in the redisplay code that tried to modify the length directly by setting Dynarr_length(). Use the accessors whenever possible even in the dynarr code itself. The accessors also verify that 0 <= len <= largest <= max. Rename settor function Dynarr_set_size() to Dynarr_set_length() and use it more consistently; also create lower-level Dynarr_set_length_1(). This latter function should be the only function that directly modifies the `len_' member of a Dynarr, and in the process makes sure that the `largest' value is kept correct. Consistently use ERROR_CHECK_STRUCTURES instead of ERROR_CHECK_TYPES for error-checking code. Reintroduce the temporarily disabled verification code on the positions of Dynarr_at(), Dynarr_atp() and Dynarr_atp_past_end(). Also create Dynarr_resize_if() in place of a repeated code fragment. Clean up all the functions that modify Dynarrs to use the new macros and functions and verify the correctness of the Dynarr both before and after the change. Note that there are two kinds of verification -- one for accessing and one for modifying. The difference is that the modify verification additionally checks to make sure that the Dynarr isn't locked. (This is used in redisplay to check for problems with reentrancy.) * lrecord.h: Move XD_DYNARR_DESC to lisp.h, grouping with the dynarr code.
author Ben Wing <ben@xemacs.org>
date Wed, 03 Feb 2010 20:51:18 -0600
parents 685b588e92d8
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
448
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
1 /*
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
2 * Copyright (c) 2000, Red Hat, Inc.
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
3 *
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
4 * This program is free software; you can redistribute it and/or modify
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
5 * it under the terms of the GNU General Public License as published by
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
6 * the Free Software Foundation; either version 2 of the License, or
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
7 * (at your option) any later version.
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
8 *
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
9 * A copy of the GNU General Public License can be found at
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
10 * http://www.gnu.org/
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
11 *
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
12 * Written by DJ Delorie <dj@redhat.com>
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
13 *
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
14 */
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
15
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
16 /* The purpose of this file is to centralize all the logging functions. */
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
17
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
18 #include "win32.h"
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
19 #include <stdio.h>
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
20 #include <stdarg.h>
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
21 #include <stdlib.h>
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
22 #include <time.h>
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
23
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
24 #include "resource.h"
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
25 #include "msg.h"
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
26 #include "log.h"
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
27 #include "dialog.h"
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
28 #include "state.h"
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
29 #include "concat.h"
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
30 #include "mkdir.h"
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
31
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
32 struct LogEnt {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
33 LogEnt *next;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
34 int flags;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
35 time_t when;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
36 char msg[1];
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
37 };
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
38
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
39 static LogEnt *first_logent = 0;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
40 static LogEnt **next_logent = &first_logent;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
41
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
42 void
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
43 log (int flags, char *fmt, ...)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
44 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
45 char buf[1000];
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
46 va_list args;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
47 va_start (args, fmt);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
48 vsprintf (buf, fmt, args);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
49
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
50 LogEnt *l = (LogEnt *) malloc (sizeof (LogEnt) + strlen (buf) + 20);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
51 l->next = 0;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
52 l->flags = flags;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
53 time (&(l->when));
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
54 *next_logent = l;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
55 next_logent = &(l->next);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
56
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
57 char *b = l->msg;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
58 if (flags & LOG_TIMESTAMP)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
59 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
60 struct tm *tm = localtime (&(l->when));
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
61 strftime (b, 1000, "%Y/%m/%d %H:%M:%S ", tm);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
62 b += strlen (b);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
63 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
64
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
65 strcpy (b, buf);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
66 msg ("LOG: %d %s", l->flags, l->msg);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
67 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
68
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
69 void
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
70 log_save (int babble, char *filename, int append)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
71 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
72 static int been_here = 0;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
73 if (been_here)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
74 return;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
75 been_here = 1;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
76
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
77 mkdir_p (0, filename);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
78
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
79 FILE *f = fopen (filename, append ? "at" : "wt");
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
80 if (!f)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
81 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
82 fatal (IDS_NOLOGFILE, filename);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
83 return;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
84 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
85
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
86 LogEnt *l;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
87
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
88 for (l=first_logent; l; l=l->next)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
89 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
90 if (babble || !(l->flags & LOG_BABBLE))
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
91 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
92 fputs (l->msg, f);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
93 if (l->msg[strlen(l->msg)-1] != '\n')
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
94 fputc ('\n', f);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
95 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
96 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
97
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
98 fclose (f);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
99 been_here = 0;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
100 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
101
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
102 void
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
103 exit_setup (int exit_code)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
104 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
105 static int been_here = 0;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
106 if (been_here)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
107 ExitProcess (1);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
108 been_here = 1;
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
109
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
110 if (exit_msg)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
111 note (exit_msg);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
112
673
685b588e92d8 [xemacs-hg @ 2001-10-30 05:13:26 by andyp]
andyp
parents: 448
diff changeset
113 log (LOG_TIMESTAMP, "Ending XEmacs install");
448
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
114
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
115 if (source == IDC_SOURCE_DOWNLOAD || !root_dir)
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
116 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
117 log_save (LOG_BABBLE, "setup.log.full", 0);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
118 log_save (0, "setup.log", 1);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
119 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
120 else
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
121 {
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
122 log_save (LOG_BABBLE, concat (root_dir, "/setup.log.full", 0), 0);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
123 log_save (0, concat (root_dir, "/setup.log", 0), 1);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
124 }
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
125
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
126 ExitProcess (exit_code);
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents:
diff changeset
127 }