1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
-- This file is part of SmartEiffel The GNU Eiffel Compiler Tools and Libraries
--
-- SmartEiffel is free software; you can redistribute it and/or modify it
-- under the terms of the GNU General Public License, as published by the
-- Free Software Foundation; either version 2, or (at your option) any later
-- version.
-- SmartEiffel is distributed in the hope that it will be useful but WITHOUT
-- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-- more details. You should have received a copy of the GNU General Public
-- License along with SmartEiffel; see the file COPYING. If not, write to
-- the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
-- MA 02111-1307, USA.
--
-- Copyright(C) 1994-2002: INRIA - LORIA (INRIA Lorraine) - ESIAL U.H.P.
-- - University of Nancy 1 - FRANCE
-- Copyright(C) 2003: INRIA - LORIA (INRIA Lorraine) - I.U.T. Charlemagne
-- - University of Nancy 2 - FRANCE
--
-- Dominique COLNET, Suzanne COLLIN, Olivier ZENDRA,
-- Philippe RIBET, Cyril ADRIAN
--
-- http://SmartEiffel.loria.fr - SmartEiffel@loria.fr
--
class SAME_EXECUTABLES
--
-- Check if two files given as arguments are (quite) the same
-- executables files.
-- Terminate execution with the corresponding exit status code.
--
inherit
GLOBALS
VISITABLE
creation make
feature {SAME_EXECUTABLES_VISITOR}
accept(visitor: SAME_EXECUTABLES_VISITOR) is
do
visitor.visit_same_executables(Current)
end
feature {NONE}
msg1, msg2: TEXT_FILE_READ
feature
make is
local
path1, path2: STRING
do
if argument_count < 2 then
io.put_string("usage: same_files <path1> <path2>%N")
die_with_code(exit_failure_code)
end
path1 := argument(1)
path2 := argument(2)
exists(path1)
exists(path2)
if same_executables(path1,path2) then
io.put_string(once "Sames files.%N")
else
io.put_string("Files differ.%N")
die_with_code(exit_failure_code)
end
end
feature {NONE}
same_executables(path1,path2: STRING): BOOLEAN is
local
f1, f2: TEXT_FILE_READ
diff_count: INTEGER
stop: BOOLEAN
do
from
!!f1.connect_to(path1)
if f1.is_connected then
if not f1.end_of_input then
f1.read_character
end
end
!!f2.connect_to(path2)
if f2.is_connected then
if not f2.end_of_input then
f2.read_character
end
end
diff_count := 4
until
stop
loop
if f1.end_of_input then
if f2.end_of_input then
stop := true
Result := true
else
stop := true
Result := false
end
elseif f2.end_of_input then
stop := true
Result := false
else
if f1.last_character /= f2.last_character then
diff_count := diff_count - 1
if diff_count = 0 then
stop := true
Result := false
end
end
f1.read_character
f2.read_character
end
end
f1.disconnect
f2.disconnect
end
exists(path: STRING) is
do
if not file_exists(path) then
io.put_string("File : %"")
io.put_string(path)
io.put_string("%" not found.%N")
die_with_code(exit_failure_code)
end
end
end -- SAME_EXECUTABLES
|