3 // Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
5 // This program is free software; you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation; version 2 of the License.
9 // This program is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
14 // You should have received a copy of the GNU General Public License
15 // along with this program; if not, write to the Free Software
16 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
23 #include "vunify-operations.h"
26 #include <sys/types.h>
31 // ====== The compare functions =========
33 // return 'true' iff both files are different and unifyable
35 compareUnify(struct stat const *lhs, struct stat const *rhs)
37 return (lhs->st_dev ==rhs->st_dev &&
38 lhs->st_ino !=rhs->st_ino &&
39 lhs->st_mode ==rhs->st_mode &&
40 lhs->st_uid ==rhs->st_uid &&
41 lhs->st_gid ==rhs->st_gid &&
42 lhs->st_size ==rhs->st_size &&
43 lhs->st_mtime==rhs->st_mtime);
48 // return 'true' iff both files are the same one
50 compareDeUnify(struct stat const *lhs, struct stat const *rhs)
52 return (lhs->st_dev ==rhs->st_dev &&
53 lhs->st_ino ==rhs->st_ino);
56 // ===== The 'doit' functions ===========
60 unifyTest(char const *src, char const *dst)
63 WRITE_MSG(1, "unifying '");
65 WRITE_MSG(1, "' -> '");
74 static struct Operations op_unify_test = {
75 .compare = compareUnify,
79 static struct Operations op_deunify_test = {
80 .compare = compareDeUnify,
84 static struct Operations op_unify_notest = {
85 .compare = compareUnify,
89 static struct Operations op_deunify_notest = {
90 .compare = compareDeUnify,
97 Operations_init(struct Operations *op, OperationType type, bool is_test)
101 if (is_test) *op = op_unify_test;
102 else *op = op_unify_notest;
106 if (is_test) *op = op_deunify_test;
107 else *op = op_deunify_notest;