X-Loop: help-debbugs@HIDDEN Subject: bug#23335: [PATCH 1/2] tests: Added two new tests for unexpand from TODO Resent-From: Jonathan Buchanan <jonathan.russ.buchanan@HIDDEN> Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> Resent-CC: bug-coreutils@HIDDEN Resent-Date: Fri, 22 Apr 2016 01:15:01 +0000 Resent-Message-ID: <handler.23335.B.146128767320618 <at> debbugs.gnu.org> Resent-Sender: help-debbugs@HIDDEN X-GNU-PR-Message: report 23335 X-GNU-PR-Package: coreutils X-GNU-PR-Keywords: patch To: 23335 <at> debbugs.gnu.org Cc: Jonathan Buchanan <jonathan.russ.buchanan@HIDDEN> X-Debbugs-Original-To: bug-coreutils@HIDDEN Received: via spool by submit <at> debbugs.gnu.org id=B.146128767320618 (code B ref -1); Fri, 22 Apr 2016 01:15:01 +0000 Received: (at submit) by debbugs.gnu.org; 22 Apr 2016 01:14:33 +0000 Received: from localhost ([127.0.0.1]:42732 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1atPg1-0005MU-18 for submit <at> debbugs.gnu.org; Thu, 21 Apr 2016 21:14:33 -0400 Received: from eggs.gnu.org ([208.118.235.92]:36512) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <jonathan.russ.buchanan@HIDDEN>) id 1atP2e-0004OF-4e for submit <at> debbugs.gnu.org; Thu, 21 Apr 2016 20:33:52 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from <jonathan.russ.buchanan@HIDDEN>) id 1atP2Y-00068l-6n for submit <at> debbugs.gnu.org; Thu, 21 Apr 2016 20:33:46 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=BAYES_50,FREEMAIL_FROM, T_DKIM_INVALID autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([2001:4830:134:3::11]:36711) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from <jonathan.russ.buchanan@HIDDEN>) id 1atP2Y-00068h-49 for submit <at> debbugs.gnu.org; Thu, 21 Apr 2016 20:33:46 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55709) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from <jonathan.russ.buchanan@HIDDEN>) id 1atP2X-0006zx-Dd for bug-coreutils@HIDDEN; Thu, 21 Apr 2016 20:33:46 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from <jonathan.russ.buchanan@HIDDEN>) id 1atP2S-00067s-E1 for bug-coreutils@HIDDEN; Thu, 21 Apr 2016 20:33:45 -0400 Received: from mail-qg0-x244.google.com ([2607:f8b0:400d:c04::244]:32831) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from <jonathan.russ.buchanan@HIDDEN>) id 1atP2S-00067o-A3 for bug-coreutils@HIDDEN; Thu, 21 Apr 2016 20:33:40 -0400 Received: by mail-qg0-x244.google.com with SMTP id 7so8583969qgj.0 for <bug-coreutils@HIDDEN>; Thu, 21 Apr 2016 17:33:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=oo0Mp0DjVC/NvivZbndVCX4iISUY3PX7O0TQX0ABmNo=; b=KzL5Wd+M0jfUJ25UQCOj/zXEh7NDe1qx9QBCPRPphJdRpiczo/NM5Kvz8P2BX+twfM Gd7in82BQyY+xZ+qZahOwzyE4CO5DYUvlMBKrbuGkHKJz8m2hgnghP9zhAOpzftPxgQQ GLrwkx+Njg+LHaQPrU0IrA4lmpsyTVTPS5yisFbItLswjddUOmBfQW+4WD9QvHqvyuDX cASBFLeXRG4WT46Tj7adLoz43apjWZOhPwyM/Xu2iylxXi7DbI2FaOaVek+wTlP+hTJr 4nTRmWtjmUGOucRVJkC/C2qS05d07hYaCBNoF90tmHCiaV8YIVNSEeRH4JqiFr/Rexwy 1FpA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=oo0Mp0DjVC/NvivZbndVCX4iISUY3PX7O0TQX0ABmNo=; b=Ab8RulXGCCANDnyNes9hqZSDi7F0msnK9XE0KMrZcm0RcmlL7j+wKO02g6VcanvZsj xi6NoB8ZHfkk1tbSewJ4nJM+qd8ff4RD7yr/7nLR1s535ZzwNmovuZDHuOZj7Qk+iC4I x+aovpnpfdskCgz2/I++17ZAU6QMqDovCvgO8OcPk04VFgMCG9mYmetA4aFebHOWsOad Knt/InDuUtgpUFLpc9RUjFj081yvoc3OmDRIT39m0sevZhG9YJAIwHSHk4SyaqHvL948 CxwK+ZL7tDfUmSdMMHMWRK16++5wtbAYp8KDAM4Sk9mLQuto3t38gIl48fe/GYmxHnTd qEgA== X-Gm-Message-State: AOPr4FVZCf/PGxTGM1ElTtkCoP2xOFfC4RyFSHnE0anypb34Ply6aJ4m/jjUYN99vDiH1w== X-Received: by 10.140.19.52 with SMTP id 49mr19433805qgg.103.1461285219596; Thu, 21 Apr 2016 17:33:39 -0700 (PDT) Received: from JonathansMacBookPro.bexmta.net (cblmdm72-240-163-109.buckeyecom.net. [72.240.163.109]) by smtp.gmail.com with ESMTPSA id e14sm1533704qhc.17.2016.04.21.17.33.39 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 21 Apr 2016 17:33:39 -0700 (PDT) From: Jonathan Buchanan <jonathan.russ.buchanan@HIDDEN> Date: Thu, 21 Apr 2016 20:33:35 -0400 Message-Id: <1461285216-14656-1-git-send-email-jonathan.russ.buchanan@HIDDEN> X-Mailer: git-send-email 2.8.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 2001:4830:134:3::11 X-Spam-Score: -4.0 (----) X-Mailman-Approved-At: Thu, 21 Apr 2016 21:14:31 -0400 X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -4.0 (----) * tests/misc/unexpand.pl: Added two tests from TODO that should pass according to the specification but currently do not pass. --- tests/misc/unexpand.pl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/misc/unexpand.pl b/tests/misc/unexpand.pl index c592c5a..2cd84a1 100755 --- a/tests/misc/unexpand.pl +++ b/tests/misc/unexpand.pl @@ -48,6 +48,8 @@ my @Tests = ['aa-8', '-a', {IN=> 'w'.' 'x 8 ."y\n"}, {OUT=> "w\t y\n"}], ['b-1', '-t', '2,4', {IN=> " ."}, {OUT=>"\t\t ."}], + ['b-2', '-t', '8,9', {IN=> "x\t \t y\n"}, {OUT=>"x\t \t y\n"}], + ['b-3', '-t', '5,8', {IN=> "x\t \t y\n"}, {OUT=>"x\ty\n"}], # These would infloop prior to textutils-2.0d. ['infloop-1', '-t', '1,2', {IN=> " \t\t .\n"}, {OUT=>"\t\t\t .\n"}], -- 2.8.0
Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.505 (Entity 5.505) Content-Type: text/plain; charset=utf-8 X-Loop: help-debbugs@HIDDEN From: help-debbugs@HIDDEN (GNU bug Tracking System) To: Jonathan Buchanan <jonathan.russ.buchanan@HIDDEN> Subject: bug#23335: Acknowledgement ([PATCH 1/2] tests: Added two new tests for unexpand from TODO) Message-ID: <handler.23335.B.146128767320618.ack <at> debbugs.gnu.org> References: <1461285216-14656-1-git-send-email-jonathan.russ.buchanan@HIDDEN> X-Gnu-PR-Message: ack 23335 X-Gnu-PR-Package: coreutils X-Gnu-PR-Keywords: patch Reply-To: 23335 <at> debbugs.gnu.org Date: Fri, 22 Apr 2016 01:15:01 +0000 Thank you for filing a new bug report with debbugs.gnu.org. This is an automatically generated reply to let you know your message has been received. Your message is being forwarded to the package maintainers and other interested parties for their attention; they will reply in due course. Your message has been sent to the package maintainer(s): bug-coreutils@HIDDEN If you wish to submit further information on this problem, please send it to 23335 <at> debbugs.gnu.org. Please do not send mail to help-debbugs@HIDDEN unless you wish to report a problem with the Bug-tracking system. --=20 23335: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D23335 GNU Bug Tracking System Contact help-debbugs@HIDDEN with problems
X-Loop: help-debbugs@HIDDEN Subject: bug#23335: [PATCH 2/2] unexpand: Reimplemented the unexpand algorithm to satisfy the standard Resent-From: Jonathan Buchanan <jonathan.russ.buchanan@HIDDEN> Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> Resent-CC: bug-coreutils@HIDDEN Resent-Date: Fri, 22 Apr 2016 03:48:02 +0000 Resent-Message-ID: <handler.23335.B.14612968732379 <at> debbugs.gnu.org> Resent-Sender: help-debbugs@HIDDEN X-GNU-PR-Message: followup 23335 X-GNU-PR-Package: coreutils X-GNU-PR-Keywords: patch To: 23335 <at> debbugs.gnu.org Cc: Jonathan Buchanan <jonathan.russ.buchanan@HIDDEN> X-Debbugs-Original-To: bug-coreutils@HIDDEN Received: via spool by submit <at> debbugs.gnu.org id=B.14612968732379 (code B ref -1); Fri, 22 Apr 2016 03:48:02 +0000 Received: (at submit) by debbugs.gnu.org; 22 Apr 2016 03:47:53 +0000 Received: from localhost ([127.0.0.1]:42776 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1atS4O-0000cI-MV for submit <at> debbugs.gnu.org; Thu, 21 Apr 2016 23:47:53 -0400 Received: from eggs.gnu.org ([208.118.235.92]:36517) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <jonathan.russ.buchanan@HIDDEN>) id 1atP2f-0004OH-5U for submit <at> debbugs.gnu.org; Thu, 21 Apr 2016 20:33:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from <jonathan.russ.buchanan@HIDDEN>) id 1atP2Y-00068v-SP for submit <at> debbugs.gnu.org; Thu, 21 Apr 2016 20:33:48 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=BAYES_50,FREEMAIL_FROM, T_DKIM_INVALID autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([2001:4830:134:3::11]:47811) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from <jonathan.russ.buchanan@HIDDEN>) id 1atP2Y-00068r-OR for submit <at> debbugs.gnu.org; Thu, 21 Apr 2016 20:33:46 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55708) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from <jonathan.russ.buchanan@HIDDEN>) id 1atP2X-0006zw-Dg for bug-coreutils@HIDDEN; Thu, 21 Apr 2016 20:33:46 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from <jonathan.russ.buchanan@HIDDEN>) id 1atP2V-00068G-Sa for bug-coreutils@HIDDEN; Thu, 21 Apr 2016 20:33:45 -0400 Received: from mail-qk0-x243.google.com ([2607:f8b0:400d:c09::243]:33712) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from <jonathan.russ.buchanan@HIDDEN>) id 1atP2V-000684-O0 for bug-coreutils@HIDDEN; Thu, 21 Apr 2016 20:33:43 -0400 Received: by mail-qk0-x243.google.com with SMTP id q184so4918371qkf.0 for <bug-coreutils@HIDDEN>; Thu, 21 Apr 2016 17:33:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=R6DRUJiS32aFQIhNsh58NXfFyLWnoYyS63J384WlK98=; b=Nd0X8PGuoQDhE0Zu0wf9jd5C285rhjcz2P+C7+trBE1CxeBUW1Cu2bTXx+10Pvfcay cpl6RpjNZg31so6mLTbXNX3S7x9fOZkhAVCjky/xt/63gyzMBz5+dbhbm9uJc0+SiQyz +lOsMvPy13MXDlm3s6DfCIsGyigvvI/FBne8OKxHxmx3qDZmlFd9n9SwA9yNplMf0Ov3 FjgDuBNbAnTRmSoMjGJMCOyWoG1n8AVv2+PuL00tYueYN75AsAwuDJDV8E+rdcdOkcfI cvgcwR+FO8FkDB9xRJ5hA6LYC55j3yKU5WBKXfU/posfGpdkwsIeLVS2JndC2+h7bx4g Cl1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=R6DRUJiS32aFQIhNsh58NXfFyLWnoYyS63J384WlK98=; b=jl0h/zBEF8bPGmnh9WtgMxsTfkx+ex9/BSf8+imaDxslX49l7tOpLnfuee/Ca82sF7 dEDAziTKbXNIYgkDIwcnJp14rQ8tJMbpRTXBG2iln68iuUblwuiSeMeWDaMjMxcrIH4T /qDD9RdgZLTCsa7SOEmJbw8/g5pH6J0rxEETSxxz+e48TuhL1zWrnvPCLVaVczIhIdYm QEUh21ytDJj+OQDJ5Lk585xubIuQcFCh/cf1NIvcjjHG35nU9KNFHc56PtHIOKLVzc7U VP30LqHdFAYIsZOOttabpBsAK14HhNAiSA1tlEBNxjxNHAL0cgYIsEYo3ssmfkUSPW4R MXNw== X-Gm-Message-State: AOPr4FXiFLnIjB6PS5SZTwMIkWR+3uXfPfPGC7HnniLekvKqKYT9kMJAXUvvYCAnIiz3eA== X-Received: by 10.55.156.210 with SMTP id f201mr2932258qke.9.1461285223331; Thu, 21 Apr 2016 17:33:43 -0700 (PDT) Received: from JonathansMacBookPro.bexmta.net (cblmdm72-240-163-109.buckeyecom.net. [72.240.163.109]) by smtp.gmail.com with ESMTPSA id e14sm1533704qhc.17.2016.04.21.17.33.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 21 Apr 2016 17:33:42 -0700 (PDT) From: Jonathan Buchanan <jonathan.russ.buchanan@HIDDEN> Date: Thu, 21 Apr 2016 20:33:36 -0400 Message-Id: <1461285216-14656-2-git-send-email-jonathan.russ.buchanan@HIDDEN> X-Mailer: git-send-email 2.8.0 In-Reply-To: <1461285216-14656-1-git-send-email-jonathan.russ.buchanan@HIDDEN> References: <1461285216-14656-1-git-send-email-jonathan.russ.buchanan@HIDDEN> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 2001:4830:134:3::11 X-Spam-Score: -4.0 (----) X-Mailman-Approved-At: Thu, 21 Apr 2016 23:47:50 -0400 X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -4.0 (----) * TODO: Removed the section detailing how unexpand did not satisfy the standard. * src/unexpand.c: Reimplemented the unexpand algorithm. The program now satisfies the conditions specified in the old TODO. --- TODO | 4 -- src/unexpand.c | 176 ++++++++++++++++++++++----------------------------------- 2 files changed, 69 insertions(+), 111 deletions(-) diff --git a/TODO b/TODO index de95e5a..dc1a9e2 100644 --- a/TODO +++ b/TODO @@ -67,10 +67,6 @@ lib/strftime.c: Since %N is the only format that we need but that would expand /%(-_)?\d*N/ to the desired string and then pass the resulting string to glibc's strftime. -unexpand: [http://www.opengroup.org/onlinepubs/007908799/xcu/unexpand.html] - printf 'x\t \t y\n'|unexpand -t 8,9 should print its input, unmodified. - printf 'x\t \t y\n'|unexpand -t 5,8 should print "x\ty\n" - sort: Investigate better sorting algorithms; see Knuth vol. 3. We tried list merge sort, but it was about 50% slower than the diff --git a/src/unexpand.c b/src/unexpand.c index a758756..dcd40de 100644 --- a/src/unexpand.c +++ b/src/unexpand.c @@ -303,13 +303,6 @@ unexpand (void) /* Input character, or EOF. */ int c; - /* If true, perform translations. */ - bool convert = true; - - - /* The following variables have valid values only when CONVERT - is true: */ - /* Column of next input character. */ uintmax_t column = 0; @@ -319,127 +312,96 @@ unexpand (void) /* Index in TAB_LIST of next tab stop to examine. */ size_t tab_index = 0; - /* If true, the first pending blank came just before a tab stop. */ - bool one_blank_before_tab_stop = false; - - /* If true, the previous input character was a blank. This is - initially true, since initial strings of blanks are treated - as if the line was preceded by a blank. */ - bool prev_blank = true; - /* Number of pending columns of blanks. */ size_t pending = 0; - - /* Convert a line of text. */ + /* If true, the previous input charactar was not a blank. */ + bool previous_non_blank = false; do { while ((c = getc (fp)) < 0 && (fp = next_file (fp))) continue; - if (convert) + if (c < 0) + { + free (pending_blank); + return; + } + + /* Update the next tab column */ + if (next_tab_column <= column) { - bool blank = !! isblank (c); + if (tab_size) + next_tab_column = (column + (tab_size - column % tab_size)); + else + if (tab_index < first_free_tab) + next_tab_column = tab_list[tab_index++]; + else + next_tab_column = -1; + } - if (blank) + bool blank = !! isblank (c); + if (!blank) + { + /* If no -a, stop converting once a non-blank is reached. */ + if (!convert_entire_line) + next_tab_column = -1; + if (fwrite (pending_blank, sizeof (char), pending, stdout) + != pending) + error (EXIT_FAILURE, errno, _("write error")); + pending = 0; + if (putchar (c) < 0) + error (EXIT_FAILURE, errno, _("write error")); + previous_non_blank = true; + } + else + { + pending_blank[pending] = c; + pending++; + /* POSIX says spaces should not precede tabs, so remove spaces + if a tab is found after spaces. */ + if (pending_blank[0] != '\t' && c == '\t') { - if (next_tab_column <= column) + pending = 1; + pending_blank[0] = '\t'; + } + if (column + 1 == next_tab_column) + { + /* POSIX says single trailing spaces should not be converted + to tabs if they are followed by a non-blank. */ + if (c == ' ' && pending == 1 && previous_non_blank) { - if (tab_size) - next_tab_column = - column + (tab_size - column % tab_size); + previous_non_blank = false; + if ((c = getc (fp)) >= 0) + blank = !! isblank (c); else - while (true) - if (tab_index == first_free_tab) - { - convert = false; - break; - } - else - { - uintmax_t tab = tab_list[tab_index++]; - if (column < tab) - { - next_tab_column = tab; - break; - } - } - } - - if (convert) - { - if (next_tab_column < column) - error (EXIT_FAILURE, 0, _("input line is too long")); - - if (c == '\t') { - column = next_tab_column; - - if (pending) - pending_blank[0] = '\t'; + /* End of file, do not convert to tab. */ + if (putchar (' ') < 0) + error (EXIT_FAILURE, errno, _("write error")); + continue; } + if (!blank) + c = ' '; else - { - column++; - - if (! (prev_blank && column == next_tab_column)) - { - /* It is not yet known whether the pending blanks - will be replaced by tabs. */ - if (column == next_tab_column) - one_blank_before_tab_stop = true; - pending_blank[pending++] = c; - prev_blank = true; - continue; - } - - /* Replace the pending blanks by a tab or two. */ - pending_blank[0] = c = '\t'; - } - - /* Discard pending blanks, unless it was a single - blank just before the previous tab stop. */ - pending = one_blank_before_tab_stop; + c = '\t'; + if (putchar (c) < 0) + error (EXIT_FAILURE, errno, _("write error")); + column += 1; + pending = 0; + /* Move the position in the file back and continue. */ + fseek (fp, -1, SEEK_CUR); + continue; } - } - else if (c == '\b') - { - /* Go back one column, and force recalculation of the - next tab stop. */ - column -= !!column; - next_tab_column = column; - tab_index -= !!tab_index; - } - else - { - column++; - if (!column) - error (EXIT_FAILURE, 0, _("input line is too long")); - } - - if (pending) - { - if (pending > 1 && one_blank_before_tab_stop) - pending_blank[0] = '\t'; - if (fwrite (pending_blank, 1, pending, stdout) != pending) - error (EXIT_FAILURE, errno, _("write error")); + previous_non_blank = false; pending = 0; - one_blank_before_tab_stop = false; + putchar ('\t'); } - - prev_blank = blank; - convert &= convert_entire_line || blank; - } - - if (c < 0) - { - free (pending_blank); - return; } - - if (putchar (c) < 0) - error (EXIT_FAILURE, errno, _("write error")); + column++; + if (!column) + error (EXIT_FAILURE, 0, _("input line is too long")); } while (c != '\n'); } -- 2.8.0
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997 nCipher Corporation Ltd,
1994-97 Ian Jackson.