123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- #!/usr/bin/env perl
- #***************************************************************************
- # _ _ ____ _
- # Project ___| | | | _ \| |
- # / __| | | | |_) | |
- # | (__| |_| | _ <| |___
- # \___|\___/|_| \_\_____|
- #
- # Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
- #
- # This software is licensed as described in the file COPYING, which
- # you should have received as part of this distribution. The terms
- # are also available at https://curl.se/docs/copyright.html.
- #
- # You may opt to use, copy, modify, merge, publish, distribute and/or sell
- # copies of the Software, and permit persons to whom the Software is
- # furnished to do so, under the terms of the COPYING file.
- #
- # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- # KIND, either express or implied.
- #
- # SPDX-License-Identifier: curl
- #
- ###########################################################################
- #
- # This script grew out of help from Przemyslaw Iskra and Balint Szilakszi
- # a late evening in the #curl IRC channel.
- #
- use strict;
- use warnings;
- my $curl = shift @ARGV;
- my $opt = shift @ARGV;
- my $output = shift @ARGV;
- my $txt = shift @ARGV;
- my $longopt;
- my $shortopt;
- if($opt =~ /^--/) {
- $longopt = $opt;
- }
- else {
- $shortopt = $opt;
- }
- # first run the help command
- system("$curl -h $opt > $output");
- my @curlout;
- open(O, "<$output");
- push @curlout, <O>;
- close(O);
- # figure out the short+long option combo using -h all*/
- open(C, "$curl -h all|");
- if($shortopt) {
- while(<C>) {
- if(/^ +$opt, ([^ ]*)/) {
- $longopt = $1;
- last;
- }
- }
- }
- else {
- while(<C>) {
- my $f = $_;
- if(/ $opt /) {
- if($f =~ /^ *(-(.)), $longopt/) {
- $shortopt = $1;
- }
- last;
- }
- }
- }
- close(C);
- my $fullopt;
- if($shortopt) {
- $fullopt = "$shortopt, $longopt";
- }
- else {
- $fullopt = $longopt;
- }
- open(R, "<$txt");
- my $show = 0;
- my @txtout;
- while(<R>) {
- if(/^ $fullopt/) {
- $show = 1;
- }
- elsif(/^ -/ && $show) {
- last;
- }
- if($show) {
- push @txtout, $_;
- }
- }
- close(R);
- my $error;
- if(scalar(@curlout) != scalar(@txtout)) {
- printf "curl -h $opt is %d lines, $txt says %d lines\n",
- scalar(@curlout), scalar(@txtout);
- $error++;
- }
- else {
- # same size, compare line by line
- for my $i (0 .. $#curlout) {
- # trim CRLF from the data
- $curlout[$i] =~ s/[\r\n]//g;
- $txtout[$i] =~ s/[\r\n]//g;
- if($curlout[$i] ne $txtout[$i]) {
- printf "Line %d\n", $i;
- printf "-h : %s (%d bytes)\n", $curlout[$i],
- length($curlout[$i]);
- printf "file : %s (%d bytes)\n", $txtout[$i],
- length($txtout[$i]);
- if(length($curlout[$i]) == length($txtout[$i])) {
- my $l = length($curlout[$i]);
- for my $c (0 .. $l) {
- my $o = substr($curlout[$i], $c, 1);
- my $t = substr($txtout[$i], $c, 1);
- if($o ne $t) {
- print "-h col %d: %02x\n", $c, ord($o);
- print "file col %d: %02x\n", $c, ord($t);
- }
- }
- }
- $error++;
- }
- }
- }
- exit $error;
|