From unknown Sat Sep 06 00:11:20 2025 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.509 (Entity 5.509) Content-Type: text/plain; charset=utf-8 From: bug#9560 <9560@debbugs.gnu.org> To: bug#9560 <9560@debbugs.gnu.org> Subject: Status: 24.0.50; c-mode syntax problems Reply-To: bug#9560 <9560@debbugs.gnu.org> Date: Sat, 06 Sep 2025 07:11:20 +0000 retitle 9560 24.0.50; c-mode syntax problems reassign 9560 emacs,cc-mode submitter 9560 Michael Welsh Duggan severity 9560 normal thanks From debbugs-submit-bounces@debbugs.gnu.org Tue Sep 20 11:30:42 2011 Received: (at submit) by debbugs.gnu.org; 20 Sep 2011 15:30:43 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1R62HR-0005EJ-Ru for submit@debbugs.gnu.org; Tue, 20 Sep 2011 11:30:42 -0400 Received: from eggs.gnu.org ([140.186.70.92]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1R62HN-0005EA-QD for submit@debbugs.gnu.org; Tue, 20 Sep 2011 11:30:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1R62CK-0005Dj-4Z for submit@debbugs.gnu.org; Tue, 20 Sep 2011 11:25:30 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=-0.9 required=5.0 tests=BAYES_00,BODY_8BITS, RP_MATCHES_RCVD,T_DKIM_INVALID autolearn=unavailable version=3.3.1 Received: from lists.gnu.org ([140.186.70.17]:33379) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1R62CK-0005Df-0Q for submit@debbugs.gnu.org; Tue, 20 Sep 2011 11:25:24 -0400 Received: from eggs.gnu.org ([140.186.70.92]:42320) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1R62CD-0004Lq-Lp for bug-gnu-emacs@gnu.org; Tue, 20 Sep 2011 11:25:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1R62CB-0005Ca-By for bug-gnu-emacs@gnu.org; Tue, 20 Sep 2011 11:25:17 -0400 Received: from euclid.red.cert.org ([192.88.209.48]:38176) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1R62CB-0005CD-68 for bug-gnu-emacs@gnu.org; Tue, 20 Sep 2011 11:25:15 -0400 Received: from bucknell.indigo.cert.org (bucknell.indigo.cert.org [10.60.10.121]) by euclid.red.cert.org (8.14.4/8.14.4) with ESMTP id p8KFLZom012503 for ; Tue, 20 Sep 2011 11:21:35 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=cert.org; s=jthatj15xw2j; t=1316532095; bh=Las4bnsj+7PcX9dWRFGezOdzeARaH56I0GZ5gj3FJoE=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type: Content-Transfer-Encoding:Sender:Reply-To:Cc:In-Reply-To; b=l6RAOieNXOx41I7pcx8L/9pDPM+uXXCf4QZqObIvtBsceq7Fx9bj2Aot9TNZPBOih q1r6mqrWY+vYYd9apZg7P+7aMZ+EmC/u8DgBAH7pHFnrH6fhWg9GCbxNvi0iClLWaA 4gBnr/DBxbr58aeikE1ei+6jtD1OWvdov2rq4Zcg= Received: from waterbuck.yellow.cert.org (waterbuck.yellow.cert.org [10.20.128.84]) by bucknell.indigo.cert.org (8.14.4/8.14.4/2.79) with ESMTP id p8KFPDI5025751 for ; Tue, 20 Sep 2011 11:25:13 -0400 Received: (from mwd@localhost) by waterbuck.yellow.cert.org (8.14.4/8.14.4/Submit/1.6) id p8KFP8bq008000; Tue, 20 Sep 2011 11:25:08 -0400 From: Michael Welsh Duggan To: bug-gnu-emacs@gnu.org Subject: 24.0.50; c-mode syntax problems Date: Tue, 20 Sep 2011 11:25:08 -0400 Message-ID: User-Agent: Gnus/5.110018 (No Gnus v0.18) Emacs/24.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-Received-From: 140.186.70.17 X-Spam-Score: -4.8 (----) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -4.9 (----) I really wish I could give an exact recipe for this, but this particular failure is extremely transient. I can leave an emacs open in an bad state for postmortem diagnosis, but I cannot predict when or under what conditions this problem and ones similar to it will happen. In this particular case, I am editing an immediate struct at top level. For example: static const sk_stringmap_entry_t field_map_entries[] =3D { {"class", RWST_CLASS, "class name", NULL}, {"type", RWST_TYPE, "type name", NULL}, {"flowtype", RWST_FLOWTYPE, "flowtype name", NULL}, {"id-flowtype", RWST_FLOWTYPE_ID, "flowtype integer identifier", NULL}, {"sensor", RWST_SENSOR, "sensor name", NULL}, {"id-sensor", RWST_SENSOR_ID, "sensor integer identifier", NULL}, {"describe-sensor", RWST_SENSOR_DESC, "sensor description", NULL}, {"default-class", RWST_DEFAULT_CLASS, "default class name", NULL}, {"default-type", RWST_DEFAULT_TYPE, "default type name", NULL}, {"mark-defaults", RWST_MARK_DEFAULTS,=20 "'+' for default classes, '*' for types", NULL}, {"class:list", RWST_CLASS_LIST, "list of class names", NULL}, {"type:list", RWST_TYPE_LIST, "list of type names", NULL}, {"flowtype:list", RWST_FLOWTYPE_LIST, "list of flowtype names", NULL}, {"id-flowtype:list", RWST_FLOWTYPE_ID_LIST, "list of flowtype integer identifier", NULL}, {"sensor:list", RWST_SENSOR, "list of sensor names", NULL}, {"id-sensor:list", RWST_SENSOR_ID,=20 "list of sensor integer identifier", NULL}, {"default-class:list", RWST_DEFAULT_CLASS_LIST,=20 "list of default class name", NULL}, {"default-type:list", RWST_DEFAULT_TYPE_LIST, "list of default type name", NULL}, }; Note the indentation of that next-to-last line. That's because the syntax thinks it is ((statement-block-intro 4740) (statement-cont 4740)), indent: 12. It thinks the line above it is ((defun-open 4740)), indent: 4. But if I cursor up a few lines before hitting TAB, I get ((brace-list-entry 4557)), indent: 5, and tabbing down from there fixes the problem. This has happened to me three times while adding entries to this struct. I will include the entire file as I am editing it in this bug report, in case someone can recreate it by emptying the struct and typing the stuff in again. This sort of problem happens to me relatively frequently when editing C files, on the order of 1-10 times a day. Usually saving and reloading the file fixes the problem. Sometimes reindenting the section does. If there is any in-situ debugging I can do when this happens again, please let me know. auto-fill-mode (setq c-basic-offset 4 c-comment-only-line-offset '(0 . 0) c-indent-comment-alist '((anchored-comment column . 0) (end-block space . = 1) (cpp-end-block space . 2)) c-indent-comments-syntactically-p nil c-block-comment-prefix "* " c-comment-prefix-regexp '((pike-mode . "//+!?\\|\\**") (awk-mode . "#+") (other . "//+\\|\\**")) c-doc-comment-style '((java-mode . javadoc) (pike-mode . autodoc) (c-mode . gtkdoc)) c-cleanup-list '(scope-operator) c-hanging-braces-alist '((substatement-open before after) (arglist-cont-nonempty)) c-hanging-colons-alist nil c-hanging-semi&comma-criteria '(c-semi&comma-inside-parenlist) c-backslash-column 48 c-backslash-max-column 72 c-special-indent-hook '(c-gnu-impose-minimum) c-label-minimum-indentation 1 c-offsets-alist '((inexpr-class . +) (inexpr-statement . +) (lambda-intro-cont . +) (inlambda . c-lineup-inexpr-block) (template-args-cont c-lineup-template-args +) (incomposition . +) (inmodule . +) (innamespace . +) (inextern-lang . +) (composition-close . 0) (module-close . 0) (namespace-close . 0) (extern-lang-close . 0) (composition-open . 0) (module-open . 0) (namespace-open . 0) (extern-lang-open . 0) (objc-method-call-cont c-lineup-ObjC-method-call-colons c-lineup-ObjC-method-call + ) (objc-method-args-cont . c-lineup-ObjC-method-args) (objc-method-intro . [0]) (friend . 0) (cpp-define-intro c-lineup-cpp-define +) (cpp-macro-cont . +) (cpp-macro . [0]) (inclass . +) (stream-op . c-lineup-streamop) (arglist-cont-nonempty c-lineup-gcc-asm-reg c-lineup-arglist ) (arglist-cont c-lineup-gcc-asm-reg 0) (comment-intro c-lineup-knr-region-comment c-lineup-comment ) (catch-clause . 0) (else-clause . 0) (do-while-closure . 0) (access-label . -) (case-label . *) (substatement . +) (statement-case-intro . *) (statement . 0) (brace-entry-open . 0) (brace-list-entry . 0) (brace-list-intro . +) (brace-list-close . 0) (block-close . 0) (block-open . 0) (inher-cont . c-lineup-multi-inher) (inher-intro . +) (member-init-cont . c-lineup-multi-inher) (member-init-intro . +) (annotation-var-cont . +) (annotation-top-cont . 0) (topmost-intro . 0) (knr-argdecl . 0) (func-decl-cont . +) (inline-close . 0) (class-close . 0) (class-open . 0) (defun-block-intro . +) (defun-close . 0) (defun-open . 0) (c . c-lineup-C-comments) (string . c-lineup-dont-change) (topmost-intro-cont first c-lineup-topmost-intro-cont c-lineup-gnu-DEFUN-intro-cont ) (brace-list-open . +) (inline-open . 0) (arglist-close . c-lineup-arglist) (arglist-intro . +) (statement-cont . c-lineup-math) (statement-case-open . *) (label . *) (substatement-label . 0) (substatement-open . 0) (knr-argdecl-intro . 5) (statement-block-intro . +) ) c-buffer-is-cc-mode 'c-mode c-tab-always-indent t c-syntactic-indentation t c-syntactic-indentation-in-macros t c-ignore-auto-fill '(string cpp code) c-auto-align-backslashes t c-backspace-function 'backward-delete-char-untabify c-delete-function 'delete-char c-electric-pound-behavior nil c-default-style '((java-mode . "java") (awk-mode . "awk") (other . "gnu")) c-enable-xemacs-performance-kludge-p nil c-old-style-variable-behavior nil defun-prompt-regexp nil tab-width 8 comment-column 32 parse-sexp-ignore-comments t parse-sexp-lookup-properties t auto-fill-function nil comment-multi-line t comment-start-skip "\\(//+\\|/\\*+\\)\\s *" fill-prefix nil fill-column 70 paragraph-start "[ ]*\\(//+\\|\\**\\)[ ]*$\\|^\f" adaptive-fill-mode t adaptive-fill-regexp "[ ]*\\(//+\\|\\**\\)[ ]*\\([ ]*\\([-=E2=80=93!|#%= ;>*=C2=B7=E2=80=A2=E2=80=A3=E2=81=83=E2=97=A6]+[ ]*\\)*\\)" ) Package: CC Mode 5.31.8 (C/l) Buffer Style: gnu c-emacs-features: (pps-extended-state col-0-paren posix-char-classes gen-st= ring-delim gen-comment-delim syntax-properties 1-bit) In GNU Emacs 24.0.50.1 (i686-pc-linux-gnu, GTK+ Version 2.10.4) of 2011-09-19 on waterbuck.yellow.cert.org Windowing system distributor `The X.Org Foundation', version 11.0.70101000 configured using `configure '--prefix=3D/home/mwd' '--without-toolkit-scro= ll-bars' '--with-gif=3Dno'' Important settings: value of $LC_ALL: nil value of $LC_COLLATE: nil value of $LC_CTYPE: nil value of $LC_MESSAGES: nil value of $LC_MONETARY: nil value of $LC_NUMERIC: nil value of $LC_TIME: nil value of $LANG: en_US.UTF-8 value of $XMODIFIERS: @im=3Dnone locale-coding-system: utf-8-unix default enable-multibyte-characters: t Major mode: C/l Minor modes in effect: flyspell-mode: t shell-dirtrack-mode: t display-time-mode: t diff-auto-refine-mode: t tooltip-mode: t mouse-wheel-mode: t tool-bar-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t line-number-mode: t abbrev-mode: t Recent messages: Reading active file via nndraft...done Checking new news...done Don't touch it! It's the History Eraser Button, you fool! syntax: ((brace-list-entry 4646)), indent: 5 syntax: ((statement-block-intro 4740) (statement-cont 4740)), indent: 12 Don't touch it! It's the History Eraser Button, you fool! Type C-x 1 to remove help window.=20=20 Type "q" in help window to restore its previous buffer. Auto-saving... syntax: ((statement-block-intro 4740) (statement-cont 4740)), indent: 12 Features: (shadow emacsbug apropos align time-stamp tabify whitespace dabbrev help-mode view vc-svn cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs browse-url mule-util mailalias copyright cus-edit cus-start cus-load sendmail flyspell ispell sort ansi-color gnus-cite mail-extr qp gnus-async gnus-bcklg gnus-ml gnus-topic nndraft nnmh utf-7 rot13 disp-table epa-file epa derived epg network-stream starttls nnimap parse-time tls utf7 netrc gnus-agent gnus-srvr gnus-score score-mode nnvirtual gnus-msg gnus-art mm-uu mml2015 epg-config mm-view mml-smime mailcap gnus-cache edmacro kmacro nnir gnus-sum gnus-demon nntp gnus-group gnus-undo nnmail mail-source nnoo gnutls gnus-start gnus-spec gnus-int gnus-range gnus-win gnus-load woman man uniquify warnings tramp tramp-compat auth-source eieio byte-opt bytecomp byte-compile cconv macroexp assoc shell pcomplete tramp-loaddefs time smime password-cache dig comint server psvn advice help-fns advice-preload cl log-edit ring pcvs-util add-log diff-mode easy-mmode pgg pgg-parse pgg-def message format-spec rfc822 mml mml-sec mm-decode mm-bodies mm-encode mail-parse rfc2231 rfc2047 rfc2045 ietf-drums mailabbrev gmm-utils mailheader gnus gnus-ems nnheader gnus-util time-date mail-utils mm-util mail-prsvr wid-edit generic-x dired-x easymenu dired regexp-opt tooltip ediff-hook vc-hooks lisp-float-type mwheel x-win x-dnd tool-bar dnd fontset image fringe lisp-mode register page menu-bar rfn-eshadow timer select scroll-bar mouse jit-lock font-lock syntax facemenu font-core frame cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese case-table epa-hook jka-cmpr-hook help simple abbrev minibuffer loaddefs button faces cus-face files text-properties overlay sha1 md5 base64 format env code-pages mule custom widget hashtable-print-readable backquote make-network-process dbusbind dynamic-setting system-font-setting font-render-setting move-toolbar gtk x-toolkit x multi-tty emacs) --=20 Michael Welsh Duggan (mwd@cert.org) From debbugs-submit-bounces@debbugs.gnu.org Tue Sep 20 11:39:55 2011 Received: (at 9560) by debbugs.gnu.org; 20 Sep 2011 15:39:55 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1R62QM-0005Qp-G7 for submit@debbugs.gnu.org; Tue, 20 Sep 2011 11:39:55 -0400 Received: from euclid.red.cert.org ([192.88.209.48]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1R62QK-0005Qh-41 for 9560@debbugs.gnu.org; Tue, 20 Sep 2011 11:39:53 -0400 Received: from bucknell.indigo.cert.org (bucknell.indigo.cert.org [10.60.10.121]) by euclid.red.cert.org (8.14.4/8.14.4) with ESMTP id p8KFV6eb012741 for <9560@debbugs.gnu.org>; Tue, 20 Sep 2011 11:31:06 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=cert.org; s=jthatj15xw2j; t=1316532666; bh=tFt7syWuEPlp/ANpKnpsG2aeJkTiQ/sBPJ4RQz6+Vx0=; h=From:To:Subject:References:Date:In-Reply-To:Message-ID: MIME-Version:Content-Type:Sender:Reply-To:Cc; b=dFfPUj3/hVEJ97p2vCmpqfLsgv9fhRPxhJ5D8Klxtw0xBKipVaMQPPtN1vNsz+e+r jH7iVm4Bv7kXqbHpbGIqEhr73MIQ2ag8k9P6ZLafLbOaoXvYloY+40l680IXe9P08I Ty6o7bTM0RhHQz8CUFmvr4oH8eUYqFtWygs0NaWM= Received: from waterbuck.yellow.cert.org (waterbuck.yellow.cert.org [10.20.128.84]) by bucknell.indigo.cert.org (8.14.4/8.14.4/2.79) with ESMTP id p8KFYiQh026313 for <9560@debbugs.gnu.org>; Tue, 20 Sep 2011 11:34:44 -0400 Received: (from mwd@localhost) by waterbuck.yellow.cert.org (8.14.4/8.14.4/Submit/1.6) id p8KFYhHf008132; Tue, 20 Sep 2011 11:34:43 -0400 From: Michael Welsh Duggan To: "9560\@debbugs.gnu.org" <9560@debbugs.gnu.org> Subject: Re: bug#9560: Acknowledgement (24.0.50; c-mode syntax problems) References: Date: Tue, 20 Sep 2011 11:34:43 -0400 In-Reply-To: (GNU bug Tracking System's message of "Tue, 20 Sep 2011 11:31:01 -0400") Message-ID: User-Agent: Gnus/5.110018 (No Gnus v0.18) Emacs/24.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: -3.2 (---) X-Debbugs-Envelope-To: 9560 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -3.2 (---) --=-=-= Content-Type: text/plain I forgot to include the file: --=-=-= Content-Type: text/plain Content-Disposition: attachment; filename=rwsiteinfo.c /* ** Copyright (C) 2011 by Carnegie Mellon University. ** ** @OPENSOURCE_HEADER_START@ ** ** Use of the SILK system and related source code is subject to the terms ** of the following licenses: ** ** GNU Public License (GPL) Rights pursuant to Version 2, June 1991 ** Government Purpose License Rights (GPLR) pursuant to DFARS 252.227.7013 ** ** NO WARRANTY ** ** ANY INFORMATION, MATERIALS, SERVICES, INTELLECTUAL PROPERTY OR OTHER ** PROPERTY OR RIGHTS GRANTED OR PROVIDED BY CARNEGIE MELLON UNIVERSITY ** PURSUANT TO THIS LICENSE (HEREINAFTER THE "DELIVERABLES") ARE ON AN ** "AS-IS" BASIS. CARNEGIE MELLON UNIVERSITY MAKES NO WARRANTIES OF ANY ** KIND, EITHER EXPRESS OR IMPLIED AS TO ANY MATTER INCLUDING, BUT NOT ** LIMITED TO, WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE, ** MERCHANTABILITY, INFORMATIONAL CONTENT, NONINFRINGEMENT, OR ERROR-FREE ** OPERATION. CARNEGIE MELLON UNIVERSITY SHALL NOT BE LIABLE FOR INDIRECT, ** SPECIAL OR CONSEQUENTIAL DAMAGES, SUCH AS LOSS OF PROFITS OR INABILITY ** TO USE SAID INTELLECTUAL PROPERTY, UNDER THIS LICENSE, REGARDLESS OF ** WHETHER SUCH PARTY WAS AWARE OF THE POSSIBILITY OF SUCH DAMAGES. ** LICENSEE AGREES THAT IT WILL NOT MAKE ANY WARRANTY ON BEHALF OF ** CARNEGIE MELLON UNIVERSITY, EXPRESS OR IMPLIED, TO ANY PERSON ** CONCERNING THE APPLICATION OF OR THE RESULTS TO BE OBTAINED WITH THE ** DELIVERABLES UNDER THIS LICENSE. ** ** Licensee hereby agrees to defend, indemnify, and hold harmless Carnegie ** Mellon University, its trustees, officers, employees, and agents from ** all claims or demands made against them (and any related losses, ** expenses, or attorney's fees) arising out of, or relating to Licensee's ** and/or its sub licensees' negligent use or willful misuse of or ** negligent conduct or willful misconduct regarding the Software, ** facilities, or other rights or assistance granted by Carnegie Mellon ** University under this License, including, but not limited to, any ** claims of product liability, personal injury, death, damage to ** property, or violation of any laws or regulations. ** ** Carnegie Mellon University Software Engineering Institute authored ** documents are sponsored by the U.S. Department of Defense under ** Contract FA8721-05-C-0003. Carnegie Mellon University retains ** copyrights in all material produced under this contract. The U.S. ** Government retains a non-exclusive, royalty-free license to publish or ** reproduce these documents, or allow others to do so, for U.S. ** Government purposes only pursuant to the copyright license under the ** contract clause at 252.227.7013. ** ** @OPENSOURCE_HEADER_END@ */ /* ** Prints information about SiLK site configurations ** ** Michael Duggan ** September 2011 */ #include RCSIDENT("$Id$"); #include #include #include #include /* LOCAL DEFINES AND TYPEDEFS */ /* where to write --help output */ #define USAGE_FH stdout /* LOCAL VARIABLE DEFINITIONS */ typedef enum { RWST_CLASS, RWST_TYPE, RWST_FLOWTYPE, RWST_FLOWTYPE_ID, RWST_SENSOR, RWST_SENSOR_ID, RWST_SENSOR_DESC, RWST_DEFAULT_CLASS, RWST_DEFAULT_TYPE, RWST_MARK_DEFAULTS, RWST_CLASS_LIST, RWST_TYPE_LIST, RWST_FLOWTYPE_LIST, RWST_FLOWTYPE_ID_LIST, RWST_SENSOR_LIST, RWST_SENSOR_ID_LIST, RWST_DEFAULT_CLASS_LIST, RWST_DEFAULT_TYPE_LIST } rws_type_t; static const sk_stringmap_entry_t field_map_entries[] = { {"class", RWST_CLASS, "class name", NULL}, {"type", RWST_TYPE, "type name", NULL}, {"flowtype", RWST_FLOWTYPE, "flowtype name", NULL}, {"id-flowtype", RWST_FLOWTYPE_ID, "flowtype integer identifier", NULL}, {"sensor", RWST_SENSOR, "sensor name", NULL}, {"id-sensor", RWST_SENSOR_ID, "sensor integer identifier", NULL}, {"describe-sensor", RWST_SENSOR_DESC, "sensor description", NULL}, {"default-class", RWST_DEFAULT_CLASS, "default class name", NULL}, {"default-type", RWST_DEFAULT_TYPE, "default type name", NULL}, {"mark-defaults", RWST_MARK_DEFAULTS, "'+' for default classes, '*' for types", NULL}, {"class:list", RWST_CLASS_LIST, "list of class names", NULL}, {"type:list", RWST_TYPE_LIST, "list of type names", NULL}, {"flowtype:list", RWST_FLOWTYPE_LIST, "list of flowtype names", NULL}, {"id-flowtype:list", RWST_FLOWTYPE_ID_LIST, "list of flowtype integer identifier", NULL}, {"sensor:list", RWST_SENSOR, "list of sensor names", NULL}, {"id-sensor:list", RWST_SENSOR_ID, "list of sensor integer identifier", NULL}, {"default-class:list", RWST_DEFAULT_CLASS_LIST, "list of default class name", NULL}, {"default-type:list", RWST_DEFAULT_TYPE_LIST, "list of default type name", NULL}, }; /* OPTIONS SETUP */ typedef enum { OPT_NO_TITLES, OPT_NO_COLUMNS, OPT_COLUMN_SEPARATOR, OPT_NO_FINAL_DELIMITER, OPT_DELIMITED, OPT_OUTPUT_PATH, OPT_PAGER } appOptionsEnum; static struct option appOptions[] = { {"no-titles", NO_ARG, 0, OPT_NO_TITLES}, {"no-columns", NO_ARG, 0, OPT_NO_COLUMNS}, {"column-separator", REQUIRED_ARG, 0, OPT_COLUMN_SEPARATOR}, {"no-final-delimiter", NO_ARG, 0, OPT_NO_FINAL_DELIMITER}, {"delimited", OPTIONAL_ARG, 0, OPT_DELIMITED}, {"output-path", REQUIRED_ARG, 0, OPT_OUTPUT_PATH}, {"pager", REQUIRED_ARG, 0, OPT_PAGER}, {0,0,0,0} /* sentinel entry */ {0,0,0,0} /* sentinel entry */ }; static const char *appHelp[] = { "Do not print column headers. Def. Print titles.", "Disable fixed-width columnar output. Def. Columnar", "Use specified character between columns. Def. '|'", "Suppress column delimiter at end of line. Def. No", "Shortcut for --no-columns --no-final-del --column-sep=CHAR", "Send output to given file path. Def. stdout", "Program to invoke to page output. Def. $SILK_PAGER or $PAGER", (char *)NULL }; /* LOCAL FUNCTION PROTOTYPES */ static void appUsageLong(void); static void appTeardown(void); static void appSetup(int argc, char **argv); static int appOptionsHandler(clientData cData, int opt_index, char *opt_arg); /* FUNCTION DEFINITIONS */ /* * appUsageLong(); * * Print complete usage information to USAGE_FH. Pass this * function to skOptionsSetUsageCallback(); skOptionsParse() will * call this funciton and then exit the program when the --help * option is given. */ static void appUsageLong(void) { #define USAGE_MSG \ ("\n" \ "\tOutputs information about a SiLK site configuration.\n") FILE *fh = USAGE_FH; int i; fprintf(fh, "%s %s", skAppName(), USAGE_MSG); fprintf(fh, "\nSWITCHES:\n"); skOptionsDefaultUsage(fh); for (i = 0; appOptions[i].name; i++ ) { fprintf(fh, "--%s %s. ", appOptions[i].name, SK_OPTION_HAS_ARG(appOptions[i])); switch (appOptions[i].val) { case OPT_FIELDS: /* Dynamically build the help */ usageFields(fh); break; default: /* Simple static help text from the appHelp array */ fprintf(fh, "%s\n", appHelp[i]); break; } } skOptionsCtxOptionsUsage(optctx, fh); } /* * appTeardown() * * Teardown all modules, close all files, and tidy up all * application state. * * This function is idempotent. */ static void appTeardown(void) { static int teardownFlag = 0; if (teardownFlag) { return; } teardownFlag = 1; #error "Anything you put in setup should now be torn down" /* for example, close sample output file */ skStreamDestroy(&out_ios); skAppUnregister(); } /* * appSetup(argc, argv); * * Perform all the setup for this application include setting up * required modules, parsing options, etc. This function should be * passed the same arguments that were passed into main(). * * Returns to the caller if all setup succeeds. If anything fails, * this function will cause the application to exit with a FAILURE * exit status. */ static void appSetup(int argc, char **argv) { SILK_FEATURES_DEFINE_STRUCT(features); int rv; /* verify same number of options and help strings */ assert((sizeof(appHelp)/sizeof(char *)) == (sizeof(appOptions)/sizeof(struct option))); /* register the application */ skAppRegister(argv[0]); skAppVerifyFeatures(&features, NULL); skOptionsSetUsageCallback(&appUsageLong); /* initialize globals */ #error "Initialize any global variables here" /* for example: set global output to NULL */ out_ios = NULL; /* register the options */ if (skOptionsRegister(appOptions, &appOptionsHandler, NULL) || sksiteOptionsRegister(SK_SITE_FLAG_CONFIG_FILE)) { skAppPrintErr("Unable to register options"); exit(EXIT_FAILURE); } #error "Do any other module setup here" /* parse the options */ arg_index = skOptionsParse(argc, argv); if (arg_index < 0) { /* options parsing should print error */ skAppUsage(); /* never returns */ } /* try to load site config file; if it fails, we will not be able * to resolve flowtype and sensor from input file names */ sksiteConfigure(0); #error "Do any options validation here" #error "If you expect filenames on command line keep this:" /* arg_index is looking at first file name to process */ if (arg_index == argc) { if (FILEIsATty(stdin)) { skAppPrintErr("No input files on command line and" " stdin is connected to a terminal"); skAppUsage(); /* never returns */ } } #error "If you do NOT expect filenames on command line, keep this:" /* check for extraneous arguments */ if (arg_index != argc) { skAppPrintErr("Too many arguments or unrecognized switch '%s'", argv[arg_index]); skAppUsage(); /* never returns */ } #error "Once all options are set, open input and output" /* for example, open a SiLK flow file as an output file */ rv = skStreamOpenSilkFlow(&out_ios, output_path, SK_IO_WRITE); if (rv) { skStreamPrintLastErr(out_ios, rv, &skAppPrintErr); skAppPrintErr("Unable to open output file. Exiting"); skStreamDestroy(&out_ios); exit(EXIT_FAILURE); } if (atexit(appTeardown) < 0) { skAppPrintErr("Unable to register appTeardown() with atexit()"); appTeardown(); exit(EXIT_FAILURE); } return; /* OK */ } /* * status = appOptionsHandler(cData, opt_index, opt_arg); * * This function is passed to skOptionsRegister(); it will be called * by skOptionsParse() for each user-specified switch that the * application has registered; it should handle the switch as * required---typically by setting global variables---and return 1 * if the switch processing failed or 0 if it succeeded. Returning * a non-zero from from the handler causes skOptionsParse() to return * a negative value. * * The clientData in 'cData' is typically ignored; 'opt_index' is * the index number that was specified as the last value for each * struct option in appOptions[]; 'opt_arg' is the user's argument * to the switch for options that have a REQUIRED_ARG or an * OPTIONAL_ARG. */ static int appOptionsHandler( clientData UNUSED(cData), int opt_index, char *opt_arg) { int rv; switch ((appOptionsEnum)opt_index) { #error "Add options handling here. Return 1 on failure." case OPT_FIRST: /* remove when real options added */ /* do something with the argument to the switch; for example, * parse as an integer */ rv = skStringParseUint32(&value, opt_arg, 0, 0); if (rv) { skAppPrintErr("Invalid %s '%s': %s", appOptions[opt_index].name, opt_arg, skStringParseStrerror(rv)); return 1; } break; case OPT_SECOND: /* remove when real options added */ /* set a flag based on this option */ flag = 1; break; } return 0; /* OK */ } /* * rwios = appNextInput(argc, argv); * * Open and return the next input file from the command line or the * standard input if no files were given on the command line. */ static skstream_t *appNextInput(int argc, char **argv) { static int initialized = 0; skstream_t *rwios = NULL; const char *fname = NULL; int rv; if (arg_index < argc) { /* get current file and prepare to get next */ fname = argv[arg_index]; ++arg_index; } else { if (initialized) { /* no more input */ return NULL; } /* input is from stdin */ fname = "stdin"; } initialized = 1; /* create rwios and open file */ rv = skStreamOpenSilkFlow(&rwios, fname, SK_IO_READ); if (rv) { skStreamPrintLastErr(rwios, rv, NULL); skStreamDestroy(&rwios); } return rwios; } int main(int argc, char **argv) { skstream_t *in_ios; int in_rv = SKSTREAM_OK; int rv = SKSTREAM_OK; appSetup(argc, argv); /* never returns on error */ #error "Loop over files on command line or read from stdin." #error "Process each file, preferably in a separate function." /* For each input, process each record */ while (NULL != (in_ios = appNextInput(argc, argv))) { while ((in_rv = skStreamReadRecord(in_ios, &rwrec)) == SKSTREAM_OK) { /* process record */ rv = skStreamWriteRecord(out_ios, &rwrec); if (SKSTREAM_OK != rv) { skStreamPrintLastErr(out_ios, rv, &skAppPrintErr); skStreamDestroy(&in_ios); goto END; } } if (SKSTREAM_ERR_EOF != in_rv) { skStreamPrintLastErr(in_ios, in_rv, &skAppPrintErr); } skStreamDestroy(&in_ios); } rv = skStreamClose(out_ios); if (SKSTREAM_OK != rv) { skStreamPrintLastErr(out_ios, rv, &skAppPrintErr); } END: return ((SKSTREAM_OK == rv) ? EXIT_SUCCESS : EXIT_FAILURE); } /* ** Local Variables: ** mode:c ** indent-tabs-mode:nil ** c-basic-offset:4 ** End: */ --=-=-= Content-Type: text/plain -- Michael Welsh Duggan (mwd@cert.org) --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Sun Oct 02 14:25:33 2011 Received: (at 9560) by debbugs.gnu.org; 2 Oct 2011 18:25:33 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1RAQjF-0005ud-6C for submit@debbugs.gnu.org; Sun, 02 Oct 2011 14:25:33 -0400 Received: from md5i.com ([75.151.244.229] helo=maru.md5i.com) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1RAQjB-0005uV-HR for 9560@debbugs.gnu.org; Sun, 02 Oct 2011 14:25:31 -0400 Received: from md5i by maru.md5i.com with local (Exim 4.76) (envelope-from ) id 1RAQht-0007W0-Vg for 9560@debbugs.gnu.org; Sun, 02 Oct 2011 14:24:10 -0400 From: Michael Welsh Duggan To: 9560@debbugs.gnu.org Subject: A dribble file of an emacs -Q session that triggers the problem Date: Sun, 02 Oct 2011 14:24:09 -0400 Message-ID: <87vcs78d6e.fsf@maru.md5i.com> User-Agent: Gnus/5.110018 (No Gnus v0.18) Emacs/24.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: -3.2 (---) X-Debbugs-Envelope-To: 9560 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -3.2 (---) --=-=-= Content-Type: text/plain I've managed to trigger this bug in a hopefully repeatable way. I say hopefully because I don't know right now how to replay a dribble file. At any rate, here is what I have: >From emacs -Q, I loaded the following file: --=-=-= Content-Type: text/x-csrc Content-Disposition: attachment; filename=rwsiteinfo-backup.c /* ** Copyright (C) 2011 by Carnegie Mellon University. ** ** @OPENSOURCE_HEADER_START@ ** ** Use of the SILK system and related source code is subject to the terms ** of the following licenses: ** ** GNU Public License (GPL) Rights pursuant to Version 2, June 1991 ** Government Purpose License Rights (GPLR) pursuant to DFARS 252.227.7013 ** ** NO WARRANTY ** ** ANY INFORMATION, MATERIALS, SERVICES, INTELLECTUAL PROPERTY OR OTHER ** PROPERTY OR RIGHTS GRANTED OR PROVIDED BY CARNEGIE MELLON UNIVERSITY ** PURSUANT TO THIS LICENSE (HEREINAFTER THE "DELIVERABLES") ARE ON AN ** "AS-IS" BASIS. CARNEGIE MELLON UNIVERSITY MAKES NO WARRANTIES OF ANY ** KIND, EITHER EXPRESS OR IMPLIED AS TO ANY MATTER INCLUDING, BUT NOT ** LIMITED TO, WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE, ** MERCHANTABILITY, INFORMATIONAL CONTENT, NONINFRINGEMENT, OR ERROR-FREE ** OPERATION. CARNEGIE MELLON UNIVERSITY SHALL NOT BE LIABLE FOR INDIRECT, ** SPECIAL OR CONSEQUENTIAL DAMAGES, SUCH AS LOSS OF PROFITS OR INABILITY ** TO USE SAID INTELLECTUAL PROPERTY, UNDER THIS LICENSE, REGARDLESS OF ** WHETHER SUCH PARTY WAS AWARE OF THE POSSIBILITY OF SUCH DAMAGES. ** LICENSEE AGREES THAT IT WILL NOT MAKE ANY WARRANTY ON BEHALF OF ** CARNEGIE MELLON UNIVERSITY, EXPRESS OR IMPLIED, TO ANY PERSON ** CONCERNING THE APPLICATION OF OR THE RESULTS TO BE OBTAINED WITH THE ** DELIVERABLES UNDER THIS LICENSE. ** ** Licensee hereby agrees to defend, indemnify, and hold harmless Carnegie ** Mellon University, its trustees, officers, employees, and agents from ** all claims or demands made against them (and any related losses, ** expenses, or attorney's fees) arising out of, or relating to Licensee's ** and/or its sub licensees' negligent use or willful misuse of or ** negligent conduct or willful misconduct regarding the Software, ** facilities, or other rights or assistance granted by Carnegie Mellon ** University under this License, including, but not limited to, any ** claims of product liability, personal injury, death, damage to ** property, or violation of any laws or regulations. ** ** Carnegie Mellon University Software Engineering Institute authored ** documents are sponsored by the U.S. Department of Defense under ** Contract FA8721-05-C-0003. Carnegie Mellon University retains ** copyrights in all material produced under this contract. The U.S. ** Government retains a non-exclusive, royalty-free license to publish or ** reproduce these documents, or allow others to do so, for U.S. ** Government purposes only pursuant to the copyright license under the ** contract clause at 252.227.7013. ** ** @OPENSOURCE_HEADER_END@ */ /* ** Prints information about SiLK site configurations ** ** Michael Duggan ** September 2011 */ #include RCSIDENT("$Id$"); #include #include #include #include /* LOCAL DEFINES AND TYPEDEFS */ /* where to write --help output */ #define USAGE_FH stdout /* LOCAL VARIABLE DEFINITIONS */ typedef enum { RWST_CLASS, RWST_TYPE, RWST_FLOWTYPE, RWST_FLOWTYPE_ID, RWST_SENSOR, RWST_SENSOR_ID, RWST_SENSOR_DESC, RWST_DEFAULT_CLASS, RWST_DEFAULT_TYPE, RWST_MARK_DEFAULTS, RWST_CLASS_LIST, RWST_TYPE_LIST, RWST_FLOWTYPE_LIST, RWST_FLOWTYPE_ID_LIST, RWST_SENSOR_LIST, RWST_SENSOR_ID_LIST, RWST_DEFAULT_CLASS_LIST, RWST_DEFAULT_TYPE_LIST } rws_type_t; static const sk_stringmap_entry_t field_map_entries[] = { {"class", RWST_CLASS, "class name", NULL}, {"type", RWST_TYPE, "type name", NULL}, {"flowtype", RWST_FLOWTYPE, "flowtype name", NULL}, {"id-flowtype", RWST_FLOWTYPE_ID, "flowtype integer identifier", NULL}, {"sensor", RWST_SENSOR, "sensor name", NULL}, {"id-sensor", RWST_SENSOR_ID, "sensor integer identifier", NULL}, {"describe-sensor", RWST_SENSOR_DESC, "sensor description", NULL}, {"default-class", RWST_DEFAULT_CLASS, "default class name", NULL}, {"default-type", RWST_DEFAULT_TYPE, "default type name", NULL}, {"mark-defaults", RWST_MARK_DEFAULTS, "'+' for default classes, '*' for types", NULL}, }; /* OPTIONS SETUP */ typedef enum { OPT_NO_TITLES, OPT_NO_COLUMNS, OPT_COLUMN_SEPARATOR, OPT_NO_FINAL_DELIMITER, OPT_DELIMITED, OPT_OUTPUT_PATH, OPT_PAGER } appOptionsEnum; static struct option appOptions[] = { {"no-titles", NO_ARG, 0, OPT_NO_TITLES}, {"no-columns", NO_ARG, 0, OPT_NO_COLUMNS}, {"column-separator", REQUIRED_ARG, 0, OPT_COLUMN_SEPARATOR}, {"no-final-delimiter", NO_ARG, 0, OPT_NO_FINAL_DELIMITER}, {"delimited", OPTIONAL_ARG, 0, OPT_DELIMITED}, {"output-path", REQUIRED_ARG, 0, OPT_OUTPUT_PATH}, {"pager", REQUIRED_ARG, 0, OPT_PAGER}, {0,0,0,0} /* sentinel entry */ {0,0,0,0} /* sentinel entry */ }; static const char *appHelp[] = { "Do not print column headers. Def. Print titles.", "Disable fixed-width columnar output. Def. Columnar", "Use specified character between columns. Def. '|'", "Suppress column delimiter at end of line. Def. No", "Shortcut for --no-columns --no-final-del --column-sep=CHAR", "Send output to given file path. Def. stdout", "Program to invoke to page output. Def. $SILK_PAGER or $PAGER", (char *)NULL }; /* LOCAL FUNCTION PROTOTYPES */ static void appUsageLong(void); static void appTeardown(void); static void appSetup(int argc, char **argv); static int appOptionsHandler(clientData cData, int opt_index, char *opt_arg); /* FUNCTION DEFINITIONS */ /* * appUsageLong(); * * Print complete usage information to USAGE_FH. Pass this * function to skOptionsSetUsageCallback(); skOptionsParse() will * call this funciton and then exit the program when the --help * option is given. */ static void appUsageLong(void) { #define USAGE_MSG \ ("\n" \ "\tOutputs information about a SiLK site configuration.\n") FILE *fh = USAGE_FH; int i; fprintf(fh, "%s %s", skAppName(), USAGE_MSG); fprintf(fh, "\nSWITCHES:\n"); skOptionsDefaultUsage(fh); for (i = 0; appOptions[i].name; i++ ) { fprintf(fh, "--%s %s. ", appOptions[i].name, SK_OPTION_HAS_ARG(appOptions[i])); switch (appOptions[i].val) { case OPT_FIELDS: /* Dynamically build the help */ usageFields(fh); break; default: /* Simple static help text from the appHelp array */ fprintf(fh, "%s\n", appHelp[i]); break; } } skOptionsCtxOptionsUsage(optctx, fh); } /* * appTeardown() * * Teardown all modules, close all files, and tidy up all * application state. * * This function is idempotent. */ static void appTeardown(void) { static int teardownFlag = 0; if (teardownFlag) { return; } teardownFlag = 1; #error "Anything you put in setup should now be torn down" /* for example, close sample output file */ skStreamDestroy(&out_ios); skAppUnregister(); } /* * appSetup(argc, argv); * * Perform all the setup for this application include setting up * required modules, parsing options, etc. This function should be * passed the same arguments that were passed into main(). * * Returns to the caller if all setup succeeds. If anything fails, * this function will cause the application to exit with a FAILURE * exit status. */ static void appSetup(int argc, char **argv) { SILK_FEATURES_DEFINE_STRUCT(features); int rv; /* verify same number of options and help strings */ assert((sizeof(appHelp)/sizeof(char *)) == (sizeof(appOptions)/sizeof(struct option))); /* register the application */ skAppRegister(argv[0]); skAppVerifyFeatures(&features, NULL); skOptionsSetUsageCallback(&appUsageLong); /* initialize globals */ #error "Initialize any global variables here" /* for example: set global output to NULL */ out_ios = NULL; /* register the options */ if (skOptionsRegister(appOptions, &appOptionsHandler, NULL) || sksiteOptionsRegister(SK_SITE_FLAG_CONFIG_FILE)) { skAppPrintErr("Unable to register options"); exit(EXIT_FAILURE); } #error "Do any other module setup here" /* parse the options */ arg_index = skOptionsParse(argc, argv); if (arg_index < 0) { /* options parsing should print error */ skAppUsage(); /* never returns */ } /* try to load site config file; if it fails, we will not be able * to resolve flowtype and sensor from input file names */ sksiteConfigure(0); #error "Do any options validation here" #error "If you expect filenames on command line keep this:" /* arg_index is looking at first file name to process */ if (arg_index == argc) { if (FILEIsATty(stdin)) { skAppPrintErr("No input files on command line and" " stdin is connected to a terminal"); skAppUsage(); /* never returns */ } } #error "If you do NOT expect filenames on command line, keep this:" /* check for extraneous arguments */ if (arg_index != argc) { skAppPrintErr("Too many arguments or unrecognized switch '%s'", argv[arg_index]); skAppUsage(); /* never returns */ } #error "Once all options are set, open input and output" /* for example, open a SiLK flow file as an output file */ rv = skStreamOpenSilkFlow(&out_ios, output_path, SK_IO_WRITE); if (rv) { skStreamPrintLastErr(out_ios, rv, &skAppPrintErr); skAppPrintErr("Unable to open output file. Exiting"); skStreamDestroy(&out_ios); exit(EXIT_FAILURE); } if (atexit(appTeardown) < 0) { skAppPrintErr("Unable to register appTeardown() with atexit()"); appTeardown(); exit(EXIT_FAILURE); } return; /* OK */ } /* * status = appOptionsHandler(cData, opt_index, opt_arg); * * This function is passed to skOptionsRegister(); it will be called * by skOptionsParse() for each user-specified switch that the * application has registered; it should handle the switch as * required---typically by setting global variables---and return 1 * if the switch processing failed or 0 if it succeeded. Returning * a non-zero from from the handler causes skOptionsParse() to return * a negative value. * * The clientData in 'cData' is typically ignored; 'opt_index' is * the index number that was specified as the last value for each * struct option in appOptions[]; 'opt_arg' is the user's argument * to the switch for options that have a REQUIRED_ARG or an * OPTIONAL_ARG. */ static int appOptionsHandler( clientData UNUSED(cData), int opt_index, char *opt_arg) { int rv; switch ((appOptionsEnum)opt_index) { #error "Add options handling here. Return 1 on failure." case OPT_FIRST: /* remove when real options added */ /* do something with the argument to the switch; for example, * parse as an integer */ rv = skStringParseUint32(&value, opt_arg, 0, 0); if (rv) { skAppPrintErr("Invalid %s '%s': %s", appOptions[opt_index].name, opt_arg, skStringParseStrerror(rv)); return 1; } break; case OPT_SECOND: /* remove when real options added */ /* set a flag based on this option */ flag = 1; break; } return 0; /* OK */ } /* * rwios = appNextInput(argc, argv); * * Open and return the next input file from the command line or the * standard input if no files were given on the command line. */ static skstream_t *appNextInput(int argc, char **argv) { static int initialized = 0; skstream_t *rwios = NULL; const char *fname = NULL; int rv; if (arg_index < argc) { /* get current file and prepare to get next */ fname = argv[arg_index]; ++arg_index; } else { if (initialized) { /* no more input */ return NULL; } /* input is from stdin */ fname = "stdin"; } initialized = 1; /* create rwios and open file */ rv = skStreamOpenSilkFlow(&rwios, fname, SK_IO_READ); if (rv) { skStreamPrintLastErr(rwios, rv, NULL); skStreamDestroy(&rwios); } return rwios; } int main(int argc, char **argv) { skstream_t *in_ios; int in_rv = SKSTREAM_OK; int rv = SKSTREAM_OK; appSetup(argc, argv); /* never returns on error */ #error "Loop over files on command line or read from stdin." #error "Process each file, preferably in a separate function." /* For each input, process each record */ while (NULL != (in_ios = appNextInput(argc, argv))) { while ((in_rv = skStreamReadRecord(in_ios, &rwrec)) == SKSTREAM_OK) { /* process record */ rv = skStreamWriteRecord(out_ios, &rwrec); if (SKSTREAM_OK != rv) { skStreamPrintLastErr(out_ios, rv, &skAppPrintErr); skStreamDestroy(&in_ios); goto END; } } if (SKSTREAM_ERR_EOF != in_rv) { skStreamPrintLastErr(in_ios, in_rv, &skAppPrintErr); } skStreamDestroy(&in_ios); } rv = skStreamClose(out_ios); if (SKSTREAM_OK != rv) { skStreamPrintLastErr(out_ios, rv, &skAppPrintErr); } END: return ((SKSTREAM_OK == rv) ? EXIT_SUCCESS : EXIT_FAILURE); } /* ** Local Variables: ** mode:c ** indent-tabs-mode:nil ** c-basic-offset:4 ** End: */ --=-=-= Content-Type: text/plain After loading the file, I started a dribble file as follows: M-x open-dribble-file RET /tmp/c-mode-debug.dribble RET I then started editing the file until I encountered the syntax problem. Near the end of the dribble file, after I encounter the problem, I end up messing around a bit with turning on the echoing of syntactic information, and it takes a while for me to get it right. Please be warned, that my exiting emacs afterward is contained within the dribble file, so you may want to remove those characters before replaying it. Here is the dribble file in question: --=-=-= Content-Type: application/octet-stream Content-Disposition: attachment; filename=c-mode-debug.dribble Content-Transfer-Encoding: base64 FhYWDg4ODg4ODgsLCwsLCwsLCwsLCwsLCwsLCwsLCzx0YWI+eyJjbGFzcyIsIFJXU1RfQyAweDgw MDAwMmY8TS1iYWNrc3BhY2U+PGJhY2tzcGFjZT4sICJjbGFzcyBuYW1lIiwgTlVMTH0sPHJldHVy bj48dGFiPnsidHlwZSIsIFJXU1RfVCAweDgwMDAwMmY8TS1iYWNrc3BhY2U+PGJhY2tzcGFjZT4s ICJ0eXBlIG5hbWUiLCBOVUxMfSw8cmV0dXJuPjx0YWI+eyJmbG93dHlwZSwgIlJXU1RfRkxPIDB4 ODAwMDAyZjxNLWJhY2tzcGFjZT48TS1iYWNrc3BhY2U+PGJhY2tzcGFjZT4sICJmbG93dHlwZSBu YW1lIiwgTlVMTH0sPHJldHVybj48dGFiPnsic2Vuc29yIiwgEAYGLDxiYWNrc3BhY2U+PGJhY2tz cGFjZT48YmFja3NwYWNlPjxiYWNrc3BhY2U+IiwuPGJhY2tzcGFjZT4gDlJXU1RfU0UgMHg4MDAw MDJmPE0tYmFja3NwYWNlPjxNLWJhY2tzcGFjZT48YmFja3NwYWNlPiwuPGJhY2tzcGFjZT4gInNl bnNvciBuYW1lIiwgTlVMTH0bLBAFPHJldHVybj48dGFiPnsiaWQtZmxvd3R5cGUiLCBSV1NUX0ZM IDB4ODAwMDAyZl8gMHg4MDAwMDJmPE0tYmFja3NwYWNlPjxiYWNrc3BhY2U+LCAiZmxvd3R5cGUg aW50ZWdlciBpZGUgMHg4MDAwMDJmPE0tYmFja3NwYWNlPmlkZW50aWZpZXIiLCBOVUxMfSwOLDxy ZXR1cm4+PHRhYj57ImlkLXNlbnNvciIsIFJTVF9TRSAweDgwMDAwMmY8YmFja3NwYWNlPjxiYWNr c3BhY2U+PGJhY2tzcGFjZT48YmFja3NwYWNlPjxiYWNrc3BhY2U+V1NUX1NFIDB4ODAwMDAyZl8g MHg4MDAwMDJmPE0tYmFja3NwYWNlPjxiYWNrc3BhY2U+LCAic2Vuc29yIGludGVnZXIgaWRlbnQg MHg4MDAwMDJmIiwuPGJhY2tzcGFjZT4gTlVMTH0sPHJldHVybj48dGFiPnsiZGV4ZnJpYjxiYWNr c3BhY2U+PGJhY2tzcGFjZT48YmFja3NwYWNlPjxiYWNrc3BhY2U+PGJhY2tzcGFjZT5zY3JpYmUt c2Vucm88YmFja3NwYWNlPjxiYWNrc3BhY2U+b3IiLCBSV1NUX1NFIDB4ODAwMDAyZjxNLWJhY2tz cGFjZT5EIDB4ODAwMDAyZiwgInNlbnNvciBkZXNjIDB4ODAwMDAyZjxiYWNrc3BhY2U+PGJhY2tz cGFjZT48YmFja3NwYWNlPmlwdGlvbiIsIE5VTEx9LDxyZXR1cm4+PHRhYj57ImRlZmF1bHQtY2xh c3MiLCBSV1NUX0RSRiAweDgwMDAwMmY8YmFja3NwYWNlPjxiYWNrc3BhY2U+RURGPGJhY2tzcGFj ZT48YmFja3NwYWNlPkYgMHg4MDAwMDJmPE0tYmFja3NwYWNlPjxNLWJhY2tzcGFjZT5DIDB4ODAw MDAyZjxNLWJhY2tzcGFjZT48YmFja3NwYWNlPiwgImRlZmF1bHQgY2xhc3MgbmFtZSIsIE5VTEx9 LDxyZXR1cm4+PHRhYj57ImRlZmF1bHQtdHlwZSIsIFJXU1RfREUgMHg4MDAwMDJmIDB4ODAwMDAy ZjxNLWJhY2tzcGFjZT48YmFja3NwYWNlPiwgImRlZmF1bHQgdHlwZSBuYW1lIiwgTlVMTH0sPHJl dHVybj48dGFiPnsibWFyay1kZWZhdWx0cyIsIFJXU188YmFja3NwYWNlPlRfTUEgMHg4MDAwMDJm LCA8YmFja3NwYWNlPjxyZXR1cm4+PHRhYj4iJysnIGZvciBkZWZhdWx0IGNsYXNzZXMsICcqJyBm b3IgdHlwZXMiLCBOVUw6PGJhY2tzcGFjZT5MfSw8cmV0dXJuPjx0YWI+eyJjbGFzczpsaXN0Iiwg UlNUPGJhY2tzcGFjZT48Uy1iYWNrc3BhY2U+V1NUX0NMQSAweDgwMDAwMmYgMHg4MDAwMDJmLCAi bGlzdCBvZiBjbGFzcyBuYW1lcyIsIE5VTEx9LDxyZXR1cm4+PHRhYj57InR5cGU6bGlzdCIsIFJX U1RfVFkgMHg4MDAwMDJmX0wgMHg4MDAwMDJmLCAibGlzdCBvZiB0eXBlIG5hbWVzIiwgTlVMTH0s PHJldHVybj48dGFiPnsiZmxvd3R5cGU6bGlzdCIsIFJFU1RfRkwgMHg4MDAwMDJmPGJhY2tzcGFj ZT48TS1iYWNrc3BhY2U+PE0tYmFja3NwYWNlPlJXU1RfRkwgMHg4MDAwMDJmPE0tYmFja3NwYWNl PiAweDgwMDAwNmMQEBAQBUwgMHg4MDAwMDJmLCAibGlzdCBvZiBmbG93dHlwZSBuYW1lcyIsIE5V TEx9LDxyZXR1cm4+PHRhYj48dGFiPiAweDgwMDAwNzhjLXN5PHRhYj48cmV0dXJuPiAweDQwMDAw MjAgMHg4MDAwMDc4IDB4ODAwMDA3MDxyZXR1cm4+IDB4ODAwMDA3OC1jLW1vPHRhYj5kPHRhYj4t PHRhYj4BC2Mtc3k8dGFiPgELY2Mtc3k8dGFiPgc8aGVscC1lY2hvPjxoZWxwLWVjaG8+PGhlbHAt ZWNobz48aGVscC1lY2hvPjxoZWxwLWVjaG8+PGhlbHAtZWNobz48aGVscC1lY2hvPjxoZWxwLWVj aG8+PGhlbHAtZWNobz48aGVscC1lY2hvPjxoZWxwLWVjaG8+PGhlbHAtZWNobz48aGVscC1lY2hv PjxoZWxwLWVjaG8+PGhlbHAtZWNobz48aGVscC1lY2hvPjxoZWxwLWVjaG8+PGhlbHAtZWNobz48 aGVscC1lY2hvPjxoZWxwLWVjaG8+PGhlbHAtZWNobz48aGVscC1lY2hvPjxoZWxwLWVjaG8+PGhl bHAtZWNobz48aGVscC1lY2hvPjxoZWxwLWVjaG8+PGhlbHAtZWNobz48aGVscC1lY2hvPjxoZWxw LWVjaG8+PGhlbHAtZWNobz48aGVscC1lY2hvPjxoZWxwLWVjaG8+PGhlbHAtZWNobz48aGVscC1l Y2hvPjxoZWxwLWVjaG8+PGhlbHAtZWNobz48aGVscC1lY2hvPjxoZWxwLWVjaG8+PGhlbHAtZWNo bz48aGVscC1lY2hvPjxoZWxwLWVjaG8+IDB4ODAwMDA3OGMtcG9pbnQtc3k8dGFiPjxiYWNrc3Bh Y2U+PE0tYmFja3NwYWNlPjxNLWJhY2tzcGFjZT48aGVscC1lY2hvPgcHPHRhYj48aGVscC1lY2hv PiAweDgwMDAwM2E5c2V0cTxNLWJhY2tzcGFjZT4oc2V0cSBjLWV4aG88YmFja3NwYWNlPjxiYWNr c3BhY2U+PGJhY2tzcGFjZT5jaG8tc3ludGFjdGljLWluZm9ybWF0aW9uIHQpPHJldHVybj48dGFi Pjx0YWI+IDB4ODAwMDA3OCAweDgwMDAwNzAHByAweDgwMDAwM2EgMHg4MDAwMDcwBQICAi1wBTxy ZXR1cm4+PHRhYj4QPHRhYj4QPHRhYj4QPHRhYj4QEBA8dGFiPhAQEDx0YWI+EBAQPHRhYj4QEDx0 YWI+Dg4ODg4ODg4ODg4ODg48dGFiPhA8dGFiPg48dGFiPhgDbnllczxyZXR1cm4+ --=-=-= Content-Type: text/plain I am hoping that my typing sequence is enough to replicate the problem, and that timing doesn't play any part. Hope this helps. -- Michael Welsh Duggan (md5i@md5i.com) --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Mon Oct 10 00:15:26 2011 Received: (at 9560) by debbugs.gnu.org; 10 Oct 2011 04:15:26 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1RD7Gv-00059k-IH for submit@debbugs.gnu.org; Mon, 10 Oct 2011 00:15:26 -0400 Received: from md5i.com ([75.151.244.229] helo=maru.md5i.com) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1RD7Gq-00059V-KG for 9560@debbugs.gnu.org; Mon, 10 Oct 2011 00:15:22 -0400 Received: from md5i by maru.md5i.com with local (Exim 4.76) (envelope-from ) id 1RD7Gb-0005PN-EV for 9560@debbugs.gnu.org; Mon, 10 Oct 2011 00:15:05 -0400 From: Michael Welsh Duggan To: 9560@debbugs.gnu.org Subject: Cache information during failure Date: Mon, 10 Oct 2011 00:15:04 -0400 Message-ID: <87ipnx5vp3.fsf@maru.md5i.com> User-Agent: Gnus/5.110018 (No Gnus v0.18) Emacs/24.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: -3.2 (---) X-Debbugs-Envelope-To: 9560 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -3.2 (---) --=-=-= Content-Type: text/plain I tried recreating the problem again, successfully. This time, I evaluated the c-state-dump function in the comments in cc-engine. Here is that state data, and the file at that point: "(setq c-state-cache '(4054 (3986 . 4048))) (setq c-state-cache-good-pos 4055) (setq c-state-nonlit-pos-cache 'nil) (setq c-state-nonlit-pos-cache-limit 3497) (setq c-state-brace-pair-desert '(3495 . 3986)) (setq c-state-point-min 1) (setq c-state-point-min-lit-type nil) (setq c-state-point-min-lit-start nil) (setq c-state-min-scan-pos 1) (setq c-state-old-cpp-beg nil) (setq c-state-old-cpp-end nil) " --=-=-= Content-Type: text/x-csrc Content-Disposition: attachment; filename=rwsiteinfo-backup.c /* ** Copyright (C) 2011 by Carnegie Mellon University. ** ** @OPENSOURCE_HEADER_START@ ** ** Use of the SILK system and related source code is subject to the terms ** of the following licenses: ** ** GNU Public License (GPL) Rights pursuant to Version 2, June 1991 ** Government Purpose License Rights (GPLR) pursuant to DFARS 252.227.7013 ** ** NO WARRANTY ** ** ANY INFORMATION, MATERIALS, SERVICES, INTELLECTUAL PROPERTY OR OTHER ** PROPERTY OR RIGHTS GRANTED OR PROVIDED BY CARNEGIE MELLON UNIVERSITY ** PURSUANT TO THIS LICENSE (HEREINAFTER THE "DELIVERABLES") ARE ON AN ** "AS-IS" BASIS. CARNEGIE MELLON UNIVERSITY MAKES NO WARRANTIES OF ANY ** KIND, EITHER EXPRESS OR IMPLIED AS TO ANY MATTER INCLUDING, BUT NOT ** LIMITED TO, WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE, ** MERCHANTABILITY, INFORMATIONAL CONTENT, NONINFRINGEMENT, OR ERROR-FREE ** OPERATION. CARNEGIE MELLON UNIVERSITY SHALL NOT BE LIABLE FOR INDIRECT, ** SPECIAL OR CONSEQUENTIAL DAMAGES, SUCH AS LOSS OF PROFITS OR INABILITY ** TO USE SAID INTELLECTUAL PROPERTY, UNDER THIS LICENSE, REGARDLESS OF ** WHETHER SUCH PARTY WAS AWARE OF THE POSSIBILITY OF SUCH DAMAGES. ** LICENSEE AGREES THAT IT WILL NOT MAKE ANY WARRANTY ON BEHALF OF ** CARNEGIE MELLON UNIVERSITY, EXPRESS OR IMPLIED, TO ANY PERSON ** CONCERNING THE APPLICATION OF OR THE RESULTS TO BE OBTAINED WITH THE ** DELIVERABLES UNDER THIS LICENSE. ** ** Licensee hereby agrees to defend, indemnify, and hold harmless Carnegie ** Mellon University, its trustees, officers, employees, and agents from ** all claims or demands made against them (and any related losses, ** expenses, or attorney's fees) arising out of, or relating to Licensee's ** and/or its sub licensees' negligent use or willful misuse of or ** negligent conduct or willful misconduct regarding the Software, ** facilities, or other rights or assistance granted by Carnegie Mellon ** University under this License, including, but not limited to, any ** claims of product liability, personal injury, death, damage to ** property, or violation of any laws or regulations. ** ** Carnegie Mellon University Software Engineering Institute authored ** documents are sponsored by the U.S. Department of Defense under ** Contract FA8721-05-C-0003. Carnegie Mellon University retains ** copyrights in all material produced under this contract. The U.S. ** Government retains a non-exclusive, royalty-free license to publish or ** reproduce these documents, or allow others to do so, for U.S. ** Government purposes only pursuant to the copyright license under the ** contract clause at 252.227.7013. ** ** @OPENSOURCE_HEADER_END@ */ /* ** Prints information about SiLK site configurations ** ** Michael Duggan ** September 2011 */ #include RCSIDENT("$Id$"); #include #include #include #include /* LOCAL DEFINES AND TYPEDEFS */ /* where to write --help output */ #define USAGE_FH stdout /* LOCAL VARIABLE DEFINITIONS */ typedef enum { RWST_CLASS, RWST_TYPE, RWST_FLOWTYPE, RWST_FLOWTYPE_ID, RWST_SENSOR, RWST_SENSOR_ID, RWST_SENSOR_DESC, RWST_DEFAULT_CLASS, RWST_DEFAULT_TYPE, RWST_MARK_DEFAULTS, RWST_CLASS_LIST, RWST_TYPE_LIST, RWST_FLOWTYPE_LIST, RWST_FLOWTYPE_ID_LIST, RWST_SENSOR_LIST, RWST_SENSOR_ID_LIST, RWST_DEFAULT_CLASS_LIST, RWST_DEFAULT_TYPE_LIST } rws_type_t; static const sk_stringmap_entry_t field_map_entries[] = { {"class", RWST_CLASS, "class name", NULL}, {"type", RWST_TYPE, "type name", NULL}, {"flowtype", RWST_FLOWTYPE, "flowtype name", NULL}, {"id-flowtype", RWST_FLOWTYPE_ID, "flowtype integer identifier", NULL}, {"sensor", RWST_SENSOR, "sensor name", NULL}, {"id-sensor", RWST_SENSOR_ID, "sensor integer identifier", NULL}, {"describe-sensor", RWST_SENSOR_DESC, "sensor description", NULL}, {"default-class", RWST_DEFAULT_CLASS, "default class name", NULL}, {"default-type", RWST_DEFAULT_TYPE, "default type name", NULL}, {"mark-defaults", RWST_MARK_DEFAULTS, " }; /* OPTIONS SETUP */ typedef enum { OPT_NO_TITLES, OPT_NO_COLUMNS, OPT_COLUMN_SEPARATOR, OPT_NO_FINAL_DELIMITER, OPT_DELIMITED, OPT_OUTPUT_PATH, OPT_PAGER } appOptionsEnum; static struct option appOptions[] = { {"no-titles", NO_ARG, 0, OPT_NO_TITLES}, {"no-columns", NO_ARG, 0, OPT_NO_COLUMNS}, {"column-separator", REQUIRED_ARG, 0, OPT_COLUMN_SEPARATOR}, {"no-final-delimiter", NO_ARG, 0, OPT_NO_FINAL_DELIMITER}, {"delimited", OPTIONAL_ARG, 0, OPT_DELIMITED}, {"output-path", REQUIRED_ARG, 0, OPT_OUTPUT_PATH}, {"pager", REQUIRED_ARG, 0, OPT_PAGER}, {0,0,0,0} /* sentinel entry */ {0,0,0,0} /* sentinel entry */ }; static const char *appHelp[] = { "Do not print column headers. Def. Print titles.", "Disable fixed-width columnar output. Def. Columnar", "Use specified character between columns. Def. '|'", "Suppress column delimiter at end of line. Def. No", "Shortcut for --no-columns --no-final-del --column-sep=CHAR", "Send output to given file path. Def. stdout", "Program to invoke to page output. Def. $SILK_PAGER or $PAGER", (char *)NULL }; /* LOCAL FUNCTION PROTOTYPES */ static void appUsageLong(void); static void appTeardown(void); static void appSetup(int argc, char **argv); static int appOptionsHandler(clientData cData, int opt_index, char *opt_arg); /* FUNCTION DEFINITIONS */ /* * appUsageLong(); * * Print complete usage information to USAGE_FH. Pass this * function to skOptionsSetUsageCallback(); skOptionsParse() will * call this funciton and then exit the program when the --help * option is given. */ static void appUsageLong(void) { #define USAGE_MSG \ ("\n" \ "\tOutputs information about a SiLK site configuration.\n") FILE *fh = USAGE_FH; int i; fprintf(fh, "%s %s", skAppName(), USAGE_MSG); fprintf(fh, "\nSWITCHES:\n"); skOptionsDefaultUsage(fh); for (i = 0; appOptions[i].name; i++ ) { fprintf(fh, "--%s %s. ", appOptions[i].name, SK_OPTION_HAS_ARG(appOptions[i])); switch (appOptions[i].val) { case OPT_FIELDS: /* Dynamically build the help */ usageFields(fh); break; default: /* Simple static help text from the appHelp array */ fprintf(fh, "%s\n", appHelp[i]); break; } } skOptionsCtxOptionsUsage(optctx, fh); } /* * appTeardown() * * Teardown all modules, close all files, and tidy up all * application state. * * This function is idempotent. */ static void appTeardown(void) { static int teardownFlag = 0; if (teardownFlag) { return; } teardownFlag = 1; #error "Anything you put in setup should now be torn down" /* for example, close sample output file */ skStreamDestroy(&out_ios); skAppUnregister(); } /* * appSetup(argc, argv); * * Perform all the setup for this application include setting up * required modules, parsing options, etc. This function should be * passed the same arguments that were passed into main(). * * Returns to the caller if all setup succeeds. If anything fails, * this function will cause the application to exit with a FAILURE * exit status. */ static void appSetup(int argc, char **argv) { SILK_FEATURES_DEFINE_STRUCT(features); int rv; /* verify same number of options and help strings */ assert((sizeof(appHelp)/sizeof(char *)) == (sizeof(appOptions)/sizeof(struct option))); /* register the application */ skAppRegister(argv[0]); skAppVerifyFeatures(&features, NULL); skOptionsSetUsageCallback(&appUsageLong); /* initialize globals */ #error "Initialize any global variables here" /* for example: set global output to NULL */ out_ios = NULL; /* register the options */ if (skOptionsRegister(appOptions, &appOptionsHandler, NULL) || sksiteOptionsRegister(SK_SITE_FLAG_CONFIG_FILE)) { skAppPrintErr("Unable to register options"); exit(EXIT_FAILURE); } #error "Do any other module setup here" /* parse the options */ arg_index = skOptionsParse(argc, argv); if (arg_index < 0) { /* options parsing should print error */ skAppUsage(); /* never returns */ } /* try to load site config file; if it fails, we will not be able * to resolve flowtype and sensor from input file names */ sksiteConfigure(0); #error "Do any options validation here" #error "If you expect filenames on command line keep this:" /* arg_index is looking at first file name to process */ if (arg_index == argc) { if (FILEIsATty(stdin)) { skAppPrintErr("No input files on command line and" " stdin is connected to a terminal"); skAppUsage(); /* never returns */ } } #error "If you do NOT expect filenames on command line, keep this:" /* check for extraneous arguments */ if (arg_index != argc) { skAppPrintErr("Too many arguments or unrecognized switch '%s'", argv[arg_index]); skAppUsage(); /* never returns */ } #error "Once all options are set, open input and output" /* for example, open a SiLK flow file as an output file */ rv = skStreamOpenSilkFlow(&out_ios, output_path, SK_IO_WRITE); if (rv) { skStreamPrintLastErr(out_ios, rv, &skAppPrintErr); skAppPrintErr("Unable to open output file. Exiting"); skStreamDestroy(&out_ios); exit(EXIT_FAILURE); } if (atexit(appTeardown) < 0) { skAppPrintErr("Unable to register appTeardown() with atexit()"); appTeardown(); exit(EXIT_FAILURE); } return; /* OK */ } /* * status = appOptionsHandler(cData, opt_index, opt_arg); * * This function is passed to skOptionsRegister(); it will be called * by skOptionsParse() for each user-specified switch that the * application has registered; it should handle the switch as * required---typically by setting global variables---and return 1 * if the switch processing failed or 0 if it succeeded. Returning * a non-zero from from the handler causes skOptionsParse() to return * a negative value. * * The clientData in 'cData' is typically ignored; 'opt_index' is * the index number that was specified as the last value for each * struct option in appOptions[]; 'opt_arg' is the user's argument * to the switch for options that have a REQUIRED_ARG or an * OPTIONAL_ARG. */ static int appOptionsHandler( clientData UNUSED(cData), int opt_index, char *opt_arg) { int rv; switch ((appOptionsEnum)opt_index) { #error "Add options handling here. Return 1 on failure." case OPT_FIRST: /* remove when real options added */ /* do something with the argument to the switch; for example, * parse as an integer */ rv = skStringParseUint32(&value, opt_arg, 0, 0); if (rv) { skAppPrintErr("Invalid %s '%s': %s", appOptions[opt_index].name, opt_arg, skStringParseStrerror(rv)); return 1; } break; case OPT_SECOND: /* remove when real options added */ /* set a flag based on this option */ flag = 1; break; } return 0; /* OK */ } /* * rwios = appNextInput(argc, argv); * * Open and return the next input file from the command line or the * standard input if no files were given on the command line. */ static skstream_t *appNextInput(int argc, char **argv) { static int initialized = 0; skstream_t *rwios = NULL; const char *fname = NULL; int rv; if (arg_index < argc) { /* get current file and prepare to get next */ fname = argv[arg_index]; ++arg_index; } else { if (initialized) { /* no more input */ return NULL; } /* input is from stdin */ fname = "stdin"; } initialized = 1; /* create rwios and open file */ rv = skStreamOpenSilkFlow(&rwios, fname, SK_IO_READ); if (rv) { skStreamPrintLastErr(rwios, rv, NULL); skStreamDestroy(&rwios); } return rwios; } int main(int argc, char **argv) { skstream_t *in_ios; int in_rv = SKSTREAM_OK; int rv = SKSTREAM_OK; appSetup(argc, argv); /* never returns on error */ #error "Loop over files on command line or read from stdin." #error "Process each file, preferably in a separate function." /* For each input, process each record */ while (NULL != (in_ios = appNextInput(argc, argv))) { while ((in_rv = skStreamReadRecord(in_ios, &rwrec)) == SKSTREAM_OK) { /* process record */ rv = skStreamWriteRecord(out_ios, &rwrec); if (SKSTREAM_OK != rv) { skStreamPrintLastErr(out_ios, rv, &skAppPrintErr); skStreamDestroy(&in_ios); goto END; } } if (SKSTREAM_ERR_EOF != in_rv) { skStreamPrintLastErr(in_ios, in_rv, &skAppPrintErr); } skStreamDestroy(&in_ios); } rv = skStreamClose(out_ios); if (SKSTREAM_OK != rv) { skStreamPrintLastErr(out_ios, rv, &skAppPrintErr); } END: return ((SKSTREAM_OK == rv) ? EXIT_SUCCESS : EXIT_FAILURE); } /* ** Local Variables: ** mode:c ** indent-tabs-mode:nil ** c-basic-offset:4 ** End: */ --=-=-= Content-Type: text/plain -- Michael Welsh Duggan (md5i@md5i.com) --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Wed Oct 12 22:33:57 2011 Received: (at 9560) by debbugs.gnu.org; 13 Oct 2011 02:33:57 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1REB7N-0007xL-6h for submit@debbugs.gnu.org; Wed, 12 Oct 2011 22:33:57 -0400 Received: from md5i.com ([75.151.244.229] helo=maru.md5i.com) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1REB7K-0007x8-0r for 9560@debbugs.gnu.org; Wed, 12 Oct 2011 22:33:55 -0400 Received: from md5i by maru.md5i.com with local (Exim 4.76) (envelope-from ) id 1REB6o-0005Dm-Oq for 9560@debbugs.gnu.org; Wed, 12 Oct 2011 22:33:22 -0400 From: Michael Welsh Duggan To: 9560@debbugs.gnu.org Subject: An exact recipe Date: Wed, 12 Oct 2011 22:33:22 -0400 Message-ID: <87zkh54o3x.fsf@maru.md5i.com> User-Agent: Gnus/5.110018 (No Gnus v0.18) Emacs/24.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: -3.2 (---) X-Debbugs-Envelope-To: 9560 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -3.1 (---) --=-=-= Content-Type: text/plain >From emacs -Q: Do NOT resize the frame. The recipe includes C-v, which depends on the window (and hence frame) size. Load the following file: --=-=-= Content-Type: text/x-csrc Content-Disposition: attachment; filename=rwsiteinfo-backup.c /* ** Copyright (C) 2011 by Carnegie Mellon University. ** ** @OPENSOURCE_HEADER_START@ ** ** Use of the SILK system and related source code is subject to the terms ** of the following licenses: ** ** GNU Public License (GPL) Rights pursuant to Version 2, June 1991 ** Government Purpose License Rights (GPLR) pursuant to DFARS 252.227.7013 ** ** NO WARRANTY ** ** ANY INFORMATION, MATERIALS, SERVICES, INTELLECTUAL PROPERTY OR OTHER ** PROPERTY OR RIGHTS GRANTED OR PROVIDED BY CARNEGIE MELLON UNIVERSITY ** PURSUANT TO THIS LICENSE (HEREINAFTER THE "DELIVERABLES") ARE ON AN ** "AS-IS" BASIS. CARNEGIE MELLON UNIVERSITY MAKES NO WARRANTIES OF ANY ** KIND, EITHER EXPRESS OR IMPLIED AS TO ANY MATTER INCLUDING, BUT NOT ** LIMITED TO, WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE, ** MERCHANTABILITY, INFORMATIONAL CONTENT, NONINFRINGEMENT, OR ERROR-FREE ** OPERATION. CARNEGIE MELLON UNIVERSITY SHALL NOT BE LIABLE FOR INDIRECT, ** SPECIAL OR CONSEQUENTIAL DAMAGES, SUCH AS LOSS OF PROFITS OR INABILITY ** TO USE SAID INTELLECTUAL PROPERTY, UNDER THIS LICENSE, REGARDLESS OF ** WHETHER SUCH PARTY WAS AWARE OF THE POSSIBILITY OF SUCH DAMAGES. ** LICENSEE AGREES THAT IT WILL NOT MAKE ANY WARRANTY ON BEHALF OF ** CARNEGIE MELLON UNIVERSITY, EXPRESS OR IMPLIED, TO ANY PERSON ** CONCERNING THE APPLICATION OF OR THE RESULTS TO BE OBTAINED WITH THE ** DELIVERABLES UNDER THIS LICENSE. ** ** Licensee hereby agrees to defend, indemnify, and hold harmless Carnegie ** Mellon University, its trustees, officers, employees, and agents from ** all claims or demands made against them (and any related losses, ** expenses, or attorney's fees) arising out of, or relating to Licensee's ** and/or its sub licensees' negligent use or willful misuse of or ** negligent conduct or willful misconduct regarding the Software, ** facilities, or other rights or assistance granted by Carnegie Mellon ** University under this License, including, but not limited to, any ** claims of product liability, personal injury, death, damage to ** property, or violation of any laws or regulations. ** ** Carnegie Mellon University Software Engineering Institute authored ** documents are sponsored by the U.S. Department of Defense under ** Contract FA8721-05-C-0003. Carnegie Mellon University retains ** copyrights in all material produced under this contract. The U.S. ** Government retains a non-exclusive, royalty-free license to publish or ** reproduce these documents, or allow others to do so, for U.S. ** Government purposes only pursuant to the copyright license under the ** contract clause at 252.227.7013. ** ** @OPENSOURCE_HEADER_END@ */ /* ** Prints information about SiLK site configurations ** ** Michael Duggan ** September 2011 */ #include RCSIDENT("$Id$"); #include #include #include #include /* LOCAL DEFINES AND TYPEDEFS */ /* where to write --help output */ #define USAGE_FH stdout /* LOCAL VARIABLE DEFINITIONS */ typedef enum { RWST_CLASS, RWST_TYPE, RWST_FLOWTYPE, RWST_FLOWTYPE_ID, RWST_SENSOR, RWST_SENSOR_ID, RWST_SENSOR_DESC, RWST_DEFAULT_CLASS, RWST_DEFAULT_TYPE, RWST_MARK_DEFAULTS, RWST_CLASS_LIST, RWST_TYPE_LIST, RWST_FLOWTYPE_LIST, RWST_FLOWTYPE_ID_LIST, RWST_SENSOR_LIST, RWST_SENSOR_ID_LIST, RWST_DEFAULT_CLASS_LIST, RWST_DEFAULT_TYPE_LIST } rws_type_t; static const sk_stringmap_entry_t field_map_entries[] = { {"class", RWST_CLASS, "class name", NULL}, {"type", RWST_TYPE, "type name", NULL}, {"flowtype", RWST_FLOWTYPE, "flowtype name", NULL}, {"id-flowtype", RWST_FLOWTYPE_ID, "flowtype integer identifier", NULL}, {"sensor", RWST_SENSOR, "sensor name", NULL}, {"id-sensor", RWST_SENSOR_ID, "sensor integer identifier", NULL}, {"describe-sensor", RWST_SENSOR_DESC, "sensor description", NULL}, {"default-class", RWST_DEFAULT_CLASS, "default class name", NULL}, {"default-type", RWST_DEFAULT_TYPE, "default type name", NULL}, {"mark-defaults", RWST_MARK_DEFAULTS, "'+' for default classes, '*' for types", NULL}, }; /* OPTIONS SETUP */ typedef enum { OPT_NO_TITLES, OPT_NO_COLUMNS, OPT_COLUMN_SEPARATOR, OPT_NO_FINAL_DELIMITER, OPT_DELIMITED, OPT_OUTPUT_PATH, OPT_PAGER } appOptionsEnum; static struct option appOptions[] = { {"no-titles", NO_ARG, 0, OPT_NO_TITLES}, {"no-columns", NO_ARG, 0, OPT_NO_COLUMNS}, {"column-separator", REQUIRED_ARG, 0, OPT_COLUMN_SEPARATOR}, {"no-final-delimiter", NO_ARG, 0, OPT_NO_FINAL_DELIMITER}, {"delimited", OPTIONAL_ARG, 0, OPT_DELIMITED}, {"output-path", REQUIRED_ARG, 0, OPT_OUTPUT_PATH}, {"pager", REQUIRED_ARG, 0, OPT_PAGER}, {0,0,0,0} /* sentinel entry */ {0,0,0,0} /* sentinel entry */ }; static const char *appHelp[] = { "Do not print column headers. Def. Print titles.", "Disable fixed-width columnar output. Def. Columnar", "Use specified character between columns. Def. '|'", "Suppress column delimiter at end of line. Def. No", "Shortcut for --no-columns --no-final-del --column-sep=CHAR", "Send output to given file path. Def. stdout", "Program to invoke to page output. Def. $SILK_PAGER or $PAGER", (char *)NULL }; /* LOCAL FUNCTION PROTOTYPES */ static void appUsageLong(void); static void appTeardown(void); static void appSetup(int argc, char **argv); static int appOptionsHandler(clientData cData, int opt_index, char *opt_arg); /* FUNCTION DEFINITIONS */ /* * appUsageLong(); * * Print complete usage information to USAGE_FH. Pass this * function to skOptionsSetUsageCallback(); skOptionsParse() will * call this funciton and then exit the program when the --help * option is given. */ static void appUsageLong(void) { #define USAGE_MSG \ ("\n" \ "\tOutputs information about a SiLK site configuration.\n") FILE *fh = USAGE_FH; int i; fprintf(fh, "%s %s", skAppName(), USAGE_MSG); fprintf(fh, "\nSWITCHES:\n"); skOptionsDefaultUsage(fh); for (i = 0; appOptions[i].name; i++ ) { fprintf(fh, "--%s %s. ", appOptions[i].name, SK_OPTION_HAS_ARG(appOptions[i])); switch (appOptions[i].val) { case OPT_FIELDS: /* Dynamically build the help */ usageFields(fh); break; default: /* Simple static help text from the appHelp array */ fprintf(fh, "%s\n", appHelp[i]); break; } } skOptionsCtxOptionsUsage(optctx, fh); } /* * appTeardown() * * Teardown all modules, close all files, and tidy up all * application state. * * This function is idempotent. */ static void appTeardown(void) { static int teardownFlag = 0; if (teardownFlag) { return; } teardownFlag = 1; #error "Anything you put in setup should now be torn down" /* for example, close sample output file */ skStreamDestroy(&out_ios); skAppUnregister(); } /* * appSetup(argc, argv); * * Perform all the setup for this application include setting up * required modules, parsing options, etc. This function should be * passed the same arguments that were passed into main(). * * Returns to the caller if all setup succeeds. If anything fails, * this function will cause the application to exit with a FAILURE * exit status. */ static void appSetup(int argc, char **argv) { SILK_FEATURES_DEFINE_STRUCT(features); int rv; /* verify same number of options and help strings */ assert((sizeof(appHelp)/sizeof(char *)) == (sizeof(appOptions)/sizeof(struct option))); /* register the application */ skAppRegister(argv[0]); skAppVerifyFeatures(&features, NULL); skOptionsSetUsageCallback(&appUsageLong); /* initialize globals */ #error "Initialize any global variables here" /* for example: set global output to NULL */ out_ios = NULL; /* register the options */ if (skOptionsRegister(appOptions, &appOptionsHandler, NULL) || sksiteOptionsRegister(SK_SITE_FLAG_CONFIG_FILE)) { skAppPrintErr("Unable to register options"); exit(EXIT_FAILURE); } #error "Do any other module setup here" /* parse the options */ arg_index = skOptionsParse(argc, argv); if (arg_index < 0) { /* options parsing should print error */ skAppUsage(); /* never returns */ } /* try to load site config file; if it fails, we will not be able * to resolve flowtype and sensor from input file names */ sksiteConfigure(0); #error "Do any options validation here" #error "If you expect filenames on command line keep this:" /* arg_index is looking at first file name to process */ if (arg_index == argc) { if (FILEIsATty(stdin)) { skAppPrintErr("No input files on command line and" " stdin is connected to a terminal"); skAppUsage(); /* never returns */ } } #error "If you do NOT expect filenames on command line, keep this:" /* check for extraneous arguments */ if (arg_index != argc) { skAppPrintErr("Too many arguments or unrecognized switch '%s'", argv[arg_index]); skAppUsage(); /* never returns */ } #error "Once all options are set, open input and output" /* for example, open a SiLK flow file as an output file */ rv = skStreamOpenSilkFlow(&out_ios, output_path, SK_IO_WRITE); if (rv) { skStreamPrintLastErr(out_ios, rv, &skAppPrintErr); skAppPrintErr("Unable to open output file. Exiting"); skStreamDestroy(&out_ios); exit(EXIT_FAILURE); } if (atexit(appTeardown) < 0) { skAppPrintErr("Unable to register appTeardown() with atexit()"); appTeardown(); exit(EXIT_FAILURE); } return; /* OK */ } /* * status = appOptionsHandler(cData, opt_index, opt_arg); * * This function is passed to skOptionsRegister(); it will be called * by skOptionsParse() for each user-specified switch that the * application has registered; it should handle the switch as * required---typically by setting global variables---and return 1 * if the switch processing failed or 0 if it succeeded. Returning * a non-zero from from the handler causes skOptionsParse() to return * a negative value. * * The clientData in 'cData' is typically ignored; 'opt_index' is * the index number that was specified as the last value for each * struct option in appOptions[]; 'opt_arg' is the user's argument * to the switch for options that have a REQUIRED_ARG or an * OPTIONAL_ARG. */ static int appOptionsHandler( clientData UNUSED(cData), int opt_index, char *opt_arg) { int rv; switch ((appOptionsEnum)opt_index) { #error "Add options handling here. Return 1 on failure." case OPT_FIRST: /* remove when real options added */ /* do something with the argument to the switch; for example, * parse as an integer */ rv = skStringParseUint32(&value, opt_arg, 0, 0); if (rv) { skAppPrintErr("Invalid %s '%s': %s", appOptions[opt_index].name, opt_arg, skStringParseStrerror(rv)); return 1; } break; case OPT_SECOND: /* remove when real options added */ /* set a flag based on this option */ flag = 1; break; } return 0; /* OK */ } /* * rwios = appNextInput(argc, argv); * * Open and return the next input file from the command line or the * standard input if no files were given on the command line. */ static skstream_t *appNextInput(int argc, char **argv) { static int initialized = 0; skstream_t *rwios = NULL; const char *fname = NULL; int rv; if (arg_index < argc) { /* get current file and prepare to get next */ fname = argv[arg_index]; ++arg_index; } else { if (initialized) { /* no more input */ return NULL; } /* input is from stdin */ fname = "stdin"; } initialized = 1; /* create rwios and open file */ rv = skStreamOpenSilkFlow(&rwios, fname, SK_IO_READ); if (rv) { skStreamPrintLastErr(rwios, rv, NULL); skStreamDestroy(&rwios); } return rwios; } int main(int argc, char **argv) { skstream_t *in_ios; int in_rv = SKSTREAM_OK; int rv = SKSTREAM_OK; appSetup(argc, argv); /* never returns on error */ #error "Loop over files on command line or read from stdin." #error "Process each file, preferably in a separate function." /* For each input, process each record */ while (NULL != (in_ios = appNextInput(argc, argv))) { while ((in_rv = skStreamReadRecord(in_ios, &rwrec)) == SKSTREAM_OK) { /* process record */ rv = skStreamWriteRecord(out_ios, &rwrec); if (SKSTREAM_OK != rv) { skStreamPrintLastErr(out_ios, rv, &skAppPrintErr); skStreamDestroy(&in_ios); goto END; } } if (SKSTREAM_ERR_EOF != in_rv) { skStreamPrintLastErr(in_ios, in_rv, &skAppPrintErr); } skStreamDestroy(&in_ios); } rv = skStreamClose(out_ios); if (SKSTREAM_OK != rv) { skStreamPrintLastErr(out_ios, rv, &skAppPrintErr); } END: return ((SKSTREAM_OK == rv) ? EXIT_SUCCESS : EXIT_FAILURE); } /* ** Local Variables: ** mode:c ** indent-tabs-mode:nil ** c-basic-offset:4 ** End: */ --=-=-= Content-Type: text/plain Type: M-x edit-kbd-macro RET y C-x e C-x h C-w C-x i When prompted, insert the following keyboard macro file: --=-=-= Content-Type: application/octet-stream Content-Disposition: attachment; filename=c-mode.macro Content-Transfer-Encoding: base64 OzsgS2V5Ym9hcmQgTWFjcm8gRWRpdG9yLiAgUHJlc3MgQy1jIEMtYyB0byBmaW5pc2g7IHByZXNz IEMteCBrIFJFVCB0byBjYW5jZWwuCjs7IE9yaWdpbmFsIGtleXM6IDMqQy12IDcqQy1uIDIxKkMt ayBUQUIgeyAiY2xhc3MiICwgU1BDIFJXU1RfQyBNLS8gTS1ERUwgREVMICwgU1BDICJjbGFzcyBT UEMgbmFtZSIgLCBTUEMgTlVMTCB9ICwgUkVUIFRBQiB7ICJ0eXBlIiAsIFNQQyBSV1NUX1QgTS0v IE0tREVMIERFTCAsIFNQQyAidHlwZSBTUEMgbmFtZSIgLCBTUEMgTlVMTCB9ICwgUkVUIFRBQiB7 ICJmbG93dHlwZSAsIFNQQyAiUldTVF9GTE8gTS0vIDIqTS1ERUwgREVMICwgU1BDICJmbG93dHlw ZSBTUEMgbmFtZSIgLCBTUEMgTlVMTCB9ICwgUkVUIFRBQiB7ICJzZW5zb3IiICwgU1BDIEMtcCAy KkMtZiAsIDQqREVMICIgLCAuIERFTCBTUEMgQy1uIFJXU1RfU0UgTS0vIDIqTS1ERUwgREVMICwg LiBERUwgU1BDICJzZW5zb3IgU1BDIG5hbWUiICwgU1BDIE5VTEwgfSBDLXAgQy1lIFJFVCBUQUIg eyAiaWQtZmxvd3R5cGUiICwgU1BDIFJXU1RfRkwgTS0vIF8gTS0vIE0tREVMIERFTCAsIFNQQyAi Zmxvd3R5cGUgU1BDIGludGVnZXIgU1BDIGlkZSBNLS8gTS1ERUwgaWRlbnRpZmllciIgLCBTUEMg TlVMTCB9ICwgQy1uICwgUkVUIFRBQiB7ICJpZC1zZW5zb3IiICwgU1BDIFJTVF9TRSA1KkRFTCBX U1RfU0UgTS0vIF8gTS0vIE0tREVMIERFTCAsIFNQQyAic2Vuc29yIFNQQyBpbnRlZ2VyIFNQQyBp ZGVudCBNLS8gIiAsIC4gREVMIFNQQyBOVUxMIH0gLCBSRVQgVEFCIHsgImRleGZyaWIgNSpERUwg c2NyaWJlLXNlbnJvIDIqREVMIG9yIiAsIFNQQyBSV1NUX1NFIE0tLyBNLURFTCBEIE0tLyAsIFNQ QyAic2Vuc29yIFNQQyBkZXNjIE0tLyAzKkRFTCBpcHRpb24iICwgU1BDIE5VTEwgfSAsIFJFVCBU QUIgeyAiZGVmYXVsdC1jbGFzcyIgLCBTUEMgUldTVF9EUkYgMipERUwgRURGIDIqREVMIEYgTS0v IDIqTS1ERUwgQyBNLS8gTS1ERUwgREVMICwgU1BDICJkZWZhdWx0IFNQQyBjbGFzcyBTUEMgbmFt ZSIgLCBTUEMgTlVMTCB9ICwgUkVUIFRBQiB7ICJkZWZhdWx0LXR5cGUiICwgU1BDIFJXU1RfREUg MipNLS8gTS1ERUwgREVMICwgU1BDICJkZWZhdWx0IFNQQyB0eXBlIFNQQyBuYW1lIiAsIFNQQyBO VUxMIH0gLCBSRVQgVEFCIHsgIm1hcmstZGVmYXVsdHMiICwgU1BDIFJXU18gREVMIFRfTUEgTS0v ICwgU1BDIERFTCBSRVQgVEFCICInKycgU1BDIGZvciBTUEMgZGVmYXVsdCBTUEMgY2xhc3NlcyAs IFNQQyAnICogJyBTUEMgZm9yIFNQQyB0eXBlcyIgLCBTUEMgTiBVIEwgOiBERUwgTCB9ICwgUkVU IFRBQiB7ICJjbGFzcyA6IGxpc3QiICwgU1BDIFJTVCBERUwgPFMtYmFja3NwYWNlPiBXU1RfQ0xB IDIqTS0vICwgU1BDICJsaXN0IFNQQyBvZiBTUEMgY2xhc3MgU1BDIG5hbWVzIiAsIFNQQyBOVUxM IH0gLCBSRVQgVEFCIHsgInR5cGUgOiBsaXN0IiAsIFNQQyBSV1NUX1RZIE0tLyBfTCBNLS8gLCBT UEMgImxpc3QgU1BDIG9mIFNQQyB0eXBlIFNQQyBuYW1lcyIgLCBTUEMgTlVMTCB9ICwgUkVUIFRB QiB7ICJmbG93dHlwZSA6IGxpc3QiICwgU1BDIFJFU1RfRkwgREVMIDIqTS1ERUwgUldTVF9GTCBN LS8gTS1ERUwgTS1sIDQqQy1wIEMtZSBMIE0tLyAsIFNQQyAibGlzdCBTUEMgb2YgU1BDIGZsb3d0 eXBlIFNQQyBuYW1lcyIgLCBTUEMgTlVMTCB9ICwgUkVUIDIqVEFCCgpDb21tYW5kOiBsYXN0LWti ZC1tYWNybwpLZXk6IG5vbmUKCk1hY3JvOgoKMypDLXYJCQk7OyBzY3JvbGwtdXAtY29tbWFuZAo3 KkMtbgkJCTs7IG5leHQtbGluZQoyMSpDLWsJCQk7OyBraWxsLWxpbmUKVEFCCQkJOzsgYy1pbmRl bnQtbGluZS1vci1yZWdpb24KewkJCTs7IGMtZWxlY3RyaWMtYnJhY2UKImNsYXNzIgkJCTs7IHNl bGYtaW5zZXJ0LWNvbW1hbmQgKiA3CiwJCQk7OyBjLWVsZWN0cmljLXNlbWkmY29tbWEKU1BDCQkJ Ozsgc2VsZi1pbnNlcnQtY29tbWFuZApSV1NUX0MJCQk7OyBzZWxmLWluc2VydC1jb21tYW5kICog NgpNLS8JCQk7OyBkYWJicmV2LWV4cGFuZApNLURFTAkJCTs7IGJhY2t3YXJkLWtpbGwtd29yZApE RUwJCQk7OyBjLWVsZWN0cmljLWJhY2tzcGFjZQosCQkJOzsgYy1lbGVjdHJpYy1zZW1pJmNvbW1h ClNQQwkJCTs7IHNlbGYtaW5zZXJ0LWNvbW1hbmQKImNsYXNzCQkJOzsgc2VsZi1pbnNlcnQtY29t bWFuZCAqIDYKU1BDCQkJOzsgc2VsZi1pbnNlcnQtY29tbWFuZApuYW1lIgkJCTs7IHNlbGYtaW5z ZXJ0LWNvbW1hbmQgKiA1CiwJCQk7OyBjLWVsZWN0cmljLXNlbWkmY29tbWEKU1BDCQkJOzsgc2Vs Zi1pbnNlcnQtY29tbWFuZApOVUxMCQkJOzsgc2VsZi1pbnNlcnQtY29tbWFuZCAqIDQKfQkJCTs7 IGMtZWxlY3RyaWMtYnJhY2UKLAkJCTs7IGMtZWxlY3RyaWMtc2VtaSZjb21tYQpSRVQJCQk7OyBu ZXdsaW5lClRBQgkJCTs7IGMtaW5kZW50LWxpbmUtb3ItcmVnaW9uCnsJCQk7OyBjLWVsZWN0cmlj LWJyYWNlCiJ0eXBlIgkJCTs7IHNlbGYtaW5zZXJ0LWNvbW1hbmQgKiA2CiwJCQk7OyBjLWVsZWN0 cmljLXNlbWkmY29tbWEKU1BDCQkJOzsgc2VsZi1pbnNlcnQtY29tbWFuZApSV1NUX1QJCQk7OyBz ZWxmLWluc2VydC1jb21tYW5kICogNgpNLS8JCQk7OyBkYWJicmV2LWV4cGFuZApNLURFTAkJCTs7 IGJhY2t3YXJkLWtpbGwtd29yZApERUwJCQk7OyBjLWVsZWN0cmljLWJhY2tzcGFjZQosCQkJOzsg Yy1lbGVjdHJpYy1zZW1pJmNvbW1hClNQQwkJCTs7IHNlbGYtaW5zZXJ0LWNvbW1hbmQKInR5cGUJ CQk7OyBzZWxmLWluc2VydC1jb21tYW5kICogNQpTUEMJCQk7OyBzZWxmLWluc2VydC1jb21tYW5k Cm5hbWUiCQkJOzsgc2VsZi1pbnNlcnQtY29tbWFuZCAqIDUKLAkJCTs7IGMtZWxlY3RyaWMtc2Vt aSZjb21tYQpTUEMJCQk7OyBzZWxmLWluc2VydC1jb21tYW5kCk5VTEwJCQk7OyBzZWxmLWluc2Vy dC1jb21tYW5kICogNAp9CQkJOzsgYy1lbGVjdHJpYy1icmFjZQosCQkJOzsgYy1lbGVjdHJpYy1z ZW1pJmNvbW1hClJFVAkJCTs7IG5ld2xpbmUKVEFCCQkJOzsgYy1pbmRlbnQtbGluZS1vci1yZWdp b24KewkJCTs7IGMtZWxlY3RyaWMtYnJhY2UKImZsb3d0eXBlCQk7OyBzZWxmLWluc2VydC1jb21t YW5kICogOQosCQkJOzsgYy1lbGVjdHJpYy1zZW1pJmNvbW1hClNQQwkJCTs7IHNlbGYtaW5zZXJ0 LWNvbW1hbmQKIlJXU1RfRkxPCQk7OyBzZWxmLWluc2VydC1jb21tYW5kICogOQpNLS8JCQk7OyBk YWJicmV2LWV4cGFuZAoyKk0tREVMCQkJOzsgYmFja3dhcmQta2lsbC13b3JkCkRFTAkJCTs7IGMt ZWxlY3RyaWMtYmFja3NwYWNlCiwJCQk7OyBjLWVsZWN0cmljLXNlbWkmY29tbWEKU1BDCQkJOzsg c2VsZi1pbnNlcnQtY29tbWFuZAoiZmxvd3R5cGUJCTs7IHNlbGYtaW5zZXJ0LWNvbW1hbmQgKiA5 ClNQQwkJCTs7IHNlbGYtaW5zZXJ0LWNvbW1hbmQKbmFtZSIJCQk7OyBzZWxmLWluc2VydC1jb21t YW5kICogNQosCQkJOzsgYy1lbGVjdHJpYy1zZW1pJmNvbW1hClNQQwkJCTs7IHNlbGYtaW5zZXJ0 LWNvbW1hbmQKTlVMTAkJCTs7IHNlbGYtaW5zZXJ0LWNvbW1hbmQgKiA0Cn0JCQk7OyBjLWVsZWN0 cmljLWJyYWNlCiwJCQk7OyBjLWVsZWN0cmljLXNlbWkmY29tbWEKUkVUCQkJOzsgbmV3bGluZQpU QUIJCQk7OyBjLWluZGVudC1saW5lLW9yLXJlZ2lvbgp7CQkJOzsgYy1lbGVjdHJpYy1icmFjZQoi c2Vuc29yIgkJOzsgc2VsZi1pbnNlcnQtY29tbWFuZCAqIDgKLAkJCTs7IGMtZWxlY3RyaWMtc2Vt aSZjb21tYQpTUEMJCQk7OyBzZWxmLWluc2VydC1jb21tYW5kCkMtcAkJCTs7IHByZXZpb3VzLWxp bmUKMipDLWYJCQk7OyBmb3J3YXJkLWNoYXIKLAkJCTs7IGMtZWxlY3RyaWMtc2VtaSZjb21tYQo0 KkRFTAkJCTs7IGMtZWxlY3RyaWMtYmFja3NwYWNlCiIJCQk7OyBzZWxmLWluc2VydC1jb21tYW5k CiwJCQk7OyBjLWVsZWN0cmljLXNlbWkmY29tbWEKLgkJCTs7IHNlbGYtaW5zZXJ0LWNvbW1hbmQK REVMCQkJOzsgYy1lbGVjdHJpYy1iYWNrc3BhY2UKU1BDCQkJOzsgc2VsZi1pbnNlcnQtY29tbWFu ZApDLW4JCQk7OyBuZXh0LWxpbmUKUldTVF9TRQkJCTs7IHNlbGYtaW5zZXJ0LWNvbW1hbmQgKiA3 Ck0tLwkJCTs7IGRhYmJyZXYtZXhwYW5kCjIqTS1ERUwJCQk7OyBiYWNrd2FyZC1raWxsLXdvcmQK REVMCQkJOzsgYy1lbGVjdHJpYy1iYWNrc3BhY2UKLAkJCTs7IGMtZWxlY3RyaWMtc2VtaSZjb21t YQouCQkJOzsgc2VsZi1pbnNlcnQtY29tbWFuZApERUwJCQk7OyBjLWVsZWN0cmljLWJhY2tzcGFj ZQpTUEMJCQk7OyBzZWxmLWluc2VydC1jb21tYW5kCiJzZW5zb3IJCQk7OyBzZWxmLWluc2VydC1j b21tYW5kICogNwpTUEMJCQk7OyBzZWxmLWluc2VydC1jb21tYW5kCm5hbWUiCQkJOzsgc2VsZi1p bnNlcnQtY29tbWFuZCAqIDUKLAkJCTs7IGMtZWxlY3RyaWMtc2VtaSZjb21tYQpTUEMJCQk7OyBz ZWxmLWluc2VydC1jb21tYW5kCk5VTEwJCQk7OyBzZWxmLWluc2VydC1jb21tYW5kICogNAp9CQkJ OzsgYy1lbGVjdHJpYy1icmFjZQpDLXAJCQk7OyBwcmV2aW91cy1saW5lCkMtZQkJCTs7IG1vdmUt ZW5kLW9mLWxpbmUKUkVUCQkJOzsgbmV3bGluZQpUQUIJCQk7OyBjLWluZGVudC1saW5lLW9yLXJl Z2lvbgp7CQkJOzsgYy1lbGVjdHJpYy1icmFjZQoiaWQtZmxvd3R5cGUiCQk7OyBzZWxmLWluc2Vy dC1jb21tYW5kICogMTMKLAkJCTs7IGMtZWxlY3RyaWMtc2VtaSZjb21tYQpTUEMJCQk7OyBzZWxm LWluc2VydC1jb21tYW5kClJXU1RfRkwJCQk7OyBzZWxmLWluc2VydC1jb21tYW5kICogNwpNLS8J CQk7OyBkYWJicmV2LWV4cGFuZApfCQkJOzsgc2VsZi1pbnNlcnQtY29tbWFuZApNLS8JCQk7OyBk YWJicmV2LWV4cGFuZApNLURFTAkJCTs7IGJhY2t3YXJkLWtpbGwtd29yZApERUwJCQk7OyBjLWVs ZWN0cmljLWJhY2tzcGFjZQosCQkJOzsgYy1lbGVjdHJpYy1zZW1pJmNvbW1hClNQQwkJCTs7IHNl bGYtaW5zZXJ0LWNvbW1hbmQKImZsb3d0eXBlCQk7OyBzZWxmLWluc2VydC1jb21tYW5kICogOQpT UEMJCQk7OyBzZWxmLWluc2VydC1jb21tYW5kCmludGVnZXIJCQk7OyBzZWxmLWluc2VydC1jb21t YW5kICogNwpTUEMJCQk7OyBzZWxmLWluc2VydC1jb21tYW5kCmlkZQkJCTs7IHNlbGYtaW5zZXJ0 LWNvbW1hbmQgKiAzCk0tLwkJCTs7IGRhYmJyZXYtZXhwYW5kCk0tREVMCQkJOzsgYmFja3dhcmQt a2lsbC13b3JkCmlkZW50aWZpZXIiCQk7OyBzZWxmLWluc2VydC1jb21tYW5kICogMTEKLAkJCTs7 IGMtZWxlY3RyaWMtc2VtaSZjb21tYQpTUEMJCQk7OyBzZWxmLWluc2VydC1jb21tYW5kCk5VTEwJ CQk7OyBzZWxmLWluc2VydC1jb21tYW5kICogNAp9CQkJOzsgYy1lbGVjdHJpYy1icmFjZQosCQkJ OzsgYy1lbGVjdHJpYy1zZW1pJmNvbW1hCkMtbgkJCTs7IG5leHQtbGluZQosCQkJOzsgYy1lbGVj dHJpYy1zZW1pJmNvbW1hClJFVAkJCTs7IG5ld2xpbmUKVEFCCQkJOzsgYy1pbmRlbnQtbGluZS1v ci1yZWdpb24KewkJCTs7IGMtZWxlY3RyaWMtYnJhY2UKImlkLXNlbnNvciIJCTs7IHNlbGYtaW5z ZXJ0LWNvbW1hbmQgKiAxMQosCQkJOzsgYy1lbGVjdHJpYy1zZW1pJmNvbW1hClNQQwkJCTs7IHNl bGYtaW5zZXJ0LWNvbW1hbmQKUlNUX1NFCQkJOzsgc2VsZi1pbnNlcnQtY29tbWFuZCAqIDYKNSpE RUwJCQk7OyBjLWVsZWN0cmljLWJhY2tzcGFjZQpXU1RfU0UJCQk7OyBzZWxmLWluc2VydC1jb21t YW5kICogNgpNLS8JCQk7OyBkYWJicmV2LWV4cGFuZApfCQkJOzsgc2VsZi1pbnNlcnQtY29tbWFu ZApNLS8JCQk7OyBkYWJicmV2LWV4cGFuZApNLURFTAkJCTs7IGJhY2t3YXJkLWtpbGwtd29yZApE RUwJCQk7OyBjLWVsZWN0cmljLWJhY2tzcGFjZQosCQkJOzsgYy1lbGVjdHJpYy1zZW1pJmNvbW1h ClNQQwkJCTs7IHNlbGYtaW5zZXJ0LWNvbW1hbmQKInNlbnNvcgkJCTs7IHNlbGYtaW5zZXJ0LWNv bW1hbmQgKiA3ClNQQwkJCTs7IHNlbGYtaW5zZXJ0LWNvbW1hbmQKaW50ZWdlcgkJCTs7IHNlbGYt aW5zZXJ0LWNvbW1hbmQgKiA3ClNQQwkJCTs7IHNlbGYtaW5zZXJ0LWNvbW1hbmQKaWRlbnQJCQk7 OyBzZWxmLWluc2VydC1jb21tYW5kICogNQpNLS8JCQk7OyBkYWJicmV2LWV4cGFuZAoiCQkJOzsg c2VsZi1pbnNlcnQtY29tbWFuZAosCQkJOzsgYy1lbGVjdHJpYy1zZW1pJmNvbW1hCi4JCQk7OyBz ZWxmLWluc2VydC1jb21tYW5kCkRFTAkJCTs7IGMtZWxlY3RyaWMtYmFja3NwYWNlClNQQwkJCTs7 IHNlbGYtaW5zZXJ0LWNvbW1hbmQKTlVMTAkJCTs7IHNlbGYtaW5zZXJ0LWNvbW1hbmQgKiA0Cn0J CQk7OyBjLWVsZWN0cmljLWJyYWNlCiwJCQk7OyBjLWVsZWN0cmljLXNlbWkmY29tbWEKUkVUCQkJ OzsgbmV3bGluZQpUQUIJCQk7OyBjLWluZGVudC1saW5lLW9yLXJlZ2lvbgp7CQkJOzsgYy1lbGVj dHJpYy1icmFjZQoiZGV4ZnJpYgkJOzsgc2VsZi1pbnNlcnQtY29tbWFuZCAqIDgKNSpERUwJCQk7 OyBjLWVsZWN0cmljLWJhY2tzcGFjZQpzY3JpYmUtc2Vucm8JCTs7IHNlbGYtaW5zZXJ0LWNvbW1h bmQgKiAxMgoyKkRFTAkJCTs7IGMtZWxlY3RyaWMtYmFja3NwYWNlCm9yIgkJCTs7IHNlbGYtaW5z ZXJ0LWNvbW1hbmQgKiAzCiwJCQk7OyBjLWVsZWN0cmljLXNlbWkmY29tbWEKU1BDCQkJOzsgc2Vs Zi1pbnNlcnQtY29tbWFuZApSV1NUX1NFCQkJOzsgc2VsZi1pbnNlcnQtY29tbWFuZCAqIDcKTS0v CQkJOzsgZGFiYnJldi1leHBhbmQKTS1ERUwJCQk7OyBiYWNrd2FyZC1raWxsLXdvcmQKRAkJCTs7 IHNlbGYtaW5zZXJ0LWNvbW1hbmQKTS0vCQkJOzsgZGFiYnJldi1leHBhbmQKLAkJCTs7IGMtZWxl Y3RyaWMtc2VtaSZjb21tYQpTUEMJCQk7OyBzZWxmLWluc2VydC1jb21tYW5kCiJzZW5zb3IJCQk7 OyBzZWxmLWluc2VydC1jb21tYW5kICogNwpTUEMJCQk7OyBzZWxmLWluc2VydC1jb21tYW5kCmRl c2MJCQk7OyBzZWxmLWluc2VydC1jb21tYW5kICogNApNLS8JCQk7OyBkYWJicmV2LWV4cGFuZAoz KkRFTAkJCTs7IGMtZWxlY3RyaWMtYmFja3NwYWNlCmlwdGlvbiIJCQk7OyBzZWxmLWluc2VydC1j b21tYW5kICogNwosCQkJOzsgYy1lbGVjdHJpYy1zZW1pJmNvbW1hClNQQwkJCTs7IHNlbGYtaW5z ZXJ0LWNvbW1hbmQKTlVMTAkJCTs7IHNlbGYtaW5zZXJ0LWNvbW1hbmQgKiA0Cn0JCQk7OyBjLWVs ZWN0cmljLWJyYWNlCiwJCQk7OyBjLWVsZWN0cmljLXNlbWkmY29tbWEKUkVUCQkJOzsgbmV3bGlu ZQpUQUIJCQk7OyBjLWluZGVudC1saW5lLW9yLXJlZ2lvbgp7CQkJOzsgYy1lbGVjdHJpYy1icmFj ZQoiZGVmYXVsdC1jbGFzcyIJCTs7IHNlbGYtaW5zZXJ0LWNvbW1hbmQgKiAxNQosCQkJOzsgYy1l bGVjdHJpYy1zZW1pJmNvbW1hClNQQwkJCTs7IHNlbGYtaW5zZXJ0LWNvbW1hbmQKUldTVF9EUkYJ CTs7IHNlbGYtaW5zZXJ0LWNvbW1hbmQgKiA4CjIqREVMCQkJOzsgYy1lbGVjdHJpYy1iYWNrc3Bh Y2UKRURGCQkJOzsgc2VsZi1pbnNlcnQtY29tbWFuZCAqIDMKMipERUwJCQk7OyBjLWVsZWN0cmlj LWJhY2tzcGFjZQpGCQkJOzsgc2VsZi1pbnNlcnQtY29tbWFuZApNLS8JCQk7OyBkYWJicmV2LWV4 cGFuZAoyKk0tREVMCQkJOzsgYmFja3dhcmQta2lsbC13b3JkCkMJCQk7OyBzZWxmLWluc2VydC1j b21tYW5kCk0tLwkJCTs7IGRhYmJyZXYtZXhwYW5kCk0tREVMCQkJOzsgYmFja3dhcmQta2lsbC13 b3JkCkRFTAkJCTs7IGMtZWxlY3RyaWMtYmFja3NwYWNlCiwJCQk7OyBjLWVsZWN0cmljLXNlbWkm Y29tbWEKU1BDCQkJOzsgc2VsZi1pbnNlcnQtY29tbWFuZAoiZGVmYXVsdAkJOzsgc2VsZi1pbnNl cnQtY29tbWFuZCAqIDgKU1BDCQkJOzsgc2VsZi1pbnNlcnQtY29tbWFuZApjbGFzcwkJCTs7IHNl bGYtaW5zZXJ0LWNvbW1hbmQgKiA1ClNQQwkJCTs7IHNlbGYtaW5zZXJ0LWNvbW1hbmQKbmFtZSIJ CQk7OyBzZWxmLWluc2VydC1jb21tYW5kICogNQosCQkJOzsgYy1lbGVjdHJpYy1zZW1pJmNvbW1h ClNQQwkJCTs7IHNlbGYtaW5zZXJ0LWNvbW1hbmQKTlVMTAkJCTs7IHNlbGYtaW5zZXJ0LWNvbW1h bmQgKiA0Cn0JCQk7OyBjLWVsZWN0cmljLWJyYWNlCiwJCQk7OyBjLWVsZWN0cmljLXNlbWkmY29t bWEKUkVUCQkJOzsgbmV3bGluZQpUQUIJCQk7OyBjLWluZGVudC1saW5lLW9yLXJlZ2lvbgp7CQkJ OzsgYy1lbGVjdHJpYy1icmFjZQoiZGVmYXVsdC10eXBlIgkJOzsgc2VsZi1pbnNlcnQtY29tbWFu ZCAqIDE0CiwJCQk7OyBjLWVsZWN0cmljLXNlbWkmY29tbWEKU1BDCQkJOzsgc2VsZi1pbnNlcnQt Y29tbWFuZApSV1NUX0RFCQkJOzsgc2VsZi1pbnNlcnQtY29tbWFuZCAqIDcKMipNLS8JCQk7OyBk YWJicmV2LWV4cGFuZApNLURFTAkJCTs7IGJhY2t3YXJkLWtpbGwtd29yZApERUwJCQk7OyBjLWVs ZWN0cmljLWJhY2tzcGFjZQosCQkJOzsgYy1lbGVjdHJpYy1zZW1pJmNvbW1hClNQQwkJCTs7IHNl bGYtaW5zZXJ0LWNvbW1hbmQKImRlZmF1bHQJCTs7IHNlbGYtaW5zZXJ0LWNvbW1hbmQgKiA4ClNQ QwkJCTs7IHNlbGYtaW5zZXJ0LWNvbW1hbmQKdHlwZQkJCTs7IHNlbGYtaW5zZXJ0LWNvbW1hbmQg KiA0ClNQQwkJCTs7IHNlbGYtaW5zZXJ0LWNvbW1hbmQKbmFtZSIJCQk7OyBzZWxmLWluc2VydC1j b21tYW5kICogNQosCQkJOzsgYy1lbGVjdHJpYy1zZW1pJmNvbW1hClNQQwkJCTs7IHNlbGYtaW5z ZXJ0LWNvbW1hbmQKTlVMTAkJCTs7IHNlbGYtaW5zZXJ0LWNvbW1hbmQgKiA0Cn0JCQk7OyBjLWVs ZWN0cmljLWJyYWNlCiwJCQk7OyBjLWVsZWN0cmljLXNlbWkmY29tbWEKUkVUCQkJOzsgbmV3bGlu ZQpUQUIJCQk7OyBjLWluZGVudC1saW5lLW9yLXJlZ2lvbgp7CQkJOzsgYy1lbGVjdHJpYy1icmFj ZQoibWFyay1kZWZhdWx0cyIJCTs7IHNlbGYtaW5zZXJ0LWNvbW1hbmQgKiAxNQosCQkJOzsgYy1l bGVjdHJpYy1zZW1pJmNvbW1hClNQQwkJCTs7IHNlbGYtaW5zZXJ0LWNvbW1hbmQKUldTXwkJCTs7 IHNlbGYtaW5zZXJ0LWNvbW1hbmQgKiA0CkRFTAkJCTs7IGMtZWxlY3RyaWMtYmFja3NwYWNlClRf TUEJCQk7OyBzZWxmLWluc2VydC1jb21tYW5kICogNApNLS8JCQk7OyBkYWJicmV2LWV4cGFuZAos CQkJOzsgYy1lbGVjdHJpYy1zZW1pJmNvbW1hClNQQwkJCTs7IHNlbGYtaW5zZXJ0LWNvbW1hbmQK REVMCQkJOzsgYy1lbGVjdHJpYy1iYWNrc3BhY2UKUkVUCQkJOzsgbmV3bGluZQpUQUIJCQk7OyBj LWluZGVudC1saW5lLW9yLXJlZ2lvbgoiJysnCQkJOzsgc2VsZi1pbnNlcnQtY29tbWFuZCAqIDQK U1BDCQkJOzsgc2VsZi1pbnNlcnQtY29tbWFuZApmb3IJCQk7OyBzZWxmLWluc2VydC1jb21tYW5k ICogMwpTUEMJCQk7OyBzZWxmLWluc2VydC1jb21tYW5kCmRlZmF1bHQJCQk7OyBzZWxmLWluc2Vy dC1jb21tYW5kICogNwpTUEMJCQk7OyBzZWxmLWluc2VydC1jb21tYW5kCmNsYXNzZXMJCQk7OyBz ZWxmLWluc2VydC1jb21tYW5kICogNwosCQkJOzsgYy1lbGVjdHJpYy1zZW1pJmNvbW1hClNQQwkJ CTs7IHNlbGYtaW5zZXJ0LWNvbW1hbmQKJwkJCTs7IHNlbGYtaW5zZXJ0LWNvbW1hbmQKKgkJCTs7 IGMtZWxlY3RyaWMtc3RhcgonCQkJOzsgc2VsZi1pbnNlcnQtY29tbWFuZApTUEMJCQk7OyBzZWxm LWluc2VydC1jb21tYW5kCmZvcgkJCTs7IHNlbGYtaW5zZXJ0LWNvbW1hbmQgKiAzClNQQwkJCTs7 IHNlbGYtaW5zZXJ0LWNvbW1hbmQKdHlwZXMiCQkJOzsgc2VsZi1pbnNlcnQtY29tbWFuZCAqIDYK LAkJCTs7IGMtZWxlY3RyaWMtc2VtaSZjb21tYQpTUEMJCQk7OyBzZWxmLWluc2VydC1jb21tYW5k Ck4gVSBMCQkJOzsgc2VsZi1pbnNlcnQtY29tbWFuZCAqIDMKOgkJCTs7IGMtZWxlY3RyaWMtY29s b24KREVMCQkJOzsgYy1lbGVjdHJpYy1iYWNrc3BhY2UKTAkJCTs7IHNlbGYtaW5zZXJ0LWNvbW1h bmQKfQkJCTs7IGMtZWxlY3RyaWMtYnJhY2UKLAkJCTs7IGMtZWxlY3RyaWMtc2VtaSZjb21tYQpS RVQJCQk7OyBuZXdsaW5lClRBQgkJCTs7IGMtaW5kZW50LWxpbmUtb3ItcmVnaW9uCnsJCQk7OyBj LWVsZWN0cmljLWJyYWNlCiJjbGFzcwkJCTs7IHNlbGYtaW5zZXJ0LWNvbW1hbmQgKiA2CjoJCQk7 OyBjLWVsZWN0cmljLWNvbG9uCmxpc3QiCQkJOzsgc2VsZi1pbnNlcnQtY29tbWFuZCAqIDUKLAkJ CTs7IGMtZWxlY3RyaWMtc2VtaSZjb21tYQpTUEMJCQk7OyBzZWxmLWluc2VydC1jb21tYW5kClJT VAkJCTs7IHNlbGYtaW5zZXJ0LWNvbW1hbmQgKiAzCkRFTAkJCTs7IGMtZWxlY3RyaWMtYmFja3Nw YWNlCjxTLWJhY2tzcGFjZT4KV1NUX0NMQQkJCTs7IHNlbGYtaW5zZXJ0LWNvbW1hbmQgKiA3CjIq TS0vCQkJOzsgZGFiYnJldi1leHBhbmQKLAkJCTs7IGMtZWxlY3RyaWMtc2VtaSZjb21tYQpTUEMJ CQk7OyBzZWxmLWluc2VydC1jb21tYW5kCiJsaXN0CQkJOzsgc2VsZi1pbnNlcnQtY29tbWFuZCAq IDUKU1BDCQkJOzsgc2VsZi1pbnNlcnQtY29tbWFuZApvZgkJCTs7IHNlbGYtaW5zZXJ0LWNvbW1h bmQgKiAyClNQQwkJCTs7IHNlbGYtaW5zZXJ0LWNvbW1hbmQKY2xhc3MJCQk7OyBzZWxmLWluc2Vy dC1jb21tYW5kICogNQpTUEMJCQk7OyBzZWxmLWluc2VydC1jb21tYW5kCm5hbWVzIgkJCTs7IHNl bGYtaW5zZXJ0LWNvbW1hbmQgKiA2CiwJCQk7OyBjLWVsZWN0cmljLXNlbWkmY29tbWEKU1BDCQkJ Ozsgc2VsZi1pbnNlcnQtY29tbWFuZApOVUxMCQkJOzsgc2VsZi1pbnNlcnQtY29tbWFuZCAqIDQK fQkJCTs7IGMtZWxlY3RyaWMtYnJhY2UKLAkJCTs7IGMtZWxlY3RyaWMtc2VtaSZjb21tYQpSRVQJ CQk7OyBuZXdsaW5lClRBQgkJCTs7IGMtaW5kZW50LWxpbmUtb3ItcmVnaW9uCnsJCQk7OyBjLWVs ZWN0cmljLWJyYWNlCiJ0eXBlCQkJOzsgc2VsZi1pbnNlcnQtY29tbWFuZCAqIDUKOgkJCTs7IGMt ZWxlY3RyaWMtY29sb24KbGlzdCIJCQk7OyBzZWxmLWluc2VydC1jb21tYW5kICogNQosCQkJOzsg Yy1lbGVjdHJpYy1zZW1pJmNvbW1hClNQQwkJCTs7IHNlbGYtaW5zZXJ0LWNvbW1hbmQKUldTVF9U WQkJCTs7IHNlbGYtaW5zZXJ0LWNvbW1hbmQgKiA3Ck0tLwkJCTs7IGRhYmJyZXYtZXhwYW5kCl9M CQkJOzsgc2VsZi1pbnNlcnQtY29tbWFuZCAqIDIKTS0vCQkJOzsgZGFiYnJldi1leHBhbmQKLAkJ CTs7IGMtZWxlY3RyaWMtc2VtaSZjb21tYQpTUEMJCQk7OyBzZWxmLWluc2VydC1jb21tYW5kCiJs aXN0CQkJOzsgc2VsZi1pbnNlcnQtY29tbWFuZCAqIDUKU1BDCQkJOzsgc2VsZi1pbnNlcnQtY29t bWFuZApvZgkJCTs7IHNlbGYtaW5zZXJ0LWNvbW1hbmQgKiAyClNQQwkJCTs7IHNlbGYtaW5zZXJ0 LWNvbW1hbmQKdHlwZQkJCTs7IHNlbGYtaW5zZXJ0LWNvbW1hbmQgKiA0ClNQQwkJCTs7IHNlbGYt aW5zZXJ0LWNvbW1hbmQKbmFtZXMiCQkJOzsgc2VsZi1pbnNlcnQtY29tbWFuZCAqIDYKLAkJCTs7 IGMtZWxlY3RyaWMtc2VtaSZjb21tYQpTUEMJCQk7OyBzZWxmLWluc2VydC1jb21tYW5kCk5VTEwJ CQk7OyBzZWxmLWluc2VydC1jb21tYW5kICogNAp9CQkJOzsgYy1lbGVjdHJpYy1icmFjZQosCQkJ OzsgYy1lbGVjdHJpYy1zZW1pJmNvbW1hClJFVAkJCTs7IG5ld2xpbmUKVEFCCQkJOzsgYy1pbmRl bnQtbGluZS1vci1yZWdpb24KewkJCTs7IGMtZWxlY3RyaWMtYnJhY2UKImZsb3d0eXBlCQk7OyBz ZWxmLWluc2VydC1jb21tYW5kICogOQo6CQkJOzsgYy1lbGVjdHJpYy1jb2xvbgpsaXN0IgkJCTs7 IHNlbGYtaW5zZXJ0LWNvbW1hbmQgKiA1CiwJCQk7OyBjLWVsZWN0cmljLXNlbWkmY29tbWEKU1BD CQkJOzsgc2VsZi1pbnNlcnQtY29tbWFuZApSRVNUX0ZMCQkJOzsgc2VsZi1pbnNlcnQtY29tbWFu ZCAqIDcKREVMCQkJOzsgYy1lbGVjdHJpYy1iYWNrc3BhY2UKMipNLURFTAkJCTs7IGJhY2t3YXJk LWtpbGwtd29yZApSV1NUX0ZMCQkJOzsgc2VsZi1pbnNlcnQtY29tbWFuZCAqIDcKTS0vCQkJOzsg ZGFiYnJldi1leHBhbmQKTS1ERUwJCQk7OyBiYWNrd2FyZC1raWxsLXdvcmQKTS1sCQkJOzsgZG93 bmNhc2Utd29yZAo0KkMtcAkJCTs7IHByZXZpb3VzLWxpbmUKQy1lCQkJOzsgbW92ZS1lbmQtb2Yt bGluZQpMCQkJOzsgc2VsZi1pbnNlcnQtY29tbWFuZApNLS8JCQk7OyBkYWJicmV2LWV4cGFuZAos CQkJOzsgYy1lbGVjdHJpYy1zZW1pJmNvbW1hClNQQwkJCTs7IHNlbGYtaW5zZXJ0LWNvbW1hbmQK Imxpc3QJCQk7OyBzZWxmLWluc2VydC1jb21tYW5kICogNQpTUEMJCQk7OyBzZWxmLWluc2VydC1j b21tYW5kCm9mCQkJOzsgc2VsZi1pbnNlcnQtY29tbWFuZCAqIDIKU1BDCQkJOzsgc2VsZi1pbnNl cnQtY29tbWFuZApmbG93dHlwZQkJOzsgc2VsZi1pbnNlcnQtY29tbWFuZCAqIDgKU1BDCQkJOzsg c2VsZi1pbnNlcnQtY29tbWFuZApuYW1lcyIJCQk7OyBzZWxmLWluc2VydC1jb21tYW5kICogNgos CQkJOzsgYy1lbGVjdHJpYy1zZW1pJmNvbW1hClNQQwkJCTs7IHNlbGYtaW5zZXJ0LWNvbW1hbmQK TlVMTAkJCTs7IHNlbGYtaW5zZXJ0LWNvbW1hbmQgKiA0Cn0JCQk7OyBjLWVsZWN0cmljLWJyYWNl CiwJCQk7OyBjLWVsZWN0cmljLXNlbWkmY29tbWEKUkVUCQkJOzsgbmV3bGluZQoyKlRBQgkJCTs7 IGMtaW5kZW50LWxpbmUtb3ItcmVnaW9uCg== --=-=-= Content-Type: text/plain Type: C-c C-c You should be back at rwsiteinfo-backup.c. Execute the macro using: C-x e Then type: TAB At this point, you should see the indentation move to just under the `o' in "flowtype:list". This location is incorrect. If you then do the following: M-x set-variable RET c-echo-syntactic-information-p RET t RET TAB you will see that c-mode believes the syntax at that point to be topmost-intro-cont instead of the proper brace-list-entry. When you have solved this bug, please let me know if the solution has a reasonable chance of having solved the other problem that I have not been able to recreate reliably, which is getting "topmost-intro indent 0" instead of "statement indent 4" when in the middle of editing a function. If these have little chance of being connected, I'll do my best to try to create that scenario again (no promises). -- Michael Welsh Duggan (md5i@md5i.com) --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Wed Oct 19 06:22:06 2011 Received: (at 9560) by debbugs.gnu.org; 19 Oct 2011 10:22:06 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1RGTHh-0003wp-To for submit@debbugs.gnu.org; Wed, 19 Oct 2011 06:22:06 -0400 Received: from colin.muc.de ([193.149.48.1] helo=mail.muc.de) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1RGTHe-0003wI-Tf for 9560@debbugs.gnu.org; Wed, 19 Oct 2011 06:22:04 -0400 Received: (qmail 30346 invoked by uid 3782); 19 Oct 2011 10:20:59 -0000 Received: from acm.muc.de (pD951B17A.dip.t-dialin.net [217.81.177.122]) by colin.muc.de (tmda-ofmipd) with ESMTP; Wed, 19 Oct 2011 12:20:57 +0200 Received: (qmail 2470 invoked by uid 1000); 19 Oct 2011 10:16:18 -0000 Date: Wed, 19 Oct 2011 10:16:18 +0000 To: Michael Welsh Duggan Subject: Re: bug#9560: An exact recipe Message-ID: <20111019101617.GA2445@acm.acm> References: <87zkh54o3x.fsf@maru.md5i.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <87zkh54o3x.fsf@maru.md5i.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Delivery-Agent: TMDA/1.1.12 (Macallan) From: Alan Mackenzie X-Primary-Address: acm@muc.de X-Spam-Score: -3.3 (---) X-Debbugs-Envelope-To: 9560 Cc: 9560@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -3.2 (---) Hi, Michael. On Wed, Oct 12, 2011 at 10:33:22PM -0400, Michael Welsh Duggan wrote: > >>>From emacs -Q: > Do NOT resize the frame. The recipe includes C-v, which depends on the > window (and hence frame) size. > Load the following file: [ .... ] > Type: > M-x edit-kbd-macro RET y C-x e C-x h C-w C-x i > When prompted, insert the following keyboard macro file: [ .... ] > Type: > C-c C-c > You should be back at rwsiteinfo-backup.c. Execute the macro using: > C-x e > Then type: > TAB OK, I've got about this far. I've been busy getting 5.32.2 into XEmacs. The first thing I'm going to do with this macro is replace the C-v's with an equivalent number of C-n's, because my frames on a tty are a fixed 65 lines (not including mode line and minibuffer) high. :-) Emacs's facilities for keyboard macros are not comfortable. > At this point, you should see the indentation move to just under the `o' > in "flowtype:list". This location is incorrect. If you then do the > following: > M-x set-variable RET c-echo-syntactic-information-p RET t RET TAB > you will see that c-mode believes the syntax at that point to be > topmost-intro-cont instead of the proper brace-list-entry. > When you have solved this bug, please let me know if the solution has a > reasonable chance of having solved the other problem that I have not > been able to recreate reliably, which is getting "topmost-intro indent > 0" instead of "statement indent 4" when in the middle of editing a > function. If these have little chance of being connected, I'll do my > best to try to create that scenario again (no promises). > -- > Michael Welsh Duggan > (md5i@md5i.com) -- Alan Mackenzie (Nuremberg, Germany). From debbugs-submit-bounces@debbugs.gnu.org Wed Oct 19 09:46:59 2011 Received: (at 9560) by debbugs.gnu.org; 19 Oct 2011 13:47:00 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1RGWTz-0001ie-1a for submit@debbugs.gnu.org; Wed, 19 Oct 2011 09:46:59 -0400 Received: from md5i.com ([75.151.244.229] helo=maru.md5i.com) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1RGWTu-0001iQ-OX for 9560@debbugs.gnu.org; Wed, 19 Oct 2011 09:46:56 -0400 Received: from md5i by maru.md5i.com with local (Exim 4.76) (envelope-from ) id 1RGWSn-0005Dn-EK; Wed, 19 Oct 2011 09:45:45 -0400 From: Michael Welsh Duggan To: Alan Mackenzie Subject: Re: bug#9560: An exact recipe References: <87zkh54o3x.fsf@maru.md5i.com> <20111019101617.GA2445@acm.acm> Date: Wed, 19 Oct 2011 09:45:45 -0400 In-Reply-To: <20111019101617.GA2445@acm.acm> (Alan Mackenzie's message of "Wed, 19 Oct 2011 10:16:18 +0000") Message-ID: <87zkgx2iye.fsf@maru.md5i.com> User-Agent: Gnus/5.110018 (No Gnus v0.18) Emacs/24.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -3.1 (---) X-Debbugs-Envelope-To: 9560 Cc: 9560@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -3.1 (---) Alan Mackenzie writes: > Hi, Michael. > > On Wed, Oct 12, 2011 at 10:33:22PM -0400, Michael Welsh Duggan wrote: >> >>>From emacs -Q: > >> Do NOT resize the frame. The recipe includes C-v, which depends on the >> window (and hence frame) size. > >> Load the following file: > > [ .... ] > > >> Type: > >> M-x edit-kbd-macro RET y C-x e C-x h C-w C-x i > >> When prompted, insert the following keyboard macro file: > > [ .... ] > > >> Type: > >> C-c C-c > >> You should be back at rwsiteinfo-backup.c. Execute the macro using: > >> C-x e > >> Then type: > >> TAB > > OK, I've got about this far. I've been busy getting 5.32.2 into XEmacs. > The first thing I'm going to do with this macro is replace the C-v's with > an equivalent number of C-n's, because my frames on a tty are a fixed 65 > lines (not including mode line and minibuffer) high. :-) > > Emacs's facilities for keyboard macros are not comfortable. Okay, I've done some experimenting, and unfortunately, I have been unable to recreate this problem using this recipe using emacs -Q -nw. I've only encountered it using an X window. In this environment, I was able to recreate the problem consistently. I was able to replace the initial "3*C-v 7*C-n" in the macro with "100*C-n C-l" and this allowed it to work with larger frame sizes. Don't ask me why the C-l is necessary, as I do not know. >> At this point, you should see the indentation move to just under the `o' >> in "flowtype:list". This location is incorrect. If you then do the >> following: > >> M-x set-variable RET c-echo-syntactic-information-p RET t RET TAB > >> you will see that c-mode believes the syntax at that point to be >> topmost-intro-cont instead of the proper brace-list-entry. > >> When you have solved this bug, please let me know if the solution has a >> reasonable chance of having solved the other problem that I have not >> been able to recreate reliably, which is getting "topmost-intro indent >> 0" instead of "statement indent 4" when in the middle of editing a >> function. If these have little chance of being connected, I'll do my >> best to try to create that scenario again (no promises). > >> -- >> Michael Welsh Duggan >> (md5i@md5i.com) -- Michael Welsh Duggan (md5i@md5i.com) From debbugs-submit-bounces@debbugs.gnu.org Wed Oct 19 13:45:23 2011 Received: (at 9560) by debbugs.gnu.org; 19 Oct 2011 17:45:23 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1RGaCh-000833-C2 for submit@debbugs.gnu.org; Wed, 19 Oct 2011 13:45:23 -0400 Received: from colin.muc.de ([193.149.48.1] helo=mail.muc.de) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1RGaCf-00082v-E4 for 9560@debbugs.gnu.org; Wed, 19 Oct 2011 13:45:22 -0400 Received: (qmail 20316 invoked by uid 3782); 19 Oct 2011 17:44:15 -0000 Received: from acm.muc.de (pD951B17A.dip.t-dialin.net [217.81.177.122]) by colin.muc.de (tmda-ofmipd) with ESMTP; Wed, 19 Oct 2011 19:44:14 +0200 Received: (qmail 5493 invoked by uid 1000); 19 Oct 2011 17:39:35 -0000 Date: Wed, 19 Oct 2011 17:39:35 +0000 To: Michael Welsh Duggan Subject: Re: bug#9560: An exact recipe Message-ID: <20111019173935.GB2445@acm.acm> References: <87zkh54o3x.fsf@maru.md5i.com> <20111019101617.GA2445@acm.acm> <87zkgx2iye.fsf@maru.md5i.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <87zkgx2iye.fsf@maru.md5i.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Delivery-Agent: TMDA/1.1.12 (Macallan) From: Alan Mackenzie X-Primary-Address: acm@muc.de X-Spam-Score: -3.2 (---) X-Debbugs-Envelope-To: 9560 Cc: 9560@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -3.1 (---) Hi again, Michael. On Wed, Oct 19, 2011 at 09:45:45AM -0400, Michael Welsh Duggan wrote: > Alan Mackenzie writes: > Okay, I've done some experimenting, and unfortunately, I have been > unable to recreate this problem using this recipe using emacs -Q -nw. > I've only encountered it using an X window. I found that too, on a tty - it's rather worrying. ;-( > In this environment, I was able to recreate the problem consistently. > I was able to replace the initial "3*C-v 7*C-n" in the macro with > "100*C-n C-l" and this allowed it to work with larger frame sizes. > Don't ask me why the C-l is necessary, as I do not know. I can now reproduce the problem consistently. As you surmised, the problem is in `c-state-cache', the cache of braces, parens, and brackets which is essential to CC Mode's operation. I'll see if I can get some instrumentation on `c-parse-state' so as to track down the exact point the cache is going wrong. I do hope such instrumentation won't make the error go away. > -- > Michael Welsh Duggan > (md5i@md5i.com) -- Alan Mackenzie (Nuremberg, Germany). From debbugs-submit-bounces@debbugs.gnu.org Thu Oct 20 07:48:25 2011 Received: (at 9560) by debbugs.gnu.org; 20 Oct 2011 11:48:25 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1RGr6n-0000Ow-4D for submit@debbugs.gnu.org; Thu, 20 Oct 2011 07:48:25 -0400 Received: from colin.muc.de ([193.149.48.1] helo=mail.muc.de) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1RGr6j-0000On-Ty for 9560@debbugs.gnu.org; Thu, 20 Oct 2011 07:48:23 -0400 Received: (qmail 96835 invoked by uid 3782); 20 Oct 2011 11:47:12 -0000 Received: from acm.muc.de (pD951B906.dip.t-dialin.net [217.81.185.6]) by colin.muc.de (tmda-ofmipd) with ESMTP; Thu, 20 Oct 2011 13:47:10 +0200 Received: (qmail 3657 invoked by uid 1000); 20 Oct 2011 11:42:29 -0000 Date: Thu, 20 Oct 2011 11:42:29 +0000 To: Michael Welsh Duggan Subject: Re: bug#9560: An exact recipe Message-ID: <20111020114229.GA3617@acm.acm> References: <87zkh54o3x.fsf@maru.md5i.com> <20111019101617.GA2445@acm.acm> <87zkgx2iye.fsf@maru.md5i.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <87zkgx2iye.fsf@maru.md5i.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Delivery-Agent: TMDA/1.1.12 (Macallan) From: Alan Mackenzie X-Primary-Address: acm@muc.de X-Spam-Score: -3.1 (---) X-Debbugs-Envelope-To: 9560 Cc: 9560@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -3.0 (---) Hi, Michael. On Wed, Oct 19, 2011 at 09:45:45AM -0400, Michael Welsh Duggan wrote: > Alan Mackenzie writes: > Okay, I've done some experimenting, and unfortunately, I have been > unable to recreate this problem using this recipe using emacs -Q -nw. > I've only encountered it using an X window. That still perplexes me. I've got a fix, but the problem should have appeared on a tty and a -nw too. > In this environment, I was able to recreate the problem consistently. > I was able to replace the initial "3*C-v 7*C-n" in the macro with > "100*C-n C-l" and this allowed it to work with larger frame sizes. > Don't ask me why the C-l is necessary, as I do not know. > >> When you have solved this bug, please let me know if the solution has a > >> reasonable chance of having solved the other problem that I have not > >> been able to recreate reliably, which is getting "topmost-intro indent > >> 0" instead of "statement indent 4" when in the middle of editing a > >> function. If these have little chance of being connected, I'll do my > >> best to try to create that scenario again (no promises). I think there's a good chance of that bug being fixed by the following patch (no promises ;-). The bug was a bit of carelessness on my part. I'd done (unless (and T1 T2 T3) ...) , and in the body tested (and T1 (not T3)) , which is rubbish, since that says nothing about the state of T2. T2 being the wrong way round was what caused the bug to show up. Anyhow, here's the patch. Only the first chunk is for the bug; the rest of it is the superior instrumentation. Let me know how this goes! *** orig/cc-engine.el 2011-10-19 19:16:01.000000000 +0000 --- cc-engine.el 2011-10-20 11:22:15.000000000 +0000 *************** *** 2485,2491 **** (<= from (cdr c-state-brace-pair-desert))) ;; Only search what we absolutely need to: (if (and c-state-brace-pair-desert ! (> from (cdr c-state-brace-pair-desert))) (narrow-to-region (cdr c-state-brace-pair-desert) (point-max))) ;; In the next pair of nested loops, the inner one moves back past a --- 2485,2491 ---- (<= from (cdr c-state-brace-pair-desert))) ;; Only search what we absolutely need to: (if (and c-state-brace-pair-desert ! (eq cache-pos (car c-state-brace-pair-desert))) (narrow-to-region (cdr c-state-brace-pair-desert) (point-max))) ;; In the next pair of nested loops, the inner one moves back past a *************** *** 3169,3174 **** --- 3169,3204 ---- (unless (fboundp 'c-real-parse-state) (fset 'c-real-parse-state (symbol-function 'c-parse-state))) (cc-bytecomp-defun c-real-parse-state) + + (defvar c-parse-state-state nil) + (defun c-record-parse-state-state () + (setq c-parse-state-state + (mapcar + (lambda (arg) + (cons arg (symbol-value arg))) + '(c-state-cache + c-state-cache-good-pos + c-state-nonlit-pos-cache + c-state-nonlit-pos-cache-limit + c-state-brace-pair-desert + c-state-point-min + c-state-point-min-lit-type + c-state-point-min-lit-start + c-state-min-scan-pos + c-state-old-cpp-beg + c-state-old-cpp-end)))) + (defun c-replay-parse-state-state () + (let ((outstring "(setq ")) + (mapc + (lambda (arg) + (setq outstring + (concat outstring + (format " %s %s%s" + (car arg) (if (atom (cdr arg)) "" "'") (cdr arg))))) + c-parse-state-state) + (setq outstring (concat outstring ")")) + (message outstring))) + (defun c-debug-parse-state () (let ((here (point)) (res1 (c-real-parse-state)) res2) (let ((c-state-cache nil) *************** *** 3187,3201 **** ;; The cache can actually go further back due to the ad-hoc way ;; the first paren is found, so try to whack off a bit of its ;; start before complaining. ! (save-excursion ! (goto-char (or (c-least-enclosing-brace res2) (point))) ! (c-beginning-of-defun-1) ! (while (not (or (bobp) (eq (char-after) ?{))) ! (c-beginning-of-defun-1)) ! (unless (equal (c-whack-state-before (point) res1) res2) ! (message (concat "c-parse-state inconsistency at %s: " ! "using cache: %s, from scratch: %s") ! here res1 res2)))) res1)) (defun c-toggle-parse-state-debug (&optional arg) --- 3217,3237 ---- ;; The cache can actually go further back due to the ad-hoc way ;; the first paren is found, so try to whack off a bit of its ;; start before complaining. ! ;; (save-excursion ! ;; (goto-char (or (c-least-enclosing-brace res2) (point))) ! ;; (c-beginning-of-defun-1) ! ;; (while (not (or (bobp) (eq (char-after) ?{))) ! ;; (c-beginning-of-defun-1)) ! ;; (unless (equal (c-whack-state-before (point) res1) res2) ! ;; (message (concat "c-parse-state inconsistency at %s: " ! ;; "using cache: %s, from scratch: %s") ! ;; here res1 res2))) ! (message (concat "c-parse-state inconsistency at %s: " ! "using cache: %s, from scratch: %s") ! here res1 res2) ! (message "Old state:") ! (c-replay-parse-state-state)) ! (c-record-parse-state-state) res1)) (defun c-toggle-parse-state-debug (&optional arg) > -- > Michael Welsh Duggan > (md5i@md5i.com) -- Alan Mackenzie (Nuremberg, Germany). From debbugs-submit-bounces@debbugs.gnu.org Thu Oct 20 21:43:51 2011 Received: (at 9560) by debbugs.gnu.org; 21 Oct 2011 01:43:51 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1RH49G-0004g9-N3 for submit@debbugs.gnu.org; Thu, 20 Oct 2011 21:43:51 -0400 Received: from md5i.com ([75.151.244.229] helo=maru.md5i.com) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1RH49E-0004fw-BO for 9560@debbugs.gnu.org; Thu, 20 Oct 2011 21:43:49 -0400 Received: from md5i by maru.md5i.com with local (Exim 4.76) (envelope-from ) id 1RH47y-00050y-Lm; Thu, 20 Oct 2011 21:42:30 -0400 From: Michael Welsh Duggan To: Alan Mackenzie Subject: Re: bug#9560: An exact recipe References: <87zkh54o3x.fsf@maru.md5i.com> <20111019101617.GA2445@acm.acm> <87zkgx2iye.fsf@maru.md5i.com> <20111020114229.GA3617@acm.acm> Date: Thu, 20 Oct 2011 21:42:30 -0400 In-Reply-To: <20111020114229.GA3617@acm.acm> (Alan Mackenzie's message of "Thu, 20 Oct 2011 11:42:29 +0000") Message-ID: <87hb332k8p.fsf@maru.md5i.com> User-Agent: Gnus/5.110018 (No Gnus v0.18) Emacs/24.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -3.1 (---) X-Debbugs-Envelope-To: 9560 Cc: 9560@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -3.1 (---) Alan Mackenzie writes: > Hi, Michael. > > On Wed, Oct 19, 2011 at 09:45:45AM -0400, Michael Welsh Duggan wrote: >> Alan Mackenzie writes: > >> Okay, I've done some experimenting, and unfortunately, I have been >> unable to recreate this problem using this recipe using emacs -Q -nw. >> I've only encountered it using an X window. > > That still perplexes me. I've got a fix, but the problem should have > appeared on a tty and a -nw too. Indeed. Could font-locking interfere at any point? >> In this environment, I was able to recreate the problem consistently. >> I was able to replace the initial "3*C-v 7*C-n" in the macro with >> "100*C-n C-l" and this allowed it to work with larger frame sizes. >> Don't ask me why the C-l is necessary, as I do not know. > >> >> When you have solved this bug, please let me know if the solution has a >> >> reasonable chance of having solved the other problem that I have not >> >> been able to recreate reliably, which is getting "topmost-intro indent >> >> 0" instead of "statement indent 4" when in the middle of editing a >> >> function. If these have little chance of being connected, I'll do my >> >> best to try to create that scenario again (no promises). > > I think there's a good chance of that bug being fixed by the following > patch (no promises ;-). We can always hope! > The bug was a bit of carelessness on my part. I'd done > (unless (and T1 T2 T3) ...) > , and in the body tested > (and T1 (not T3)) > , which is rubbish, since that says nothing about the state of T2. T2 > being the wrong way round was what caused the bug to show up. > > Anyhow, here's the patch. Only the first chunk is for the bug; the rest > of it is the superior instrumentation. Let me know how this goes! Well, it certainly fixes things in my initial tests. After checking in, I would consider this bug closed. I'll open up a new one if I notice something weird in the future. -- Michael Welsh Duggan (md5i@md5i.com) From debbugs-submit-bounces@debbugs.gnu.org Sat Oct 22 07:32:57 2011 Received: (at 9560-done) by debbugs.gnu.org; 22 Oct 2011 11:32:57 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1RHZou-0003uq-6c for submit@debbugs.gnu.org; Sat, 22 Oct 2011 07:32:56 -0400 Received: from colin.muc.de ([193.149.48.1] helo=mail.muc.de) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1RHZor-0003ui-UN for 9560-done@debbugs.gnu.org; Sat, 22 Oct 2011 07:32:55 -0400 Received: (qmail 95382 invoked by uid 3782); 22 Oct 2011 11:31:32 -0000 Received: from acm.muc.de (pD951A85B.dip.t-dialin.net [217.81.168.91]) by colin.muc.de (tmda-ofmipd) with ESMTP; Sat, 22 Oct 2011 13:31:31 +0200 Received: (qmail 2404 invoked by uid 1000); 22 Oct 2011 11:26:47 -0000 Date: Sat, 22 Oct 2011 11:26:47 +0000 To: 9560-done@debbugs.gnu.org Subject: Bug #9560 fixed Message-ID: <20111022112647.GA2389@acm.acm> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) X-Delivery-Agent: TMDA/1.1.12 (Macallan) From: Alan Mackenzie X-Primary-Address: acm@muc.de X-Spam-Score: -3.0 (---) X-Debbugs-Envelope-To: 9560-done X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -3.0 (---) Bug fixed. -- Alan Mackenzie (Nuremberg, Germany). From unknown Sat Sep 06 00:11:20 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Sat, 19 Nov 2011 12:24:03 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator