View | Details | Raw Unified | Return to bug 46316
Collapse All | Expand All

(-)fdupes-2.1.2/CHANGES (+14 lines)
Lines 6-11 Link Here
6
those who've otherwise worked on that item. For a list of 
6
those who've otherwise worked on that item. For a list of 
7
contributors names and identifiers please see the CONTRIBUTORS file.
7
contributors names and identifiers please see the CONTRIBUTORS file.
8
8
9
Changes from 2.2.0 to 2.2.1:
10
11
 - Fix bug in code meant to skip over the current log file when --log
12
   option is given.
13
 - Updates to copyright notices in source code.
14
15
Changes from 2.1.2 to 2.2.0:
16
17
 - Add --deferconfirmation option.
18
 - Check that files marked as duplicates haven't changed during program
19
   execution before deleting them.
20
 - Update documentation to indicate units for SIZE in command-line options.
21
 - Move some configuration settings to configure.ac file.
22
9
Changes from 2.1.1 to 2.1.2:
23
Changes from 2.1.1 to 2.1.2:
10
24
11
 - Do not enter ncurses mode when --immediate option given.
25
 - Do not enter ncurses mode when --immediate option given.
(-)fdupes-2.1.2/Makefile.am (-23 / +9 lines)
Lines 1-6 Link Here
1
bin_PROGRAMS = fdupes
1
bin_PROGRAMS = fdupes
2
2
3
if NO_NCURSES
4
fdupes_SOURCES = fdupes.c\
3
fdupes_SOURCES = fdupes.c\
5
 fdupes.h\
4
 fdupes.h\
6
 errormsg.c\
5
 errormsg.c\
Lines 15-30 Link Here
15
 sigint.h\
14
 sigint.h\
16
 flags.c\
15
 flags.c\
17
 flags.h\
16
 flags.h\
17
 confirmmatch.c\
18
 confirmmatch.h\
19
 removeifnotchanged.c\
20
 removeifnotchanged.h\
18
 mbstowcs_escape_invalid.c\
21
 mbstowcs_escape_invalid.c\
19
 mbstowcs_escape_invalid.h\
22
 mbstowcs_escape_invalid.h\
20
 md5/md5.c\
23
 md5/md5.c\
21
 md5/md5.h
24
 md5/md5.h
22
dist_man1_MANS = fdupes.1
25
dist_man1_MANS = fdupes.1
23
26
24
else
27
if WITH_NCURSES
25
fdupes_SOURCES = fdupes.c\
28
fdupes_SOURCES += filegroup.h\
26
 fdupes.h\
29
 fileaction.h\
27
 filegroup.h\
30
 fileaction.c\
28
 ncurses-commands.c\
31
 ncurses-commands.c\
29
 ncurses-commands.h\
32
 ncurses-commands.h\
30
 ncurses-getcommand.c\
33
 ncurses-getcommand.c\
Lines 39-65 Link Here
39
 ncurses-status.h\
42
 ncurses-status.h\
40
 commandidentifier.c\
43
 commandidentifier.c\
41
 commandidentifier.h\
44
 commandidentifier.h\
42
 errormsg.c\
43
 errormsg.h\
44
 wcs.c\
45
 wcs.c\
45
 wcs.h\
46
 wcs.h\
46
 dir.c\
47
 dir.h\
48
 log.c\
49
 log.h\
50
 fmatch.c\
51
 fmatch.h\
52
 sigint.c\
53
 sigint.h\
54
 flags.c\
55
 flags.h\
56
 mbstowcs_escape_invalid.c\
57
 mbstowcs_escape_invalid.h\
58
 positive_wcwidth.c\
47
 positive_wcwidth.c\
59
 positive_wcwidth.h\
48
 positive_wcwidth.h
60
 md5/md5.c\
61
 md5/md5.h
62
dist_man1_MANS = fdupes.1
63
dist_man7_MANS = fdupes-help.7
49
dist_man7_MANS = fdupes-help.7
64
50
65
endif
51
endif
(-)fdupes-2.1.2/Makefile.in (-114 / +145 lines)
Lines 1-7 Link Here
1
# Makefile.in generated by automake 1.15.1 from Makefile.am.
1
# Makefile.in generated by automake 1.16.1 from Makefile.am.
2
# @configure_input@
2
# @configure_input@
3
3
4
# Copyright (C) 1994-2017 Free Software Foundation, Inc.
4
# Copyright (C) 1994-2018 Free Software Foundation, Inc.
5
5
6
# This Makefile.in is free software; the Free Software Foundation
6
# This Makefile.in is free software; the Free Software Foundation
7
# gives unlimited permission to copy and/or distribute it,
7
# gives unlimited permission to copy and/or distribute it,
Lines 87-92 Link Here
87
PRE_UNINSTALL = :
87
PRE_UNINSTALL = :
88
POST_UNINSTALL = :
88
POST_UNINSTALL = :
89
bin_PROGRAMS = fdupes$(EXEEXT)
89
bin_PROGRAMS = fdupes$(EXEEXT)
90
@WITH_NCURSES_TRUE@am__append_1 = filegroup.h\
91
@WITH_NCURSES_TRUE@ fileaction.h\
92
@WITH_NCURSES_TRUE@ fileaction.c\
93
@WITH_NCURSES_TRUE@ ncurses-commands.c\
94
@WITH_NCURSES_TRUE@ ncurses-commands.h\
95
@WITH_NCURSES_TRUE@ ncurses-getcommand.c\
96
@WITH_NCURSES_TRUE@ ncurses-getcommand.h\
97
@WITH_NCURSES_TRUE@ ncurses-interface.c\
98
@WITH_NCURSES_TRUE@ ncurses-interface.h\
99
@WITH_NCURSES_TRUE@ ncurses-print.c\
100
@WITH_NCURSES_TRUE@ ncurses-print.h\
101
@WITH_NCURSES_TRUE@ ncurses-prompt.c\
102
@WITH_NCURSES_TRUE@ ncurses-prompt.h\
103
@WITH_NCURSES_TRUE@ ncurses-status.c\
104
@WITH_NCURSES_TRUE@ ncurses-status.h\
105
@WITH_NCURSES_TRUE@ commandidentifier.c\
106
@WITH_NCURSES_TRUE@ commandidentifier.h\
107
@WITH_NCURSES_TRUE@ wcs.c\
108
@WITH_NCURSES_TRUE@ wcs.h\
109
@WITH_NCURSES_TRUE@ positive_wcwidth.c\
110
@WITH_NCURSES_TRUE@ positive_wcwidth.h
111
90
subdir = .
112
subdir = .
91
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
113
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
92
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
114
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
Lines 103-138 Link Here
103
am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" \
125
am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" \
104
	"$(DESTDIR)$(man7dir)"
126
	"$(DESTDIR)$(man7dir)"
105
PROGRAMS = $(bin_PROGRAMS)
127
PROGRAMS = $(bin_PROGRAMS)
106
am__fdupes_SOURCES_DIST = fdupes.c fdupes.h filegroup.h \
128
am__fdupes_SOURCES_DIST = fdupes.c fdupes.h errormsg.c errormsg.h \
129
	dir.c dir.h log.c log.h fmatch.c fmatch.h sigint.c sigint.h \
130
	flags.c flags.h confirmmatch.c confirmmatch.h \
131
	removeifnotchanged.c removeifnotchanged.h \
132
	mbstowcs_escape_invalid.c mbstowcs_escape_invalid.h md5/md5.c \
133
	md5/md5.h filegroup.h fileaction.h fileaction.c \
107
	ncurses-commands.c ncurses-commands.h ncurses-getcommand.c \
134
	ncurses-commands.c ncurses-commands.h ncurses-getcommand.c \
108
	ncurses-getcommand.h ncurses-interface.c ncurses-interface.h \
135
	ncurses-getcommand.h ncurses-interface.c ncurses-interface.h \
109
	ncurses-print.c ncurses-print.h ncurses-prompt.c \
136
	ncurses-print.c ncurses-print.h ncurses-prompt.c \
110
	ncurses-prompt.h ncurses-status.c ncurses-status.h \
137
	ncurses-prompt.h ncurses-status.c ncurses-status.h \
111
	commandidentifier.c commandidentifier.h errormsg.c errormsg.h \
138
	commandidentifier.c commandidentifier.h wcs.c wcs.h \
112
	wcs.c wcs.h dir.c dir.h log.c log.h fmatch.c fmatch.h sigint.c \
139
	positive_wcwidth.c positive_wcwidth.h
113
	sigint.h flags.c flags.h mbstowcs_escape_invalid.c \
114
	mbstowcs_escape_invalid.h positive_wcwidth.c \
115
	positive_wcwidth.h md5/md5.c md5/md5.h
116
am__dirstamp = $(am__leading_dot)dirstamp
140
am__dirstamp = $(am__leading_dot)dirstamp
117
@NO_NCURSES_FALSE@am_fdupes_OBJECTS = fdupes.$(OBJEXT) \
141
@WITH_NCURSES_TRUE@am__objects_1 = fileaction.$(OBJEXT) \
118
@NO_NCURSES_FALSE@	ncurses-commands.$(OBJEXT) \
142
@WITH_NCURSES_TRUE@	ncurses-commands.$(OBJEXT) \
119
@NO_NCURSES_FALSE@	ncurses-getcommand.$(OBJEXT) \
143
@WITH_NCURSES_TRUE@	ncurses-getcommand.$(OBJEXT) \
120
@NO_NCURSES_FALSE@	ncurses-interface.$(OBJEXT) \
144
@WITH_NCURSES_TRUE@	ncurses-interface.$(OBJEXT) \
121
@NO_NCURSES_FALSE@	ncurses-print.$(OBJEXT) \
145
@WITH_NCURSES_TRUE@	ncurses-print.$(OBJEXT) \
122
@NO_NCURSES_FALSE@	ncurses-prompt.$(OBJEXT) \
146
@WITH_NCURSES_TRUE@	ncurses-prompt.$(OBJEXT) \
123
@NO_NCURSES_FALSE@	ncurses-status.$(OBJEXT) \
147
@WITH_NCURSES_TRUE@	ncurses-status.$(OBJEXT) \
124
@NO_NCURSES_FALSE@	commandidentifier.$(OBJEXT) \
148
@WITH_NCURSES_TRUE@	commandidentifier.$(OBJEXT) wcs.$(OBJEXT) \
125
@NO_NCURSES_FALSE@	errormsg.$(OBJEXT) wcs.$(OBJEXT) \
149
@WITH_NCURSES_TRUE@	positive_wcwidth.$(OBJEXT)
126
@NO_NCURSES_FALSE@	dir.$(OBJEXT) log.$(OBJEXT) fmatch.$(OBJEXT) \
150
am_fdupes_OBJECTS = fdupes.$(OBJEXT) errormsg.$(OBJEXT) dir.$(OBJEXT) \
127
@NO_NCURSES_FALSE@	sigint.$(OBJEXT) flags.$(OBJEXT) \
151
	log.$(OBJEXT) fmatch.$(OBJEXT) sigint.$(OBJEXT) \
128
@NO_NCURSES_FALSE@	mbstowcs_escape_invalid.$(OBJEXT) \
152
	flags.$(OBJEXT) confirmmatch.$(OBJEXT) \
129
@NO_NCURSES_FALSE@	positive_wcwidth.$(OBJEXT) md5/md5.$(OBJEXT)
153
	removeifnotchanged.$(OBJEXT) mbstowcs_escape_invalid.$(OBJEXT) \
130
@NO_NCURSES_TRUE@am_fdupes_OBJECTS = fdupes.$(OBJEXT) \
154
	md5/md5.$(OBJEXT) $(am__objects_1)
131
@NO_NCURSES_TRUE@	errormsg.$(OBJEXT) dir.$(OBJEXT) \
132
@NO_NCURSES_TRUE@	log.$(OBJEXT) fmatch.$(OBJEXT) \
133
@NO_NCURSES_TRUE@	sigint.$(OBJEXT) flags.$(OBJEXT) \
134
@NO_NCURSES_TRUE@	mbstowcs_escape_invalid.$(OBJEXT) \
135
@NO_NCURSES_TRUE@	md5/md5.$(OBJEXT)
136
fdupes_OBJECTS = $(am_fdupes_OBJECTS)
155
fdupes_OBJECTS = $(am_fdupes_OBJECTS)
137
fdupes_LDADD = $(LDADD)
156
fdupes_LDADD = $(LDADD)
138
AM_V_P = $(am__v_P_@AM_V@)
157
AM_V_P = $(am__v_P_@AM_V@)
Lines 149-155 Link Here
149
am__v_at_1 = 
168
am__v_at_1 = 
150
DEFAULT_INCLUDES = -I.@am__isrc@
169
DEFAULT_INCLUDES = -I.@am__isrc@
151
depcomp = $(SHELL) $(top_srcdir)/depcomp
170
depcomp = $(SHELL) $(top_srcdir)/depcomp
152
am__depfiles_maybe = depfiles
171
am__maybe_remake_depfiles = depfiles
172
am__depfiles_remade = ./$(DEPDIR)/commandidentifier.Po \
173
	./$(DEPDIR)/confirmmatch.Po ./$(DEPDIR)/dir.Po \
174
	./$(DEPDIR)/errormsg.Po ./$(DEPDIR)/fdupes.Po \
175
	./$(DEPDIR)/fileaction.Po ./$(DEPDIR)/flags.Po \
176
	./$(DEPDIR)/fmatch.Po ./$(DEPDIR)/log.Po \
177
	./$(DEPDIR)/mbstowcs_escape_invalid.Po \
178
	./$(DEPDIR)/ncurses-commands.Po \
179
	./$(DEPDIR)/ncurses-getcommand.Po \
180
	./$(DEPDIR)/ncurses-interface.Po ./$(DEPDIR)/ncurses-print.Po \
181
	./$(DEPDIR)/ncurses-prompt.Po ./$(DEPDIR)/ncurses-status.Po \
182
	./$(DEPDIR)/positive_wcwidth.Po \
183
	./$(DEPDIR)/removeifnotchanged.Po ./$(DEPDIR)/sigint.Po \
184
	./$(DEPDIR)/wcs.Po md5/$(DEPDIR)/md5.Po
153
am__mv = mv -f
185
am__mv = mv -f
154
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
186
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
155
	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
187
	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
Lines 336-401 Link Here
336
top_build_prefix = @top_build_prefix@
368
top_build_prefix = @top_build_prefix@
337
top_builddir = @top_builddir@
369
top_builddir = @top_builddir@
338
top_srcdir = @top_srcdir@
370
top_srcdir = @top_srcdir@
339
@NO_NCURSES_FALSE@fdupes_SOURCES = fdupes.c\
371
fdupes_SOURCES = fdupes.c fdupes.h errormsg.c errormsg.h dir.c dir.h \
340
@NO_NCURSES_FALSE@ fdupes.h\
372
	log.c log.h fmatch.c fmatch.h sigint.c sigint.h flags.c \
341
@NO_NCURSES_FALSE@ filegroup.h\
373
	flags.h confirmmatch.c confirmmatch.h removeifnotchanged.c \
342
@NO_NCURSES_FALSE@ ncurses-commands.c\
374
	removeifnotchanged.h mbstowcs_escape_invalid.c \
343
@NO_NCURSES_FALSE@ ncurses-commands.h\
375
	mbstowcs_escape_invalid.h md5/md5.c md5/md5.h $(am__append_1)
344
@NO_NCURSES_FALSE@ ncurses-getcommand.c\
376
dist_man1_MANS = fdupes.1
345
@NO_NCURSES_FALSE@ ncurses-getcommand.h\
377
@WITH_NCURSES_TRUE@dist_man7_MANS = fdupes-help.7
346
@NO_NCURSES_FALSE@ ncurses-interface.c\
347
@NO_NCURSES_FALSE@ ncurses-interface.h\
348
@NO_NCURSES_FALSE@ ncurses-print.c\
349
@NO_NCURSES_FALSE@ ncurses-print.h\
350
@NO_NCURSES_FALSE@ ncurses-prompt.c\
351
@NO_NCURSES_FALSE@ ncurses-prompt.h\
352
@NO_NCURSES_FALSE@ ncurses-status.c\
353
@NO_NCURSES_FALSE@ ncurses-status.h\
354
@NO_NCURSES_FALSE@ commandidentifier.c\
355
@NO_NCURSES_FALSE@ commandidentifier.h\
356
@NO_NCURSES_FALSE@ errormsg.c\
357
@NO_NCURSES_FALSE@ errormsg.h\
358
@NO_NCURSES_FALSE@ wcs.c\
359
@NO_NCURSES_FALSE@ wcs.h\
360
@NO_NCURSES_FALSE@ dir.c\
361
@NO_NCURSES_FALSE@ dir.h\
362
@NO_NCURSES_FALSE@ log.c\
363
@NO_NCURSES_FALSE@ log.h\
364
@NO_NCURSES_FALSE@ fmatch.c\
365
@NO_NCURSES_FALSE@ fmatch.h\
366
@NO_NCURSES_FALSE@ sigint.c\
367
@NO_NCURSES_FALSE@ sigint.h\
368
@NO_NCURSES_FALSE@ flags.c\
369
@NO_NCURSES_FALSE@ flags.h\
370
@NO_NCURSES_FALSE@ mbstowcs_escape_invalid.c\
371
@NO_NCURSES_FALSE@ mbstowcs_escape_invalid.h\
372
@NO_NCURSES_FALSE@ positive_wcwidth.c\
373
@NO_NCURSES_FALSE@ positive_wcwidth.h\
374
@NO_NCURSES_FALSE@ md5/md5.c\
375
@NO_NCURSES_FALSE@ md5/md5.h
376
377
@NO_NCURSES_TRUE@fdupes_SOURCES = fdupes.c\
378
@NO_NCURSES_TRUE@ fdupes.h\
379
@NO_NCURSES_TRUE@ errormsg.c\
380
@NO_NCURSES_TRUE@ errormsg.h\
381
@NO_NCURSES_TRUE@ dir.c\
382
@NO_NCURSES_TRUE@ dir.h\
383
@NO_NCURSES_TRUE@ log.c\
384
@NO_NCURSES_TRUE@ log.h\
385
@NO_NCURSES_TRUE@ fmatch.c\
386
@NO_NCURSES_TRUE@ fmatch.h\
387
@NO_NCURSES_TRUE@ sigint.c\
388
@NO_NCURSES_TRUE@ sigint.h\
389
@NO_NCURSES_TRUE@ flags.c\
390
@NO_NCURSES_TRUE@ flags.h\
391
@NO_NCURSES_TRUE@ mbstowcs_escape_invalid.c\
392
@NO_NCURSES_TRUE@ mbstowcs_escape_invalid.h\
393
@NO_NCURSES_TRUE@ md5/md5.c\
394
@NO_NCURSES_TRUE@ md5/md5.h
395
396
@NO_NCURSES_FALSE@dist_man1_MANS = fdupes.1
397
@NO_NCURSES_TRUE@dist_man1_MANS = fdupes.1
398
@NO_NCURSES_FALSE@dist_man7_MANS = fdupes-help.7
399
EXTRA_DIST = testdir CHANGES CONTRIBUTORS
378
EXTRA_DIST = testdir CHANGES CONTRIBUTORS
400
all: config.h
379
all: config.h
401
	$(MAKE) $(AM_MAKEFLAGS) all-am
380
	$(MAKE) $(AM_MAKEFLAGS) all-am
Lines 423-430 Link Here
423
	    echo ' $(SHELL) ./config.status'; \
402
	    echo ' $(SHELL) ./config.status'; \
424
	    $(SHELL) ./config.status;; \
403
	    $(SHELL) ./config.status;; \
425
	  *) \
404
	  *) \
426
	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
405
	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \
427
	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
406
	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \
428
	esac;
407
	esac;
429
408
430
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
409
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
Lines 511-535 Link Here
511
distclean-compile:
490
distclean-compile:
512
	-rm -f *.tab.c
491
	-rm -f *.tab.c
513
492
514
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/commandidentifier.Po@am__quote@
493
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/commandidentifier.Po@am__quote@ # am--include-marker
515
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dir.Po@am__quote@
494
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/confirmmatch.Po@am__quote@ # am--include-marker
516
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/errormsg.Po@am__quote@
495
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dir.Po@am__quote@ # am--include-marker
517
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdupes.Po@am__quote@
496
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/errormsg.Po@am__quote@ # am--include-marker
518
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flags.Po@am__quote@
497
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdupes.Po@am__quote@ # am--include-marker
519
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fmatch.Po@am__quote@
498
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fileaction.Po@am__quote@ # am--include-marker
520
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/log.Po@am__quote@
499
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flags.Po@am__quote@ # am--include-marker
521
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbstowcs_escape_invalid.Po@am__quote@
500
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fmatch.Po@am__quote@ # am--include-marker
522
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ncurses-commands.Po@am__quote@
501
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/log.Po@am__quote@ # am--include-marker
523
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ncurses-getcommand.Po@am__quote@
502
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbstowcs_escape_invalid.Po@am__quote@ # am--include-marker
524
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ncurses-interface.Po@am__quote@
503
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ncurses-commands.Po@am__quote@ # am--include-marker
525
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ncurses-print.Po@am__quote@
504
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ncurses-getcommand.Po@am__quote@ # am--include-marker
526
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ncurses-prompt.Po@am__quote@
505
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ncurses-interface.Po@am__quote@ # am--include-marker
527
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ncurses-status.Po@am__quote@
506
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ncurses-print.Po@am__quote@ # am--include-marker
528
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/positive_wcwidth.Po@am__quote@
507
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ncurses-prompt.Po@am__quote@ # am--include-marker
529
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sigint.Po@am__quote@
508
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ncurses-status.Po@am__quote@ # am--include-marker
530
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wcs.Po@am__quote@
509
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/positive_wcwidth.Po@am__quote@ # am--include-marker
531
@AMDEP_TRUE@@am__include@ @am__quote@md5/$(DEPDIR)/md5.Po@am__quote@
510
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/removeifnotchanged.Po@am__quote@ # am--include-marker
511
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sigint.Po@am__quote@ # am--include-marker
512
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wcs.Po@am__quote@ # am--include-marker
513
@AMDEP_TRUE@@am__include@ @am__quote@md5/$(DEPDIR)/md5.Po@am__quote@ # am--include-marker
532
514
515
$(am__depfiles_remade):
516
	@$(MKDIR_P) $(@D)
517
	@echo '# dummy' >$@-t && $(am__mv) $@-t $@
518
519
am--depfiles: $(am__depfiles_remade)
520
533
.c.o:
521
.c.o:
534
@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
522
@am__fastdepCC_TRUE@	$(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
535
@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
523
@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
Lines 687-693 Link Here
687
	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
675
	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
688
	-rm -f cscope.out cscope.in.out cscope.po.out cscope.files
676
	-rm -f cscope.out cscope.in.out cscope.po.out cscope.files
689
677
690
distdir: $(DISTFILES)
678
distdir: $(BUILT_SOURCES)
679
	$(MAKE) $(AM_MAKEFLAGS) distdir-am
680
681
distdir-am: $(DISTFILES)
691
	$(am__remove_distdir)
682
	$(am__remove_distdir)
692
	test -d "$(distdir)" || mkdir "$(distdir)"
683
	test -d "$(distdir)" || mkdir "$(distdir)"
693
	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
684
	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
Lines 898-904 Link Here
898
889
899
distclean: distclean-am
890
distclean: distclean-am
900
	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
891
	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
901
	-rm -rf ./$(DEPDIR) md5/$(DEPDIR)
892
		-rm -f ./$(DEPDIR)/commandidentifier.Po
893
	-rm -f ./$(DEPDIR)/confirmmatch.Po
894
	-rm -f ./$(DEPDIR)/dir.Po
895
	-rm -f ./$(DEPDIR)/errormsg.Po
896
	-rm -f ./$(DEPDIR)/fdupes.Po
897
	-rm -f ./$(DEPDIR)/fileaction.Po
898
	-rm -f ./$(DEPDIR)/flags.Po
899
	-rm -f ./$(DEPDIR)/fmatch.Po
900
	-rm -f ./$(DEPDIR)/log.Po
901
	-rm -f ./$(DEPDIR)/mbstowcs_escape_invalid.Po
902
	-rm -f ./$(DEPDIR)/ncurses-commands.Po
903
	-rm -f ./$(DEPDIR)/ncurses-getcommand.Po
904
	-rm -f ./$(DEPDIR)/ncurses-interface.Po
905
	-rm -f ./$(DEPDIR)/ncurses-print.Po
906
	-rm -f ./$(DEPDIR)/ncurses-prompt.Po
907
	-rm -f ./$(DEPDIR)/ncurses-status.Po
908
	-rm -f ./$(DEPDIR)/positive_wcwidth.Po
909
	-rm -f ./$(DEPDIR)/removeifnotchanged.Po
910
	-rm -f ./$(DEPDIR)/sigint.Po
911
	-rm -f ./$(DEPDIR)/wcs.Po
912
	-rm -f md5/$(DEPDIR)/md5.Po
902
	-rm -f Makefile
913
	-rm -f Makefile
903
distclean-am: clean-am distclean-compile distclean-generic \
914
distclean-am: clean-am distclean-compile distclean-generic \
904
	distclean-hdr distclean-tags
915
	distclean-hdr distclean-tags
Lines 946-952 Link Here
946
maintainer-clean: maintainer-clean-am
957
maintainer-clean: maintainer-clean-am
947
	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
958
	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
948
	-rm -rf $(top_srcdir)/autom4te.cache
959
	-rm -rf $(top_srcdir)/autom4te.cache
949
	-rm -rf ./$(DEPDIR) md5/$(DEPDIR)
960
		-rm -f ./$(DEPDIR)/commandidentifier.Po
961
	-rm -f ./$(DEPDIR)/confirmmatch.Po
962
	-rm -f ./$(DEPDIR)/dir.Po
963
	-rm -f ./$(DEPDIR)/errormsg.Po
964
	-rm -f ./$(DEPDIR)/fdupes.Po
965
	-rm -f ./$(DEPDIR)/fileaction.Po
966
	-rm -f ./$(DEPDIR)/flags.Po
967
	-rm -f ./$(DEPDIR)/fmatch.Po
968
	-rm -f ./$(DEPDIR)/log.Po
969
	-rm -f ./$(DEPDIR)/mbstowcs_escape_invalid.Po
970
	-rm -f ./$(DEPDIR)/ncurses-commands.Po
971
	-rm -f ./$(DEPDIR)/ncurses-getcommand.Po
972
	-rm -f ./$(DEPDIR)/ncurses-interface.Po
973
	-rm -f ./$(DEPDIR)/ncurses-print.Po
974
	-rm -f ./$(DEPDIR)/ncurses-prompt.Po
975
	-rm -f ./$(DEPDIR)/ncurses-status.Po
976
	-rm -f ./$(DEPDIR)/positive_wcwidth.Po
977
	-rm -f ./$(DEPDIR)/removeifnotchanged.Po
978
	-rm -f ./$(DEPDIR)/sigint.Po
979
	-rm -f ./$(DEPDIR)/wcs.Po
980
	-rm -f md5/$(DEPDIR)/md5.Po
950
	-rm -f Makefile
981
	-rm -f Makefile
951
maintainer-clean-am: distclean-am maintainer-clean-generic
982
maintainer-clean-am: distclean-am maintainer-clean-generic
952
983
Lines 968-976 Link Here
968
999
969
.MAKE: all install-am install-strip
1000
.MAKE: all install-am install-strip
970
1001
971
.PHONY: CTAGS GTAGS TAGS all all-am am--refresh check check-am clean \
1002
.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles am--refresh check \
972
	clean-binPROGRAMS clean-cscope clean-generic cscope \
1003
	check-am clean clean-binPROGRAMS clean-cscope clean-generic \
973
	cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \
1004
	cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \
974
	dist-gzip dist-hook dist-lzip dist-shar dist-tarZ dist-xz \
1005
	dist-gzip dist-hook dist-lzip dist-shar dist-tarZ dist-xz \
975
	dist-zip distcheck distclean distclean-compile \
1006
	dist-zip distcheck distclean distclean-compile \
976
	distclean-generic distclean-hdr distclean-tags distcleancheck \
1007
	distclean-generic distclean-hdr distclean-tags distcleancheck \
(-)fdupes-2.1.2/README (-46 / +48 lines)
Lines 8-72 Link Here
8
--------------------------------------------------------------------
8
--------------------------------------------------------------------
9
Usage: fdupes [options] DIRECTORY...
9
Usage: fdupes [options] DIRECTORY...
10
10
11
 -r --recurse     	for every directory given follow subdirectories
11
 -r --recurse            for every directory given follow subdirectories
12
                  	encountered within
12
                         encountered within
13
 -R --recurse:    	for each directory given after this option follow
13
 -R --recurse:           for each directory given after this option follow
14
                  	subdirectories encountered within (note the ':' at
14
                         subdirectories encountered within (note the ':' at the
15
                  	the end of the option, manpage for more details)
15
                         end of the option, manpage for more details)
16
 -s --symlinks    	follow symlinks
16
 -s --symlinks           follow symlinks
17
 -H --hardlinks   	normally, when two or more files point to the same
17
 -H --hardlinks          normally, when two or more files point to the same
18
                  	disk area they are treated as non-duplicates; this
18
                         disk area they are treated as non-duplicates; this
19
                  	option will change this behavior
19
                         option will change this behavior
20
 -G --minsize=SIZE	consider only files greater than or equal to SIZE in bytes
20
 -G --minsize=SIZE       consider only files greater than or equal to SIZE bytes
21
 -L --maxsize=SIZE	consider only files less than or equal to SIZE in bytes
21
 -L --maxsize=SIZE       consider only files less than or equal to SIZE bytes
22
 -n --noempty     	exclude zero-length files from consideration
22
 -n --noempty            exclude zero-length files from consideration
23
 -A --nohidden    	exclude hidden files from consideration
23
 -A --nohidden           exclude hidden files from consideration
24
 -f --omitfirst   	omit the first file in each set of matches
24
 -f --omitfirst          omit the first file in each set of matches
25
 -1 --sameline    	list each set of matches on a single line
25
 -1 --sameline           list each set of matches on a single line
26
 -S --size        	show size of duplicate files
26
 -S --size               show size of duplicate files
27
 -t --time        	show modification time of duplicate files
27
 -t --time               show modification time of duplicate files
28
 -m --summarize   	summarize dupe information
28
 -m --summarize          summarize dupe information
29
 -q --quiet       	hide progress indicator
29
 -q --quiet              hide progress indicator
30
 -d --delete      	prompt user for files to preserve and delete all
30
 -d --delete             prompt user for files to preserve and delete all
31
                  	others; important: under particular circumstances,
31
                         others; important: under particular circumstances,
32
                  	data may be lost when using this option together
32
                         data may be lost when using this option together
33
                  	with -s or --symlinks, or when specifying a
33
                         with -s or --symlinks, or when specifying a
34
                  	particular directory more than once; refer to the
34
                         particular directory more than once; refer to the
35
                  	fdupes documentation for additional information
35
                         fdupes documentation for additional information
36
 -P --plain       	with --delete, use line-based prompt (as with older
36
 -D --deferconfirmation  in interactive mode, defer byte-for-byte confirmation
37
                  	versions of fdupes) instead of screen-mode interface
37
                         of duplicates until just before file deletion
38
 -N --noprompt    	together with --delete, preserve the first file in
38
 -P --plain              with --delete, use line-based prompt (as with older
39
                  	each set of duplicates and delete the rest without
39
                         versions of fdupes) instead of screen-mode interface
40
                  	prompting the user
40
 -N --noprompt           together with --delete, preserve the first file in
41
 -I --immediate   	delete duplicates as they are encountered, without
41
                         each set of duplicates and delete the rest without
42
                  	grouping into sets; implies --noprompt
42
                         prompting the user
43
 -p --permissions 	don't consider files with different owner/group or
43
 -I --immediate          delete duplicates as they are encountered, without
44
                  	permission bits as duplicates
44
                         grouping into sets; implies --noprompt
45
 -o --order=BY    	select sort order for output and deleting; by file
45
 -p --permissions        don't consider files with different owner/group or
46
                  	modification time (BY='time'; default), status
46
                         permission bits as duplicates
47
                  	change time (BY='ctime'), or filename (BY='name')
47
 -o --order=BY           select sort order for output and deleting; by file
48
 -i --reverse     	reverse order while sorting
48
                         modification time (BY='time'; default), status
49
 -l --log=LOGFILE 	log file deletion choices to LOGFILE
49
                         change time (BY='ctime'), or filename (BY='name')
50
 -v --version     	display fdupes version
50
 -i --reverse            reverse order while sorting
51
 -h --help        	display this help message
51
 -l --log=LOGFILE        log file deletion choices to LOGFILE
52
 -v --version            display fdupes version
53
 -h --help               display this help message
52
54
53
Unless -1 or --sameline is specified, duplicate files are listed 
55
Unless -1 or --sameline is specified, duplicate files are listed
54
together in groups, each file displayed on a separate line. The
56
together in groups, each file displayed on a separate line. The
55
groups are then separated from each other by blank lines.
57
groups are then separated from each other by blank lines.
56
58
57
When -1 or --sameline is specified, spaces and backslash characters (\) 
59
When -1 or --sameline is specified, spaces and backslash characters (\)
58
appearing in a filename are preceded by a backslash character. For
60
appearing in a filename are preceded by a backslash character. For
59
instance, "with spaces" becomes "with\ spaces".
61
instance, "with spaces" becomes "with\ spaces".
60
62
61
When using -d or --delete, care should be taken to insure against
63
When using -d or --delete, care should be taken to insure against
62
accidental data loss. While no information will be immediately
64
accidental data loss. While no information will be immediately
63
lost, using this option together with -s or --symlink can lead 
65
lost, using this option together with -s or --symlink can lead
64
to confusing information being presented to the user when prompted
66
to confusing information being presented to the user when prompted
65
for files to preserve. Specifically, a user could accidentally
67
for files to preserve. Specifically, a user could accidentally
66
preserve a symlink while deleting the file it points to. A similar
68
preserve a symlink while deleting the file it points to. A similar
67
problem arises when specifying a particular directory more than 
69
problem arises when specifying a particular directory more than
68
once. All files within that directory will be listed as their own
70
once. All files within that directory will be listed as their own
69
duplicates, leading to data loss should a user preserve a file 
71
duplicates, leading to data loss should a user preserve a file
70
without its "duplicate" (the file itself!).
72
without its "duplicate" (the file itself!).
71
73
72
74
(-)fdupes-2.1.2/aclocal.m4 (-103 / +86 lines)
Lines 1-6 Link Here
1
# generated automatically by aclocal 1.15.1 -*- Autoconf -*-
1
# generated automatically by aclocal 1.16.1 -*- Autoconf -*-
2
2
3
# Copyright (C) 1996-2017 Free Software Foundation, Inc.
3
# Copyright (C) 1996-2018 Free Software Foundation, Inc.
4
4
5
# This file is free software; the Free Software Foundation
5
# This file is free software; the Free Software Foundation
6
# gives unlimited permission to copy and/or distribute it,
6
# gives unlimited permission to copy and/or distribute it,
Lines 296-302 Link Here
296
AS_VAR_IF([$1], [""], [$5], [$4])dnl
296
AS_VAR_IF([$1], [""], [$5], [$4])dnl
297
])dnl PKG_CHECK_VAR
297
])dnl PKG_CHECK_VAR
298
298
299
# Copyright (C) 2002-2017 Free Software Foundation, Inc.
299
# Copyright (C) 2002-2018 Free Software Foundation, Inc.
300
#
300
#
301
# This file is free software; the Free Software Foundation
301
# This file is free software; the Free Software Foundation
302
# gives unlimited permission to copy and/or distribute it,
302
# gives unlimited permission to copy and/or distribute it,
Lines 308-317 Link Here
308
# generated from the m4 files accompanying Automake X.Y.
308
# generated from the m4 files accompanying Automake X.Y.
309
# (This private macro should not be called outside this file.)
309
# (This private macro should not be called outside this file.)
310
AC_DEFUN([AM_AUTOMAKE_VERSION],
310
AC_DEFUN([AM_AUTOMAKE_VERSION],
311
[am__api_version='1.15'
311
[am__api_version='1.16'
312
dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
312
dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
313
dnl require some minimum version.  Point them to the right macro.
313
dnl require some minimum version.  Point them to the right macro.
314
m4_if([$1], [1.15.1], [],
314
m4_if([$1], [1.16.1], [],
315
      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
315
      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
316
])
316
])
317
317
Lines 327-340 Link Here
327
# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
327
# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
328
# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
328
# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
329
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
329
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
330
[AM_AUTOMAKE_VERSION([1.15.1])dnl
330
[AM_AUTOMAKE_VERSION([1.16.1])dnl
331
m4_ifndef([AC_AUTOCONF_VERSION],
331
m4_ifndef([AC_AUTOCONF_VERSION],
332
  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
332
  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
333
_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
333
_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
334
334
335
# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
335
# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
336
336
337
# Copyright (C) 2001-2017 Free Software Foundation, Inc.
337
# Copyright (C) 2001-2018 Free Software Foundation, Inc.
338
#
338
#
339
# This file is free software; the Free Software Foundation
339
# This file is free software; the Free Software Foundation
340
# gives unlimited permission to copy and/or distribute it,
340
# gives unlimited permission to copy and/or distribute it,
Lines 386-392 Link Here
386
386
387
# AM_CONDITIONAL                                            -*- Autoconf -*-
387
# AM_CONDITIONAL                                            -*- Autoconf -*-
388
388
389
# Copyright (C) 1997-2017 Free Software Foundation, Inc.
389
# Copyright (C) 1997-2018 Free Software Foundation, Inc.
390
#
390
#
391
# This file is free software; the Free Software Foundation
391
# This file is free software; the Free Software Foundation
392
# gives unlimited permission to copy and/or distribute it,
392
# gives unlimited permission to copy and/or distribute it,
Lines 417-423 Link Here
417
Usually this means the macro was only invoked conditionally.]])
417
Usually this means the macro was only invoked conditionally.]])
418
fi])])
418
fi])])
419
419
420
# Copyright (C) 1999-2017 Free Software Foundation, Inc.
420
# Copyright (C) 1999-2018 Free Software Foundation, Inc.
421
#
421
#
422
# This file is free software; the Free Software Foundation
422
# This file is free software; the Free Software Foundation
423
# gives unlimited permission to copy and/or distribute it,
423
# gives unlimited permission to copy and/or distribute it,
Lines 608-620 Link Here
608
608
609
# Generate code to set up dependency tracking.              -*- Autoconf -*-
609
# Generate code to set up dependency tracking.              -*- Autoconf -*-
610
610
611
# Copyright (C) 1999-2017 Free Software Foundation, Inc.
611
# Copyright (C) 1999-2018 Free Software Foundation, Inc.
612
#
612
#
613
# This file is free software; the Free Software Foundation
613
# This file is free software; the Free Software Foundation
614
# gives unlimited permission to copy and/or distribute it,
614
# gives unlimited permission to copy and/or distribute it,
615
# with or without modifications, as long as this notice is preserved.
615
# with or without modifications, as long as this notice is preserved.
616
616
617
618
# _AM_OUTPUT_DEPENDENCY_COMMANDS
617
# _AM_OUTPUT_DEPENDENCY_COMMANDS
619
# ------------------------------
618
# ------------------------------
620
AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
619
AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
Lines 622-670 Link Here
622
  # Older Autoconf quotes --file arguments for eval, but not when files
621
  # Older Autoconf quotes --file arguments for eval, but not when files
623
  # are listed without --file.  Let's play safe and only enable the eval
622
  # are listed without --file.  Let's play safe and only enable the eval
624
  # if we detect the quoting.
623
  # if we detect the quoting.
625
  case $CONFIG_FILES in
624
  # TODO: see whether this extra hack can be removed once we start
626
  *\'*) eval set x "$CONFIG_FILES" ;;
625
  # requiring Autoconf 2.70 or later.
627
  *)   set x $CONFIG_FILES ;;
626
  AS_CASE([$CONFIG_FILES],
628
  esac
627
          [*\'*], [eval set x "$CONFIG_FILES"],
628
          [*], [set x $CONFIG_FILES])
629
  shift
629
  shift
630
  for mf
630
  # Used to flag and report bootstrapping failures.
631
  am_rc=0
632
  for am_mf
631
  do
633
  do
632
    # Strip MF so we end up with the name of the file.
634
    # Strip MF so we end up with the name of the file.
633
    mf=`echo "$mf" | sed -e 's/:.*$//'`
635
    am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'`
634
    # Check whether this is an Automake generated Makefile or not.
636
    # Check whether this is an Automake generated Makefile which includes
635
    # We used to match only the files named 'Makefile.in', but
637
    # dependency-tracking related rules and includes.
636
    # some people rename them; so instead we look at the file content.
638
    # Grep'ing the whole file directly is not great: AIX grep has a line
637
    # Grep'ing the first line is not enough: some people post-process
638
    # each Makefile.in and add a new line on top of each file to say so.
639
    # Grep'ing the whole file is not good either: AIX grep has a line
640
    # limit of 2048, but all sed's we know have understand at least 4000.
639
    # limit of 2048, but all sed's we know have understand at least 4000.
641
    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
640
    sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \
642
      dirpart=`AS_DIRNAME("$mf")`
641
      || continue
643
    else
642
    am_dirpart=`AS_DIRNAME(["$am_mf"])`
644
      continue
643
    am_filepart=`AS_BASENAME(["$am_mf"])`
645
    fi
644
    AM_RUN_LOG([cd "$am_dirpart" \
646
    # Extract the definition of DEPDIR, am__include, and am__quote
645
      && sed -e '/# am--include-marker/d' "$am_filepart" \
647
    # from the Makefile without running 'make'.
646
        | $MAKE -f - am--depfiles]) || am_rc=$?
648
    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
649
    test -z "$DEPDIR" && continue
650
    am__include=`sed -n 's/^am__include = //p' < "$mf"`
651
    test -z "$am__include" && continue
652
    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
653
    # Find all dependency output files, they are included files with
654
    # $(DEPDIR) in their names.  We invoke sed twice because it is the
655
    # simplest approach to changing $(DEPDIR) to its actual value in the
656
    # expansion.
657
    for file in `sed -n "
658
      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
659
	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
660
      # Make sure the directory exists.
661
      test -f "$dirpart/$file" && continue
662
      fdir=`AS_DIRNAME(["$file"])`
663
      AS_MKDIR_P([$dirpart/$fdir])
664
      # echo "creating $dirpart/$file"
665
      echo '# dummy' > "$dirpart/$file"
666
    done
667
  done
647
  done
648
  if test $am_rc -ne 0; then
649
    AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments
650
    for automatic dependency tracking.  Try re-running configure with the
651
    '--disable-dependency-tracking' option to at least be able to build
652
    the package (albeit without support for automatic dependency tracking).])
653
  fi
654
  AS_UNSET([am_dirpart])
655
  AS_UNSET([am_filepart])
656
  AS_UNSET([am_mf])
657
  AS_UNSET([am_rc])
658
  rm -f conftest-deps.mk
668
}
659
}
669
])# _AM_OUTPUT_DEPENDENCY_COMMANDS
660
])# _AM_OUTPUT_DEPENDENCY_COMMANDS
670
661
Lines 673-690 Link Here
673
# -----------------------------
664
# -----------------------------
674
# This macro should only be invoked once -- use via AC_REQUIRE.
665
# This macro should only be invoked once -- use via AC_REQUIRE.
675
#
666
#
676
# This code is only required when automatic dependency tracking
667
# This code is only required when automatic dependency tracking is enabled.
677
# is enabled.  FIXME.  This creates each '.P' file that we will
668
# This creates each '.Po' and '.Plo' makefile fragment that we'll need in
678
# need in order to bootstrap the dependency handling code.
669
# order to bootstrap the dependency handling code.
679
AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
670
AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
680
[AC_CONFIG_COMMANDS([depfiles],
671
[AC_CONFIG_COMMANDS([depfiles],
681
     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
672
     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
682
     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
673
     [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])])
683
])
684
674
685
# Do all the work for Automake.                             -*- Autoconf -*-
675
# Do all the work for Automake.                             -*- Autoconf -*-
686
676
687
# Copyright (C) 1996-2017 Free Software Foundation, Inc.
677
# Copyright (C) 1996-2018 Free Software Foundation, Inc.
688
#
678
#
689
# This file is free software; the Free Software Foundation
679
# This file is free software; the Free Software Foundation
690
# gives unlimited permission to copy and/or distribute it,
680
# gives unlimited permission to copy and/or distribute it,
Lines 771-778 Link Here
771
AC_REQUIRE([AC_PROG_MKDIR_P])dnl
761
AC_REQUIRE([AC_PROG_MKDIR_P])dnl
772
# For better backward compatibility.  To be removed once Automake 1.9.x
762
# For better backward compatibility.  To be removed once Automake 1.9.x
773
# dies out for good.  For more background, see:
763
# dies out for good.  For more background, see:
774
# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
764
# <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
775
# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
765
# <https://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
776
AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
766
AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
777
# We need awk for the "check" target (and possibly the TAP driver).  The
767
# We need awk for the "check" target (and possibly the TAP driver).  The
778
# system "awk" is bad on some platforms.
768
# system "awk" is bad on some platforms.
Lines 839-845 Link Here
839
Aborting the configuration process, to ensure you take notice of the issue.
829
Aborting the configuration process, to ensure you take notice of the issue.
840
830
841
You can download and install GNU coreutils to get an 'rm' implementation
831
You can download and install GNU coreutils to get an 'rm' implementation
842
that behaves properly: <http://www.gnu.org/software/coreutils/>.
832
that behaves properly: <https://www.gnu.org/software/coreutils/>.
843
833
844
If you want to complete the configuration process using your problematic
834
If you want to complete the configuration process using your problematic
845
'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
835
'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
Lines 881-887 Link Here
881
done
871
done
882
echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
872
echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
883
873
884
# Copyright (C) 2001-2017 Free Software Foundation, Inc.
874
# Copyright (C) 2001-2018 Free Software Foundation, Inc.
885
#
875
#
886
# This file is free software; the Free Software Foundation
876
# This file is free software; the Free Software Foundation
887
# gives unlimited permission to copy and/or distribute it,
877
# gives unlimited permission to copy and/or distribute it,
Lines 902-908 Link Here
902
fi
892
fi
903
AC_SUBST([install_sh])])
893
AC_SUBST([install_sh])])
904
894
905
# Copyright (C) 2003-2017 Free Software Foundation, Inc.
895
# Copyright (C) 2003-2018 Free Software Foundation, Inc.
906
#
896
#
907
# This file is free software; the Free Software Foundation
897
# This file is free software; the Free Software Foundation
908
# gives unlimited permission to copy and/or distribute it,
898
# gives unlimited permission to copy and/or distribute it,
Lines 923-929 Link Here
923
913
924
# Check to see how 'make' treats includes.	            -*- Autoconf -*-
914
# Check to see how 'make' treats includes.	            -*- Autoconf -*-
925
915
926
# Copyright (C) 2001-2017 Free Software Foundation, Inc.
916
# Copyright (C) 2001-2018 Free Software Foundation, Inc.
927
#
917
#
928
# This file is free software; the Free Software Foundation
918
# This file is free software; the Free Software Foundation
929
# gives unlimited permission to copy and/or distribute it,
919
# gives unlimited permission to copy and/or distribute it,
Lines 931-979 Link Here
931
921
932
# AM_MAKE_INCLUDE()
922
# AM_MAKE_INCLUDE()
933
# -----------------
923
# -----------------
934
# Check to see how make treats includes.
924
# Check whether make has an 'include' directive that can support all
925
# the idioms we need for our automatic dependency tracking code.
935
AC_DEFUN([AM_MAKE_INCLUDE],
926
AC_DEFUN([AM_MAKE_INCLUDE],
936
[am_make=${MAKE-make}
927
[AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive])
937
cat > confinc << 'END'
928
cat > confinc.mk << 'END'
938
am__doit:
929
am__doit:
939
	@echo this is the am__doit target
930
	@echo this is the am__doit target >confinc.out
940
.PHONY: am__doit
931
.PHONY: am__doit
941
END
932
END
942
# If we don't find an include directive, just comment out the code.
943
AC_MSG_CHECKING([for style of include used by $am_make])
944
am__include="#"
933
am__include="#"
945
am__quote=
934
am__quote=
946
_am_result=none
935
# BSD make does it like this.
947
# First try GNU make style include.
936
echo '.include "confinc.mk" # ignored' > confmf.BSD
948
echo "include confinc" > confmf
937
# Other make implementations (GNU, Solaris 10, AIX) do it like this.
949
# Ignore all kinds of additional output from 'make'.
938
echo 'include confinc.mk # ignored' > confmf.GNU
950
case `$am_make -s -f confmf 2> /dev/null` in #(
939
_am_result=no
951
*the\ am__doit\ target*)
940
for s in GNU BSD; do
952
  am__include=include
941
  AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out])
953
  am__quote=
942
  AS_CASE([$?:`cat confinc.out 2>/dev/null`],
954
  _am_result=GNU
943
      ['0:this is the am__doit target'],
955
  ;;
944
      [AS_CASE([$s],
956
esac
945
          [BSD], [am__include='.include' am__quote='"'],
957
# Now try BSD make style include.
946
          [am__include='include' am__quote=''])])
958
if test "$am__include" = "#"; then
947
  if test "$am__include" != "#"; then
959
   echo '.include "confinc"' > confmf
948
    _am_result="yes ($s style)"
960
   case `$am_make -s -f confmf 2> /dev/null` in #(
949
    break
961
   *the\ am__doit\ target*)
950
  fi
962
     am__include=.include
951
done
963
     am__quote="\""
952
rm -f confinc.* confmf.*
964
     _am_result=BSD
953
AC_MSG_RESULT([${_am_result}])
965
     ;;
954
AC_SUBST([am__include])])
966
   esac
955
AC_SUBST([am__quote])])
967
fi
968
AC_SUBST([am__include])
969
AC_SUBST([am__quote])
970
AC_MSG_RESULT([$_am_result])
971
rm -f confinc confmf
972
])
973
956
974
# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
957
# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
975
958
976
# Copyright (C) 1997-2017 Free Software Foundation, Inc.
959
# Copyright (C) 1997-2018 Free Software Foundation, Inc.
977
#
960
#
978
# This file is free software; the Free Software Foundation
961
# This file is free software; the Free Software Foundation
979
# gives unlimited permission to copy and/or distribute it,
962
# gives unlimited permission to copy and/or distribute it,
Lines 1012-1018 Link Here
1012
995
1013
# Helper functions for option handling.                     -*- Autoconf -*-
996
# Helper functions for option handling.                     -*- Autoconf -*-
1014
997
1015
# Copyright (C) 2001-2017 Free Software Foundation, Inc.
998
# Copyright (C) 2001-2018 Free Software Foundation, Inc.
1016
#
999
#
1017
# This file is free software; the Free Software Foundation
1000
# This file is free software; the Free Software Foundation
1018
# gives unlimited permission to copy and/or distribute it,
1001
# gives unlimited permission to copy and/or distribute it,
Lines 1041-1047 Link Here
1041
AC_DEFUN([_AM_IF_OPTION],
1024
AC_DEFUN([_AM_IF_OPTION],
1042
[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
1025
[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
1043
1026
1044
# Copyright (C) 1999-2017 Free Software Foundation, Inc.
1027
# Copyright (C) 1999-2018 Free Software Foundation, Inc.
1045
#
1028
#
1046
# This file is free software; the Free Software Foundation
1029
# This file is free software; the Free Software Foundation
1047
# gives unlimited permission to copy and/or distribute it,
1030
# gives unlimited permission to copy and/or distribute it,
Lines 1088-1094 Link Here
1088
# For backward compatibility.
1071
# For backward compatibility.
1089
AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
1072
AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
1090
1073
1091
# Copyright (C) 2001-2017 Free Software Foundation, Inc.
1074
# Copyright (C) 2001-2018 Free Software Foundation, Inc.
1092
#
1075
#
1093
# This file is free software; the Free Software Foundation
1076
# This file is free software; the Free Software Foundation
1094
# gives unlimited permission to copy and/or distribute it,
1077
# gives unlimited permission to copy and/or distribute it,
Lines 1107-1113 Link Here
1107
1090
1108
# Check to make sure that the build environment is sane.    -*- Autoconf -*-
1091
# Check to make sure that the build environment is sane.    -*- Autoconf -*-
1109
1092
1110
# Copyright (C) 1996-2017 Free Software Foundation, Inc.
1093
# Copyright (C) 1996-2018 Free Software Foundation, Inc.
1111
#
1094
#
1112
# This file is free software; the Free Software Foundation
1095
# This file is free software; the Free Software Foundation
1113
# gives unlimited permission to copy and/or distribute it,
1096
# gives unlimited permission to copy and/or distribute it,
Lines 1188-1194 Link Here
1188
rm -f conftest.file
1171
rm -f conftest.file
1189
])
1172
])
1190
1173
1191
# Copyright (C) 2009-2017 Free Software Foundation, Inc.
1174
# Copyright (C) 2009-2018 Free Software Foundation, Inc.
1192
#
1175
#
1193
# This file is free software; the Free Software Foundation
1176
# This file is free software; the Free Software Foundation
1194
# gives unlimited permission to copy and/or distribute it,
1177
# gives unlimited permission to copy and/or distribute it,
Lines 1248-1254 Link Here
1248
_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
1231
_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
1249
])
1232
])
1250
1233
1251
# Copyright (C) 2001-2017 Free Software Foundation, Inc.
1234
# Copyright (C) 2001-2018 Free Software Foundation, Inc.
1252
#
1235
#
1253
# This file is free software; the Free Software Foundation
1236
# This file is free software; the Free Software Foundation
1254
# gives unlimited permission to copy and/or distribute it,
1237
# gives unlimited permission to copy and/or distribute it,
Lines 1276-1282 Link Here
1276
INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
1259
INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
1277
AC_SUBST([INSTALL_STRIP_PROGRAM])])
1260
AC_SUBST([INSTALL_STRIP_PROGRAM])])
1278
1261
1279
# Copyright (C) 2006-2017 Free Software Foundation, Inc.
1262
# Copyright (C) 2006-2018 Free Software Foundation, Inc.
1280
#
1263
#
1281
# This file is free software; the Free Software Foundation
1264
# This file is free software; the Free Software Foundation
1282
# gives unlimited permission to copy and/or distribute it,
1265
# gives unlimited permission to copy and/or distribute it,
Lines 1295-1301 Link Here
1295
1278
1296
# Check how to create a tarball.                            -*- Autoconf -*-
1279
# Check how to create a tarball.                            -*- Autoconf -*-
1297
1280
1298
# Copyright (C) 2004-2017 Free Software Foundation, Inc.
1281
# Copyright (C) 2004-2018 Free Software Foundation, Inc.
1299
#
1282
#
1300
# This file is free software; the Free Software Foundation
1283
# This file is free software; the Free Software Foundation
1301
# gives unlimited permission to copy and/or distribute it,
1284
# gives unlimited permission to copy and/or distribute it,
(-)fdupes-2.1.2/commandidentifier.c (-1 / +1 lines)
Lines 1-4 Link Here
1
/* Copyright (c) 2018 Adrian Lopez
1
/* Copyright (c) 2018-2022 Adrian Lopez
2
2
3
   This software is provided 'as-is', without any express or implied
3
   This software is provided 'as-is', without any express or implied
4
   warranty. In no event will the authors be held liable for any damages
4
   warranty. In no event will the authors be held liable for any damages
(-)fdupes-2.1.2/commandidentifier.h (-1 / +1 lines)
Lines 1-4 Link Here
1
/* Copyright (c) 2018 Adrian Lopez
1
/* Copyright (c) 2018-2022 Adrian Lopez
2
2
3
   This software is provided 'as-is', without any express or implied
3
   This software is provided 'as-is', without any express or implied
4
   warranty. In no event will the authors be held liable for any damages
4
   warranty. In no event will the authors be held liable for any damages
(-)fdupes-2.1.2/compile (-1 / +1 lines)
Lines 3-9 Link Here
3
3
4
scriptversion=2012-10-14.11; # UTC
4
scriptversion=2012-10-14.11; # UTC
5
5
6
# Copyright (C) 1999-2014 Free Software Foundation, Inc.
6
# Copyright (C) 1999-2013 Free Software Foundation, Inc.
7
# Written by Tom Tromey <tromey@cygnus.com>.
7
# Written by Tom Tromey <tromey@cygnus.com>.
8
#
8
#
9
# This program is free software; you can redistribute it and/or modify
9
# This program is free software; you can redistribute it and/or modify
(-)fdupes-2.1.2/config.h.in (+9 lines)
Lines 1-5 Link Here
1
/* config.h.in.  Generated from configure.ac by autoheader.  */
1
/* config.h.in.  Generated from configure.ac by autoheader.  */
2
2
3
/* number of bytes to read per read call */
4
#undef CHUNK_SIZE
5
3
/* Define to 1 if you have the <getopt.h> header file. */
6
/* Define to 1 if you have the <getopt.h> header file. */
4
#undef HAVE_GETOPT_H
7
#undef HAVE_GETOPT_H
5
8
Lines 36-41 Link Here
36
/* fdupes help file */
39
/* fdupes help file */
37
#undef HELP_COMMAND_STRING
40
#undef HELP_COMMAND_STRING
38
41
42
/* size of command buffer (plain interactive mode only) */
43
#undef INPUT_SIZE
44
39
/* Do not compile against ncurses */
45
/* Do not compile against ncurses */
40
#undef NO_NCURSES
46
#undef NO_NCURSES
41
47
Lines 59-64 Link Here
59
65
60
/* Define to the version of this package. */
66
/* Define to the version of this package. */
61
#undef PACKAGE_VERSION
67
#undef PACKAGE_VERSION
68
69
/* maximum number of bytes to use when calculating partial hashes */
70
#undef PARTIAL_MD5_SIZE
62
71
63
/* PCRE2 Code Unit Width */
72
/* PCRE2 Code Unit Width */
64
#undef PCRE2_CODE_UNIT_WIDTH
73
#undef PCRE2_CODE_UNIT_WIDTH
(-)fdupes-2.1.2/configure (-114 / +125 lines)
Lines 1-6 Link Here
1
#! /bin/sh
1
#! /bin/sh
2
# Guess values for system-dependent variables and create Makefiles.
2
# Guess values for system-dependent variables and create Makefiles.
3
# Generated by GNU Autoconf 2.69 for fdupes 2.1.2.
3
# Generated by GNU Autoconf 2.69 for fdupes 2.2.1.
4
#
4
#
5
#
5
#
6
# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
6
# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
Lines 577-584 Link Here
577
# Identity of this package.
577
# Identity of this package.
578
PACKAGE_NAME='fdupes'
578
PACKAGE_NAME='fdupes'
579
PACKAGE_TARNAME='fdupes'
579
PACKAGE_TARNAME='fdupes'
580
PACKAGE_VERSION='2.1.2'
580
PACKAGE_VERSION='2.2.1'
581
PACKAGE_STRING='fdupes 2.1.2'
581
PACKAGE_STRING='fdupes 2.2.1'
582
PACKAGE_BUGREPORT=''
582
PACKAGE_BUGREPORT=''
583
PACKAGE_URL=''
583
PACKAGE_URL=''
584
584
Lines 622-629 Link Here
622
am__EXEEXT_TRUE
622
am__EXEEXT_TRUE
623
LTLIBOBJS
623
LTLIBOBJS
624
LIBOBJS
624
LIBOBJS
625
NO_NCURSES_FALSE
625
WITH_NCURSES_FALSE
626
NO_NCURSES_TRUE
626
WITH_NCURSES_TRUE
627
NCURSES_LIBS
627
NCURSES_LIBS
628
NCURSES_CFLAGS
628
NCURSES_CFLAGS
629
EGREP
629
EGREP
Lines 636-642 Link Here
636
AMDEPBACKSLASH
636
AMDEPBACKSLASH
637
AMDEP_FALSE
637
AMDEP_FALSE
638
AMDEP_TRUE
638
AMDEP_TRUE
639
am__quote
640
am__include
639
am__include
641
DEPDIR
640
DEPDIR
642
OBJEXT
641
OBJEXT
Lines 714-720 Link Here
714
PACKAGE_TARNAME
713
PACKAGE_TARNAME
715
PACKAGE_NAME
714
PACKAGE_NAME
716
PATH_SEPARATOR
715
PATH_SEPARATOR
717
SHELL'
716
SHELL
717
am__quote'
718
ac_subst_files=''
718
ac_subst_files=''
719
ac_user_opts='
719
ac_user_opts='
720
enable_option_checking
720
enable_option_checking
Lines 1286-1292 Link Here
1286
  # Omit some internal or obsolete options to make the list less imposing.
1286
  # Omit some internal or obsolete options to make the list less imposing.
1287
  # This message is too long to be a string in the A/UX 3.1 sh.
1287
  # This message is too long to be a string in the A/UX 3.1 sh.
1288
  cat <<_ACEOF
1288
  cat <<_ACEOF
1289
\`configure' configures fdupes 2.1.2 to adapt to many kinds of systems.
1289
\`configure' configures fdupes 2.2.1 to adapt to many kinds of systems.
1290
1290
1291
Usage: $0 [OPTION]... [VAR=VALUE]...
1291
Usage: $0 [OPTION]... [VAR=VALUE]...
1292
1292
Lines 1353-1359 Link Here
1353
1353
1354
if test -n "$ac_init_help"; then
1354
if test -n "$ac_init_help"; then
1355
  case $ac_init_help in
1355
  case $ac_init_help in
1356
     short | recursive ) echo "Configuration of fdupes 2.1.2:";;
1356
     short | recursive ) echo "Configuration of fdupes 2.2.1:";;
1357
   esac
1357
   esac
1358
  cat <<\_ACEOF
1358
  cat <<\_ACEOF
1359
1359
Lines 1458-1464 Link Here
1458
test -n "$ac_init_help" && exit $ac_status
1458
test -n "$ac_init_help" && exit $ac_status
1459
if $ac_init_version; then
1459
if $ac_init_version; then
1460
  cat <<\_ACEOF
1460
  cat <<\_ACEOF
1461
fdupes configure 2.1.2
1461
fdupes configure 2.2.1
1462
generated by GNU Autoconf 2.69
1462
generated by GNU Autoconf 2.69
1463
1463
1464
Copyright (C) 2012 Free Software Foundation, Inc.
1464
Copyright (C) 2012 Free Software Foundation, Inc.
Lines 1756-1762 Link Here
1756
This file contains any messages produced by compilers while
1756
This file contains any messages produced by compilers while
1757
running configure, to aid debugging if configure makes a mistake.
1757
running configure, to aid debugging if configure makes a mistake.
1758
1758
1759
It was created by fdupes $as_me 2.1.2, which was
1759
It was created by fdupes $as_me 2.2.1, which was
1760
generated by GNU Autoconf 2.69.  Invocation command line was
1760
generated by GNU Autoconf 2.69.  Invocation command line was
1761
1761
1762
  $ $0 $@
1762
  $ $0 $@
Lines 2105-2111 Link Here
2105
2105
2106
2106
2107
2107
2108
am__api_version='1.15'
2108
am__api_version='1.16'
2109
2109
2110
ac_aux_dir=
2110
ac_aux_dir=
2111
for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
2111
for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
Lines 2620-2626 Link Here
2620
2620
2621
# Define the identity of the package.
2621
# Define the identity of the package.
2622
 PACKAGE='fdupes'
2622
 PACKAGE='fdupes'
2623
 VERSION='2.1.2'
2623
 VERSION='2.2.1'
2624
2624
2625
2625
2626
cat >>confdefs.h <<_ACEOF
2626
cat >>confdefs.h <<_ACEOF
Lines 2650-2657 Link Here
2650
2650
2651
# For better backward compatibility.  To be removed once Automake 1.9.x
2651
# For better backward compatibility.  To be removed once Automake 1.9.x
2652
# dies out for good.  For more background, see:
2652
# dies out for good.  For more background, see:
2653
# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
2653
# <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
2654
# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
2654
# <https://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
2655
mkdir_p='$(MKDIR_P)'
2655
mkdir_p='$(MKDIR_P)'
2656
2656
2657
# We need awk for the "check" target (and possibly the TAP driver).  The
2657
# We need awk for the "check" target (and possibly the TAP driver).  The
Lines 2702-2708 Link Here
2702
Aborting the configuration process, to ensure you take notice of the issue.
2702
Aborting the configuration process, to ensure you take notice of the issue.
2703
2703
2704
You can download and install GNU coreutils to get an 'rm' implementation
2704
You can download and install GNU coreutils to get an 'rm' implementation
2705
that behaves properly: <http://www.gnu.org/software/coreutils/>.
2705
that behaves properly: <https://www.gnu.org/software/coreutils/>.
2706
2706
2707
If you want to complete the configuration process using your problematic
2707
If you want to complete the configuration process using your problematic
2708
'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
2708
'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
Lines 2851-2896 Link Here
2851
2851
2852
ac_config_commands="$ac_config_commands depfiles"
2852
ac_config_commands="$ac_config_commands depfiles"
2853
2853
2854
2854
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5
2855
am_make=${MAKE-make}
2855
$as_echo_n "checking whether ${MAKE-make} supports the include directive... " >&6; }
2856
cat > confinc << 'END'
2856
cat > confinc.mk << 'END'
2857
am__doit:
2857
am__doit:
2858
	@echo this is the am__doit target
2858
	@echo this is the am__doit target >confinc.out
2859
.PHONY: am__doit
2859
.PHONY: am__doit
2860
END
2860
END
2861
# If we don't find an include directive, just comment out the code.
2862
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
2863
$as_echo_n "checking for style of include used by $am_make... " >&6; }
2864
am__include="#"
2861
am__include="#"
2865
am__quote=
2862
am__quote=
2866
_am_result=none
2863
# BSD make does it like this.
2867
# First try GNU make style include.
2864
echo '.include "confinc.mk" # ignored' > confmf.BSD
2868
echo "include confinc" > confmf
2865
# Other make implementations (GNU, Solaris 10, AIX) do it like this.
2869
# Ignore all kinds of additional output from 'make'.
2866
echo 'include confinc.mk # ignored' > confmf.GNU
2870
case `$am_make -s -f confmf 2> /dev/null` in #(
2867
_am_result=no
2871
*the\ am__doit\ target*)
2868
for s in GNU BSD; do
2872
  am__include=include
2869
  { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5
2873
  am__quote=
2870
   (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5
2874
  _am_result=GNU
2871
   ac_status=$?
2875
  ;;
2872
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
2876
esac
2873
   (exit $ac_status); }
2877
# Now try BSD make style include.
2874
  case $?:`cat confinc.out 2>/dev/null` in #(
2878
if test "$am__include" = "#"; then
2875
  '0:this is the am__doit target') :
2879
   echo '.include "confinc"' > confmf
2876
    case $s in #(
2880
   case `$am_make -s -f confmf 2> /dev/null` in #(
2877
  BSD) :
2881
   *the\ am__doit\ target*)
2878
    am__include='.include' am__quote='"' ;; #(
2882
     am__include=.include
2879
  *) :
2883
     am__quote="\""
2880
    am__include='include' am__quote='' ;;
2884
     _am_result=BSD
2881
esac ;; #(
2882
  *) :
2885
     ;;
2883
     ;;
2886
   esac
2884
esac
2887
fi
2885
  if test "$am__include" != "#"; then
2886
    _am_result="yes ($s style)"
2887
    break
2888
  fi
2889
done
2890
rm -f confinc.* confmf.*
2891
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5
2892
$as_echo "${_am_result}" >&6; }
2888
2893
2889
2890
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
2891
$as_echo "$_am_result" >&6; }
2892
rm -f confinc confmf
2893
2894
# Check whether --enable-dependency-tracking was given.
2894
# Check whether --enable-dependency-tracking was given.
2895
if test "${enable_dependency_tracking+set}" = set; then :
2895
if test "${enable_dependency_tracking+set}" = set; then :
2896
  enableval=$enable_dependency_tracking;
2896
  enableval=$enable_dependency_tracking;
Lines 4679-4690 Link Here
4679
4679
4680
fi
4680
fi
4681
4681
4682
 if test x"$with_ncurses" = x"no"; then
4682
 if test x"$with_ncurses" != x"no"; then
4683
  NO_NCURSES_TRUE=
4683
  WITH_NCURSES_TRUE=
4684
  NO_NCURSES_FALSE='#'
4684
  WITH_NCURSES_FALSE='#'
4685
else
4685
else
4686
  NO_NCURSES_TRUE='#'
4686
  WITH_NCURSES_TRUE='#'
4687
  NO_NCURSES_FALSE=
4687
  WITH_NCURSES_FALSE=
4688
fi
4688
fi
4689
4689
4690
4690
Lines 4702-4707 Link Here
4702
$as_echo "#define _FILE_OFFSET_BITS 64" >>confdefs.h
4702
$as_echo "#define _FILE_OFFSET_BITS 64" >>confdefs.h
4703
4703
4704
4704
4705
4706
$as_echo "#define CHUNK_SIZE 8192" >>confdefs.h
4707
4708
4709
$as_echo "#define PARTIAL_MD5_SIZE 4096" >>confdefs.h
4710
4711
4712
$as_echo "#define INPUT_SIZE 256" >>confdefs.h
4713
4714
4705
ac_config_files="$ac_config_files Makefile"
4715
ac_config_files="$ac_config_files Makefile"
4706
4716
4707
ac_ext=c
4717
ac_ext=c
Lines 5563-5570 Link Here
5563
  as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
5573
  as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
5564
Usually this means the macro was only invoked conditionally." "$LINENO" 5
5574
Usually this means the macro was only invoked conditionally." "$LINENO" 5
5565
fi
5575
fi
5566
if test -z "${NO_NCURSES_TRUE}" && test -z "${NO_NCURSES_FALSE}"; then
5576
if test -z "${WITH_NCURSES_TRUE}" && test -z "${WITH_NCURSES_FALSE}"; then
5567
  as_fn_error $? "conditional \"NO_NCURSES\" was never defined.
5577
  as_fn_error $? "conditional \"WITH_NCURSES\" was never defined.
5568
Usually this means the macro was only invoked conditionally." "$LINENO" 5
5578
Usually this means the macro was only invoked conditionally." "$LINENO" 5
5569
fi
5579
fi
5570
if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
5580
if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
Lines 5968-5974 Link Here
5968
# report actual input values of CONFIG_FILES etc. instead of their
5978
# report actual input values of CONFIG_FILES etc. instead of their
5969
# values after options handling.
5979
# values after options handling.
5970
ac_log="
5980
ac_log="
5971
This file was extended by fdupes $as_me 2.1.2, which was
5981
This file was extended by fdupes $as_me 2.2.1, which was
5972
generated by GNU Autoconf 2.69.  Invocation command line was
5982
generated by GNU Autoconf 2.69.  Invocation command line was
5973
5983
5974
  CONFIG_FILES    = $CONFIG_FILES
5984
  CONFIG_FILES    = $CONFIG_FILES
Lines 6034-6040 Link Here
6034
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
6044
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
6035
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
6045
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
6036
ac_cs_version="\\
6046
ac_cs_version="\\
6037
fdupes config.status 2.1.2
6047
fdupes config.status 2.2.1
6038
configured by $0, generated by GNU Autoconf 2.69,
6048
configured by $0, generated by GNU Autoconf 2.69,
6039
  with options \\"\$ac_cs_config\\"
6049
  with options \\"\$ac_cs_config\\"
6040
6050
Lines 6153-6159 Link Here
6153
#
6163
#
6154
# INIT-COMMANDS
6164
# INIT-COMMANDS
6155
#
6165
#
6156
AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
6166
AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"
6157
6167
6158
_ACEOF
6168
_ACEOF
6159
6169
Lines 6765-6793 Link Here
6765
  # Older Autoconf quotes --file arguments for eval, but not when files
6775
  # Older Autoconf quotes --file arguments for eval, but not when files
6766
  # are listed without --file.  Let's play safe and only enable the eval
6776
  # are listed without --file.  Let's play safe and only enable the eval
6767
  # if we detect the quoting.
6777
  # if we detect the quoting.
6768
  case $CONFIG_FILES in
6778
  # TODO: see whether this extra hack can be removed once we start
6769
  *\'*) eval set x "$CONFIG_FILES" ;;
6779
  # requiring Autoconf 2.70 or later.
6770
  *)   set x $CONFIG_FILES ;;
6780
  case $CONFIG_FILES in #(
6771
  esac
6781
  *\'*) :
6782
    eval set x "$CONFIG_FILES" ;; #(
6783
  *) :
6784
    set x $CONFIG_FILES ;; #(
6785
  *) :
6786
     ;;
6787
esac
6772
  shift
6788
  shift
6773
  for mf
6789
  # Used to flag and report bootstrapping failures.
6790
  am_rc=0
6791
  for am_mf
6774
  do
6792
  do
6775
    # Strip MF so we end up with the name of the file.
6793
    # Strip MF so we end up with the name of the file.
6776
    mf=`echo "$mf" | sed -e 's/:.*$//'`
6794
    am_mf=`$as_echo "$am_mf" | sed -e 's/:.*$//'`
6777
    # Check whether this is an Automake generated Makefile or not.
6795
    # Check whether this is an Automake generated Makefile which includes
6778
    # We used to match only the files named 'Makefile.in', but
6796
    # dependency-tracking related rules and includes.
6779
    # some people rename them; so instead we look at the file content.
6797
    # Grep'ing the whole file directly is not great: AIX grep has a line
6780
    # Grep'ing the first line is not enough: some people post-process
6781
    # each Makefile.in and add a new line on top of each file to say so.
6782
    # Grep'ing the whole file is not good either: AIX grep has a line
6783
    # limit of 2048, but all sed's we know have understand at least 4000.
6798
    # limit of 2048, but all sed's we know have understand at least 4000.
6784
    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
6799
    sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \
6785
      dirpart=`$as_dirname -- "$mf" ||
6800
      || continue
6786
$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
6801
    am_dirpart=`$as_dirname -- "$am_mf" ||
6787
	 X"$mf" : 'X\(//\)[^/]' \| \
6802
$as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
6788
	 X"$mf" : 'X\(//\)$' \| \
6803
	 X"$am_mf" : 'X\(//\)[^/]' \| \
6789
	 X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
6804
	 X"$am_mf" : 'X\(//\)$' \| \
6790
$as_echo X"$mf" |
6805
	 X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
6806
$as_echo X"$am_mf" |
6791
    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
6807
    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
6792
	    s//\1/
6808
	    s//\1/
6793
	    q
6809
	    q
Lines 6805-6857 Link Here
6805
	    q
6821
	    q
6806
	  }
6822
	  }
6807
	  s/.*/./; q'`
6823
	  s/.*/./; q'`
6808
    else
6824
    am_filepart=`$as_basename -- "$am_mf" ||
6809
      continue
6825
$as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \
6810
    fi
6826
	 X"$am_mf" : 'X\(//\)$' \| \
6811
    # Extract the definition of DEPDIR, am__include, and am__quote
6827
	 X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
6812
    # from the Makefile without running 'make'.
6828
$as_echo X/"$am_mf" |
6813
    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
6829
    sed '/^.*\/\([^/][^/]*\)\/*$/{
6814
    test -z "$DEPDIR" && continue
6815
    am__include=`sed -n 's/^am__include = //p' < "$mf"`
6816
    test -z "$am__include" && continue
6817
    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
6818
    # Find all dependency output files, they are included files with
6819
    # $(DEPDIR) in their names.  We invoke sed twice because it is the
6820
    # simplest approach to changing $(DEPDIR) to its actual value in the
6821
    # expansion.
6822
    for file in `sed -n "
6823
      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
6824
	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
6825
      # Make sure the directory exists.
6826
      test -f "$dirpart/$file" && continue
6827
      fdir=`$as_dirname -- "$file" ||
6828
$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
6829
	 X"$file" : 'X\(//\)[^/]' \| \
6830
	 X"$file" : 'X\(//\)$' \| \
6831
	 X"$file" : 'X\(/\)' \| . 2>/dev/null ||
6832
$as_echo X"$file" |
6833
    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
6834
	    s//\1/
6830
	    s//\1/
6835
	    q
6831
	    q
6836
	  }
6832
	  }
6837
	  /^X\(\/\/\)[^/].*/{
6833
	  /^X\/\(\/\/\)$/{
6838
	    s//\1/
6834
	    s//\1/
6839
	    q
6835
	    q
6840
	  }
6836
	  }
6841
	  /^X\(\/\/\)$/{
6837
	  /^X\/\(\/\).*/{
6842
	    s//\1/
6838
	    s//\1/
6843
	    q
6839
	    q
6844
	  }
6840
	  }
6845
	  /^X\(\/\).*/{
6846
	    s//\1/
6847
	    q
6848
	  }
6849
	  s/.*/./; q'`
6841
	  s/.*/./; q'`
6850
      as_dir=$dirpart/$fdir; as_fn_mkdir_p
6842
    { echo "$as_me:$LINENO: cd "$am_dirpart" \
6851
      # echo "creating $dirpart/$file"
6843
      && sed -e '/# am--include-marker/d' "$am_filepart" \
6852
      echo '# dummy' > "$dirpart/$file"
6844
        | $MAKE -f - am--depfiles" >&5
6853
    done
6845
   (cd "$am_dirpart" \
6846
      && sed -e '/# am--include-marker/d' "$am_filepart" \
6847
        | $MAKE -f - am--depfiles) >&5 2>&5
6848
   ac_status=$?
6849
   echo "$as_me:$LINENO: \$? = $ac_status" >&5
6850
   (exit $ac_status); } || am_rc=$?
6854
  done
6851
  done
6852
  if test $am_rc -ne 0; then
6853
    { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
6854
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
6855
as_fn_error $? "Something went wrong bootstrapping makefile fragments
6856
    for automatic dependency tracking.  Try re-running configure with the
6857
    '--disable-dependency-tracking' option to at least be able to build
6858
    the package (albeit without support for automatic dependency tracking).
6859
See \`config.log' for more details" "$LINENO" 5; }
6860
  fi
6861
  { am_dirpart=; unset am_dirpart;}
6862
  { am_filepart=; unset am_filepart;}
6863
  { am_mf=; unset am_mf;}
6864
  { am_rc=; unset am_rc;}
6865
  rm -f conftest-deps.mk
6855
}
6866
}
6856
 ;;
6867
 ;;
6857
6868
(-)fdupes-2.1.2/configure.ac (-2 / +6 lines)
Lines 1-4 Link Here
1
AC_INIT([fdupes], [2.1.2])
1
AC_INIT([fdupes], [2.2.1])
2
2
3
AM_INIT_AUTOMAKE([foreign subdir-objects])
3
AM_INIT_AUTOMAKE([foreign subdir-objects])
4
4
Lines 27-33 Link Here
27
	[AC_DEFINE([NO_NCURSES], [], [Do not compile against ncurses])]
27
	[AC_DEFINE([NO_NCURSES], [], [Do not compile against ncurses])]
28
	)
28
	)
29
29
30
AM_CONDITIONAL([NO_NCURSES], [test x"$with_ncurses" = x"no"])
30
AM_CONDITIONAL([WITH_NCURSES], [test x"$with_ncurses" != x"no"])
31
31
32
unescaped_program_transform_name=`echo "${program_transform_name}"|sed -e "s&\\\\$\\\\$&\\\\$&g"`
32
unescaped_program_transform_name=`echo "${program_transform_name}"|sed -e "s&\\\\$\\\\$&\\\\$&g"`
33
transformed_program_name=`echo "${PACKAGE_NAME}"|sed -e "${unescaped_program_transform_name}"|sed -e "s&\\\\\\\\&\\\\\\\\\\\\\\\\&g"`
33
transformed_program_name=`echo "${PACKAGE_NAME}"|sed -e "${unescaped_program_transform_name}"|sed -e "s&\\\\\\\\&\\\\\\\\\\\\\\\\&g"`
Lines 36-41 Link Here
36
AC_DEFINE_UNQUOTED([HELP_COMMAND_STRING], "man 7 ${transformed_manpage_name}", [fdupes help file])
36
AC_DEFINE_UNQUOTED([HELP_COMMAND_STRING], "man 7 ${transformed_manpage_name}", [fdupes help file])
37
37
38
AC_DEFINE([_FILE_OFFSET_BITS], [64], [allow fdupes to handle files greater than (2<<31)-1 bytes])
38
AC_DEFINE([_FILE_OFFSET_BITS], [64], [allow fdupes to handle files greater than (2<<31)-1 bytes])
39
40
AC_DEFINE([CHUNK_SIZE], [8192], [number of bytes to read per read call])
41
AC_DEFINE([PARTIAL_MD5_SIZE], [4096], [maximum number of bytes to use when calculating partial hashes])
42
AC_DEFINE([INPUT_SIZE], [256], [size of command buffer (plain interactive mode only)])
39
43
40
AC_CONFIG_FILES([Makefile])
44
AC_CONFIG_FILES([Makefile])
41
AC_PROG_CC
45
AC_PROG_CC
(-)fdupes-2.1.2/depcomp (-3 / +3 lines)
Lines 1-9 Link Here
1
#! /bin/sh
1
#! /bin/sh
2
# depcomp - compile a program generating dependencies as side-effects
2
# depcomp - compile a program generating dependencies as side-effects
3
3
4
scriptversion=2016-01-11.22; # UTC
4
scriptversion=2013-05-30.07; # UTC
5
5
6
# Copyright (C) 1999-2017 Free Software Foundation, Inc.
6
# Copyright (C) 1999-2013 Free Software Foundation, Inc.
7
7
8
# This program is free software; you can redistribute it and/or modify
8
# This program is free software; you can redistribute it and/or modify
9
# it under the terms of the GNU General Public License as published by
9
# it under the terms of the GNU General Public License as published by
Lines 786-791 Link Here
786
# eval: (add-hook 'write-file-hooks 'time-stamp)
786
# eval: (add-hook 'write-file-hooks 'time-stamp)
787
# time-stamp-start: "scriptversion="
787
# time-stamp-start: "scriptversion="
788
# time-stamp-format: "%:y-%02m-%02d.%02H"
788
# time-stamp-format: "%:y-%02m-%02d.%02H"
789
# time-stamp-time-zone: "UTC0"
789
# time-stamp-time-zone: "UTC"
790
# time-stamp-end: "; # UTC"
790
# time-stamp-end: "; # UTC"
791
# End:
791
# End:
(-)fdupes-2.1.2/dir.c (-1 / +1 lines)
Lines 1-4 Link Here
1
/* Copyright (c) 2018 Adrian Lopez
1
/* Copyright (c) 2018-2022 Adrian Lopez
2
2
3
   This software is provided 'as-is', without any express or implied
3
   This software is provided 'as-is', without any express or implied
4
   warranty. In no event will the authors be held liable for any damages
4
   warranty. In no event will the authors be held liable for any damages
(-)fdupes-2.1.2/dir.h (-1 / +1 lines)
Lines 1-4 Link Here
1
/* Copyright (c) 2018 Adrian Lopez
1
/* Copyright (c) 2018-2022 Adrian Lopez
2
2
3
   This software is provided 'as-is', without any express or implied
3
   This software is provided 'as-is', without any express or implied
4
   warranty. In no event will the authors be held liable for any damages
4
   warranty. In no event will the authors be held liable for any damages
(-)fdupes-2.1.2/errormsg.c (-1 / +1 lines)
Lines 1-4 Link Here
1
/* Copyright (c) 2018 Adrian Lopez
1
/* Copyright (c) 2018-2022 Adrian Lopez
2
2
3
   This software is provided 'as-is', without any express or implied
3
   This software is provided 'as-is', without any express or implied
4
   warranty. In no event will the authors be held liable for any damages
4
   warranty. In no event will the authors be held liable for any damages
(-)fdupes-2.1.2/errormsg.h (-1 / +1 lines)
Lines 1-4 Link Here
1
/* Copyright (c) 2018 Adrian Lopez
1
/* Copyright (c) 2018-2022 Adrian Lopez
2
2
3
   This software is provided 'as-is', without any express or implied
3
   This software is provided 'as-is', without any express or implied
4
   warranty. In no event will the authors be held liable for any damages
4
   warranty. In no event will the authors be held liable for any damages
(-)fdupes-2.1.2/fdupes.1 (-2 / +6 lines)
Lines 34-43 Link Here
34
treated as non-duplicates; this option will change this behavior
34
treated as non-duplicates; this option will change this behavior
35
.TP
35
.TP
36
.B -G --minsize\fR=\fISIZE\fR
36
.B -G --minsize\fR=\fISIZE\fR
37
consider only files greater than or equal to SIZE
37
consider only files greater than or equal to SIZE in bytes
38
.TP
38
.TP
39
.B -L --maxsize=\fR=\fISIZE\fR
39
.B -L --maxsize=\fR=\fISIZE\fR
40
consider only files less than or equal to SIZE
40
consider only files less than or equal to SIZE in bytes
41
.TP
41
.TP
42
.B -n --noempty
42
.B -n --noempty
43
exclude zero-length files from consideration
43
exclude zero-length files from consideration
Lines 67-72 Link Here
67
prompt user for files to preserve, deleting all others (see
67
prompt user for files to preserve, deleting all others (see
68
.B CAVEATS
68
.B CAVEATS
69
below)
69
below)
70
.TP
71
.B -D --deferconfirmation
72
in interactive mode, defer byte-for-byte confirmation of
73
duplicates until just before file deletion
70
.TP
74
.TP
71
.B -P --plain
75
.B -P --plain
72
with --delete, use line-based prompt (as with older versions of
76
with --delete, use line-based prompt (as with older versions of
(-)fdupes-2.1.2/fdupes.c (-87 / +105 lines)
Lines 1-4 Link Here
1
/* FDUPES Copyright (c) 1999-2018 Adrian Lopez
1
/* FDUPES Copyright (c) 1999-2022 Adrian Lopez
2
2
3
   Permission is hereby granted, free of charge, to any person
3
   Permission is hereby granted, free of charge, to any person
4
   obtaining a copy of this software and associated documentation files
4
   obtaining a copy of this software and associated documentation files
Lines 44-53 Link Here
44
#include "ncurses-interface.h"
44
#include "ncurses-interface.h"
45
#endif
45
#endif
46
#include "fdupes.h"
46
#include "fdupes.h"
47
#include "confirmmatch.h"
47
#include "errormsg.h"
48
#include "errormsg.h"
48
#include "log.h"
49
#include "log.h"
49
#include "sigint.h"
50
#include "sigint.h"
50
#include "flags.h"
51
#include "flags.h"
52
#include "removeifnotchanged.h"
51
53
52
long long minsize = -1;
54
long long minsize = -1;
53
long long maxsize = -1;
55
long long maxsize = -1;
Lines 62-93 Link Here
62
64
63
ordertype_t ordertype = ORDER_MTIME;
65
ordertype_t ordertype = ORDER_MTIME;
64
66
65
#define CHUNK_SIZE 8192
66
67
#define INPUT_SIZE 256
68
69
#define PARTIAL_MD5_SIZE 4096
70
71
#define MD5_DIGEST_LENGTH 16
67
#define MD5_DIGEST_LENGTH 16
72
68
73
/* 
74
75
TODO: Partial sums (for working with very large files).
76
77
typedef struct _signature
78
{
79
  md5_state_t state;
80
  md5_byte_t  digest[16];
81
} signature_t;
82
83
typedef struct _signatures
84
{
85
  int         num_signatures;
86
  signature_t *signatures;
87
} signatures_t;
88
89
*/
90
91
typedef struct _filetree {
69
typedef struct _filetree {
92
  file_t *file; 
70
  file_t *file; 
93
  struct _filetree *left;
71
  struct _filetree *left;
Lines 304-310 Link Here
304
      }
282
      }
305
283
306
      /* ignore logfile */
284
      /* ignore logfile */
307
      if (info.st_dev == logfile_status->st_dev && info.st_ino == logfile_status->st_ino)
285
      if (logfile_status != 0 && info.st_dev == logfile_status->st_dev && info.st_ino == logfile_status->st_ino)
308
      {
286
      {
309
        free(newfile->d_name);
287
        free(newfile->d_name);
310
        free(newfile);
288
        free(newfile);
Lines 628-634 Link Here
628
    }
606
    }
629
607
630
    cmpresult = md5cmp(file->crcpartial, checktree->file->crcpartial);
608
    cmpresult = md5cmp(file->crcpartial, checktree->file->crcpartial);
631
    /*if (cmpresult != 0) errormsg("    on %s vs %s\n", file->d_name, checktree->file->d_name);*/
632
609
633
    if (cmpresult == 0) {
610
    if (cmpresult == 0) {
634
      if (checktree->file->crcsignature == NULL) {
611
      if (checktree->file->crcsignature == NULL) {
Lines 656-666 Link Here
656
      }
633
      }
657
634
658
      cmpresult = md5cmp(file->crcsignature, checktree->file->crcsignature);
635
      cmpresult = md5cmp(file->crcsignature, checktree->file->crcsignature);
659
      /*if (cmpresult != 0) errormsg("P   on %s vs %s\n", 
660
          file->d_name, checktree->file->d_name);
661
      else errormsg("P F on %s vs %s\n", file->d_name,
662
          checktree->file->d_name);
663
      printf("%s matches %s\n", file->d_name, checktree->file->d_name);*/
664
    }
636
    }
665
  }
637
  }
666
638
Lines 684-713 Link Here
684
  }
656
  }
685
}
657
}
686
658
687
/* Do a bit-for-bit comparison in case two different files produce the 
688
   same signature. Unlikely, but better safe than sorry. */
689
690
int confirmmatch(FILE *file1, FILE *file2)
691
{
692
  unsigned char c1[CHUNK_SIZE];
693
  unsigned char c2[CHUNK_SIZE];
694
  size_t r1;
695
  size_t r2;
696
  
697
  fseek(file1, 0, SEEK_SET);
698
  fseek(file2, 0, SEEK_SET);
699
700
  do {
701
    r1 = fread(c1, sizeof(unsigned char), sizeof(c1), file1);
702
    r2 = fread(c2, sizeof(unsigned char), sizeof(c2), file2);
703
704
    if (r1 != r2) return 0; /* file lengths are different */
705
    if (memcmp (c1, c2, r1)) return 0; /* file contents are different */
706
  } while (r2);
707
  
708
  return 1;
709
}
710
711
void summarizematches(file_t *files)
659
void summarizematches(file_t *files)
712
{
660
{
713
  int numsets = 0;
661
  int numsets = 0;
Lines 843-848 Link Here
843
  file_t *curfile;
791
  file_t *curfile;
844
  file_t **dupelist;
792
  file_t **dupelist;
845
  int *preserve;
793
  int *preserve;
794
  int firstpreserved;
846
  char *preservestr;
795
  char *preservestr;
847
  char *token;
796
  char *token;
848
  char *tstr;
797
  char *tstr;
Lines 853-858 Link Here
853
  int i;
802
  int i;
854
  struct log_info *loginfo;
803
  struct log_info *loginfo;
855
  int log_error;
804
  int log_error;
805
  FILE *file1;
806
  FILE *file2;
807
  int ismatch;
808
  char *errorstring;
856
809
857
  curfile = files;
810
  curfile = files;
858
  
811
  
Lines 1022-1039 Link Here
1022
            log_file_remaining(loginfo, dupelist[x]->d_name);
975
            log_file_remaining(loginfo, dupelist[x]->d_name);
1023
        }
976
        }
1024
	else {
977
	else {
1025
	  if (remove(dupelist[x]->d_name) == 0) {
978
    if (ISFLAG(flags, F_DEFERCONFIRMATION))
1026
	    printf("   [-] %s\n", dupelist[x]->d_name);
979
    {
980
      firstpreserved = 0;
981
      for (i = 1; i <= counter; ++i)
982
      {
983
        if (preserve[i])
984
        {
985
          firstpreserved = i;
986
          break;
987
        }
988
      }
1027
989
1028
            if (loginfo)
990
      file1 = fopen(dupelist[x]->d_name, "rb");
1029
              log_file_deleted(loginfo, dupelist[x]->d_name);
991
      file2 = fopen(dupelist[firstpreserved]->d_name, "rb");
1030
	  } else {
1031
	    printf("   [!] %s ", dupelist[x]->d_name);
1032
	    printf("-- unable to delete file!\n");
1033
992
1034
            if (loginfo)
993
      if (file1 && file2)
1035
              log_file_remaining(loginfo, dupelist[x]->d_name);
994
        ismatch = confirmmatch(file1, file2);
1036
	  }
995
      else
996
        ismatch = 0;
997
998
      if (file2)
999
        fclose(file2);
1000
1001
      if (file1)
1002
        fclose(file1);
1003
    }
1004
    else
1005
    {
1006
      ismatch = 1;
1007
    }
1008
1009
    if (ismatch) {
1010
      if (removeifnotchanged(dupelist[x], &errorstring) == 0) {
1011
        printf("   [-] %s\n", dupelist[x]->d_name);
1012
1013
        if (loginfo)
1014
          log_file_deleted(loginfo, dupelist[x]->d_name);
1015
      }
1016
      else {
1017
        printf("   [!] %s ", dupelist[x]->d_name);
1018
        printf("-- unable to delete file: %s!\n", errorstring);
1019
1020
        if (loginfo)
1021
          log_file_remaining(loginfo, dupelist[x]->d_name);
1022
      }
1023
    }
1024
    else {
1025
      printf("   [!] %s\n", dupelist[x]->d_name);
1026
      printf(" -- unable to confirm match; file not deleted!\n");
1027
1028
      if (loginfo)
1029
        log_file_remaining(loginfo, dupelist[x]->d_name);
1030
    }
1037
	}
1031
	}
1038
      }
1032
      }
1039
      printf("\n");
1033
      printf("\n");
Lines 1133-1143 Link Here
1133
  }
1127
  }
1134
}
1128
}
1135
1129
1136
void deletesuccessor(file_t **existing, file_t *duplicate, 
1130
void deletesuccessor(file_t **existing, file_t *duplicate, int matchconfirmed,
1137
      int (*comparef)(file_t *f1, file_t *f2), struct log_info *loginfo)
1131
      int (*comparef)(file_t *f1, file_t *f2), struct log_info *loginfo)
1138
{
1132
{
1139
  file_t *to_keep;
1133
  file_t *to_keep;
1140
  file_t *to_delete;
1134
  file_t *to_delete;
1135
  char *errorstring;
1141
1136
1142
  if (comparef(duplicate, *existing) >= 0)
1137
  if (comparef(duplicate, *existing) >= 0)
1143
  {
1138
  {
Lines 1162-1176 Link Here
1162
  if (loginfo)
1157
  if (loginfo)
1163
    log_file_remaining(loginfo, to_keep->d_name);
1158
    log_file_remaining(loginfo, to_keep->d_name);
1164
1159
1165
  if (remove(to_delete->d_name) == 0) {
1160
  if (matchconfirmed)
1166
    printf("   [-] %s\n", to_delete->d_name);
1161
  {
1162
    if (removeifnotchanged(to_delete, &errorstring) == 0) {
1163
      printf("   [-] %s\n", to_delete->d_name);
1167
1164
1168
    if (loginfo)
1165
      if (loginfo)
1169
      log_file_deleted(loginfo, to_delete->d_name);
1166
        log_file_deleted(loginfo, to_delete->d_name);
1170
  } else {
1167
    } else {
1171
    printf("   [!] %s ", to_delete->d_name);
1168
      printf("   [!] %s ", to_delete->d_name);
1172
    printf("-- unable to delete file!\n");
1169
      printf("-- unable to delete file: %s!\n", errorstring);
1173
1170
1171
      if (loginfo)
1172
        log_file_remaining(loginfo, to_delete->d_name);
1173
    }
1174
  }
1175
  else
1176
  {
1177
    printf("   [!] %s\n", to_delete->d_name);
1178
    printf(" -- unable to confirm match; file not deleted!\n");
1179
1174
    if (loginfo)
1180
    if (loginfo)
1175
      log_file_remaining(loginfo, to_delete->d_name);
1181
      log_file_remaining(loginfo, to_delete->d_name);
1176
  }
1182
  }
Lines 1213-1218 Link Here
1213
  printf("                         with -s or --symlinks, or when specifying a\n");
1219
  printf("                         with -s or --symlinks, or when specifying a\n");
1214
  printf("                         particular directory more than once; refer to the\n");
1220
  printf("                         particular directory more than once; refer to the\n");
1215
  printf("                         fdupes documentation for additional information\n");
1221
  printf("                         fdupes documentation for additional information\n");
1222
  printf(" -D --deferconfirmation  in interactive mode, defer byte-for-byte confirmation\n");
1223
  printf("                         of duplicates until just before file deletion\n");
1216
#ifndef NO_NCURSES
1224
#ifndef NO_NCURSES
1217
  printf(" -P --plain              with --delete, use line-based prompt (as with older\n");
1225
  printf(" -P --plain              with --delete, use line-based prompt (as with older\n");
1218
  printf("                         versions of fdupes) instead of screen-mode interface\n");
1226
  printf("                         versions of fdupes) instead of screen-mode interface\n");
Lines 1283-1288 Link Here
1283
    { "order", 1, 0, 'o' },
1291
    { "order", 1, 0, 'o' },
1284
    { "reverse", 0, 0, 'i' },
1292
    { "reverse", 0, 0, 'i' },
1285
    { "log", 1, 0, 'l' },
1293
    { "log", 1, 0, 'l' },
1294
    { "deferconfirmation", 0, 0, 'D' },
1286
    { 0, 0, 0, 0 }
1295
    { 0, 0, 0, 0 }
1287
  };
1296
  };
1288
#define GETOPT getopt_long
1297
#define GETOPT getopt_long
Lines 1296-1302 Link Here
1296
1305
1297
  oldargv = cloneargs(argc, argv);
1306
  oldargv = cloneargs(argc, argv);
1298
1307
1299
  while ((opt = GETOPT(argc, argv, "frRq1StsHG:L:nAdPvhNImpo:il:"
1308
  while ((opt = GETOPT(argc, argv, "frRq1StsHG:L:nAdPvhNImpo:il:D"
1300
#ifdef HAVE_GETOPT_H
1309
#ifdef HAVE_GETOPT_H
1301
          , long_options, NULL
1310
          , long_options, NULL
1302
#endif
1311
#endif
Lines 1393-1398 Link Here
1393
    case 'l':
1402
    case 'l':
1394
      logfile = optarg;
1403
      logfile = optarg;
1395
      break;
1404
      break;
1405
    case 'D':
1406
      SETFLAG(flags, F_DEFERCONFIRMATION);
1407
      break;
1396
    default:
1408
    default:
1397
      fprintf(stderr, "Try `fdupes --help' for more information.\n");
1409
      fprintf(stderr, "Try `fdupes --help' for more information.\n");
1398
      exit(1);
1410
      exit(1);
Lines 1414-1419 Link Here
1414
    exit(1);
1426
    exit(1);
1415
  }
1427
  }
1416
1428
1429
  if (ISFLAG(flags, F_DEFERCONFIRMATION) && (!ISFLAG(flags, F_DELETEFILES) || ISFLAG(flags, F_NOPROMPT)))
1430
  {
1431
    errormsg("--deferconfirmation only works with interactive deletion modes\n");
1432
    exit(1);
1433
  }
1434
1417
  if (!ISFLAG(flags, F_DELETEFILES))
1435
  if (!ISFLAG(flags, F_DELETEFILES))
1418
    logfile = 0;
1436
    logfile = 0;
1419
1437
Lines 1450-1465 Link Here
1450
1468
1451
    /* F_RECURSE is not set for directories before --recurse: */
1469
    /* F_RECURSE is not set for directories before --recurse: */
1452
    for (x = optind; x < firstrecurse; x++)
1470
    for (x = optind; x < firstrecurse; x++)
1453
      filecount += grokdir(argv[x], &files, &logfile_status);
1471
      filecount += grokdir(argv[x], &files, logfile ? &logfile_status : 0);
1454
1472
1455
    /* Set F_RECURSE for directories after --recurse: */
1473
    /* Set F_RECURSE for directories after --recurse: */
1456
    SETFLAG(flags, F_RECURSE);
1474
    SETFLAG(flags, F_RECURSE);
1457
1475
1458
    for (x = firstrecurse; x < argc; x++)
1476
    for (x = firstrecurse; x < argc; x++)
1459
      filecount += grokdir(argv[x], &files, &logfile_status);
1477
      filecount += grokdir(argv[x], &files, logfile ? &logfile_status : 0);
1460
  } else {
1478
  } else {
1461
    for (x = optind; x < argc; x++)
1479
    for (x = optind; x < argc; x++)
1462
      filecount += grokdir(argv[x], &files, &logfile_status);
1480
      filecount += grokdir(argv[x], &files, logfile ? &logfile_status : 0);
1463
  }
1481
  }
1464
1482
1465
  if (!files) {
1483
  if (!files) {
Lines 1489-1507 Link Here
1489
	continue;
1507
	continue;
1490
      }
1508
      }
1491
1509
1492
      if (confirmmatch(file1, file2)) {
1510
      if (ISFLAG(flags, F_DELETEFILES) && ISFLAG(flags, F_IMMEDIATE))
1493
        if (ISFLAG(flags, F_DELETEFILES) && ISFLAG(flags, F_IMMEDIATE))
1511
      {
1494
          deletesuccessor(match, curfile,
1512
          deletesuccessor(match, curfile, confirmmatch(file1, file2),
1495
              ordertype == ORDER_MTIME ? sort_pairs_by_mtime :
1513
              ordertype == ORDER_MTIME ? sort_pairs_by_mtime :
1496
              ordertype == ORDER_CTIME ? sort_pairs_by_ctime :
1514
              ordertype == ORDER_CTIME ? sort_pairs_by_ctime :
1497
                                         sort_pairs_by_filename, loginfo );
1515
                                         sort_pairs_by_filename, loginfo );
1498
        else
1499
          registerpair(match, curfile,
1500
              ordertype == ORDER_MTIME ? sort_pairs_by_mtime :
1501
              ordertype == ORDER_CTIME ? sort_pairs_by_ctime :
1502
                                         sort_pairs_by_filename );
1503
      }
1516
      }
1504
      
1517
      else if (ISFLAG(flags, F_DEFERCONFIRMATION) || confirmmatch(file1, file2))
1518
        registerpair(match, curfile,
1519
            ordertype == ORDER_MTIME ? sort_pairs_by_mtime :
1520
            ordertype == ORDER_CTIME ? sort_pairs_by_ctime :
1521
                                       sort_pairs_by_filename );
1522
1505
      fclose(file1);
1523
      fclose(file1);
1506
      fclose(file2);
1524
      fclose(file2);
1507
    }
1525
    }
(-)fdupes-2.1.2/fdupes.h (-1 / +1 lines)
Lines 1-4 Link Here
1
/* FDUPES Copyright (c) 2018 Adrian Lopez
1
/* FDUPES Copyright (c) 2018-2022 Adrian Lopez
2
2
3
   Permission is hereby granted, free of charge, to any person
3
   Permission is hereby granted, free of charge, to any person
4
   obtaining a copy of this software and associated documentation files
4
   obtaining a copy of this software and associated documentation files
(-)fdupes-2.1.2/filegroup.h (-1 / +1 lines)
Lines 1-4 Link Here
1
/* FDUPES Copyright (c) 2018 Adrian Lopez
1
/* FDUPES Copyright (c) 2018-2022 Adrian Lopez
2
2
3
   Permission is hereby granted, free of charge, to any person
3
   Permission is hereby granted, free of charge, to any person
4
   obtaining a copy of this software and associated documentation files
4
   obtaining a copy of this software and associated documentation files
(-)fdupes-2.1.2/flags.h (-1 / +2 lines)
Lines 22-28 Link Here
22
#define F_IMMEDIATE         0x8000
22
#define F_IMMEDIATE         0x8000
23
#define F_PLAINPROMPT       0x10000
23
#define F_PLAINPROMPT       0x10000
24
#define F_SHOWTIME          0x20000
24
#define F_SHOWTIME          0x20000
25
#define F_DEFERCONFIRMATION 0x40000
25
26
26
extern unsigned long flags;
27
extern unsigned long flags;
27
28
28
#endif
29
#endif
(-)fdupes-2.1.2/fmatch.c (-1 / +1 lines)
Lines 1-4 Link Here
1
/* Copyright (c) 2018 Adrian Lopez
1
/* Copyright (c) 2018-2022 Adrian Lopez
2
2
3
   This software is provided 'as-is', without any express or implied
3
   This software is provided 'as-is', without any express or implied
4
   warranty. In no event will the authors be held liable for any damages
4
   warranty. In no event will the authors be held liable for any damages
(-)fdupes-2.1.2/fmatch.h (-1 / +1 lines)
Lines 1-4 Link Here
1
/* Copyright (c) 2018 Adrian Lopez
1
/* Copyright (c) 2018-2022 Adrian Lopez
2
2
3
   This software is provided 'as-is', without any express or implied
3
   This software is provided 'as-is', without any express or implied
4
   warranty. In no event will the authors be held liable for any damages
4
   warranty. In no event will the authors be held liable for any damages
(-)fdupes-2.1.2/install-sh (-171 / +190 lines)
Lines 1-7 Link Here
1
#!/bin/sh
1
#!/bin/sh
2
# install - install a program, script, or datafile
2
# install - install a program, script, or datafile
3
3
4
scriptversion=2014-09-12.12; # UTC
4
scriptversion=2011-11-20.07; # UTC
5
5
6
# This originates from X11R5 (mit/util/scripts/install.sh), which was
6
# This originates from X11R5 (mit/util/scripts/install.sh), which was
7
# later released in X11R6 (xc/config/util/install.sh) with the
7
# later released in X11R6 (xc/config/util/install.sh) with the
Lines 41-55 Link Here
41
# This script is compatible with the BSD install script, but was written
41
# This script is compatible with the BSD install script, but was written
42
# from scratch.
42
# from scratch.
43
43
44
tab='	'
45
nl='
44
nl='
46
'
45
'
47
IFS=" $tab$nl"
46
IFS=" ""	$nl"
48
47
49
# Set DOITPROG to "echo" to test this script.
48
# set DOITPROG to echo to test this script
50
49
50
# Don't use :- since 4.3BSD and earlier shells don't like it.
51
doit=${DOITPROG-}
51
doit=${DOITPROG-}
52
doit_exec=${doit:-exec}
52
if test -z "$doit"; then
53
  doit_exec=exec
54
else
55
  doit_exec=$doit
56
fi
53
57
54
# Put in absolute file names if you don't have them in your path;
58
# Put in absolute file names if you don't have them in your path;
55
# or use environment vars.
59
# or use environment vars.
Lines 64-69 Link Here
64
rmprog=${RMPROG-rm}
68
rmprog=${RMPROG-rm}
65
stripprog=${STRIPPROG-strip}
69
stripprog=${STRIPPROG-strip}
66
70
71
posix_glob='?'
72
initialize_posix_glob='
73
  test "$posix_glob" != "?" || {
74
    if (set -f) 2>/dev/null; then
75
      posix_glob=
76
    else
77
      posix_glob=:
78
    fi
79
  }
80
'
81
67
posix_mkdir=
82
posix_mkdir=
68
83
69
# Desired mode of installed file.
84
# Desired mode of installed file.
Lines 82-88 Link Here
82
dst_arg=
97
dst_arg=
83
98
84
copy_on_change=false
99
copy_on_change=false
85
is_target_a_directory=possibly
100
no_target_directory=
86
101
87
usage="\
102
usage="\
88
Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
103
Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
Lines 122-178 Link Here
122
    -d) dir_arg=true;;
137
    -d) dir_arg=true;;
123
138
124
    -g) chgrpcmd="$chgrpprog $2"
139
    -g) chgrpcmd="$chgrpprog $2"
125
        shift;;
140
	shift;;
126
141
127
    --help) echo "$usage"; exit $?;;
142
    --help) echo "$usage"; exit $?;;
128
143
129
    -m) mode=$2
144
    -m) mode=$2
130
        case $mode in
145
	case $mode in
131
          *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
146
	  *' '* | *'	'* | *'
132
            echo "$0: invalid mode: $mode" >&2
147
'*	  | *'*'* | *'?'* | *'['*)
133
            exit 1;;
148
	    echo "$0: invalid mode: $mode" >&2
134
        esac
149
	    exit 1;;
135
        shift;;
150
	esac
151
	shift;;
136
152
137
    -o) chowncmd="$chownprog $2"
153
    -o) chowncmd="$chownprog $2"
138
        shift;;
154
	shift;;
139
155
140
    -s) stripcmd=$stripprog;;
156
    -s) stripcmd=$stripprog;;
141
157
142
    -t)
158
    -t) dst_arg=$2
143
        is_target_a_directory=always
159
	# Protect names problematic for 'test' and other utilities.
144
        dst_arg=$2
160
	case $dst_arg in
145
        # Protect names problematic for 'test' and other utilities.
161
	  -* | [=\(\)!]) dst_arg=./$dst_arg;;
146
        case $dst_arg in
162
	esac
147
          -* | [=\(\)!]) dst_arg=./$dst_arg;;
163
	shift;;
148
        esac
149
        shift;;
150
164
151
    -T) is_target_a_directory=never;;
165
    -T) no_target_directory=true;;
152
166
153
    --version) echo "$0 $scriptversion"; exit $?;;
167
    --version) echo "$0 $scriptversion"; exit $?;;
154
168
155
    --) shift
169
    --)	shift
156
        break;;
170
	break;;
157
171
158
    -*) echo "$0: invalid option: $1" >&2
172
    -*)	echo "$0: invalid option: $1" >&2
159
        exit 1;;
173
	exit 1;;
160
174
161
    *)  break;;
175
    *)  break;;
162
  esac
176
  esac
163
  shift
177
  shift
164
done
178
done
165
179
166
# We allow the use of options -d and -T together, by making -d
167
# take the precedence; this is for compatibility with GNU install.
168
169
if test -n "$dir_arg"; then
170
  if test -n "$dst_arg"; then
171
    echo "$0: target directory not allowed when installing a directory." >&2
172
    exit 1
173
  fi
174
fi
175
176
if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
180
if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
177
  # When -d is used, all remaining arguments are directories to create.
181
  # When -d is used, all remaining arguments are directories to create.
178
  # When -t is used, the destination is already specified.
182
  # When -t is used, the destination is already specified.
Lines 204-218 Link Here
204
fi
208
fi
205
209
206
if test -z "$dir_arg"; then
210
if test -z "$dir_arg"; then
207
  if test $# -gt 1 || test "$is_target_a_directory" = always; then
208
    if test ! -d "$dst_arg"; then
209
      echo "$0: $dst_arg: Is not a directory." >&2
210
      exit 1
211
    fi
212
  fi
213
fi
214
215
if test -z "$dir_arg"; then
216
  do_exit='(exit $ret); exit $ret'
211
  do_exit='(exit $ret); exit $ret'
217
  trap "ret=129; $do_exit" 1
212
  trap "ret=129; $do_exit" 1
218
  trap "ret=130; $do_exit" 2
213
  trap "ret=130; $do_exit" 2
Lines 228-243 Link Here
228
223
229
    *[0-7])
224
    *[0-7])
230
      if test -z "$stripcmd"; then
225
      if test -z "$stripcmd"; then
231
        u_plus_rw=
226
	u_plus_rw=
232
      else
227
      else
233
        u_plus_rw='% 200'
228
	u_plus_rw='% 200'
234
      fi
229
      fi
235
      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
230
      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
236
    *)
231
    *)
237
      if test -z "$stripcmd"; then
232
      if test -z "$stripcmd"; then
238
        u_plus_rw=
233
	u_plus_rw=
239
      else
234
      else
240
        u_plus_rw=,u+rw
235
	u_plus_rw=,u+rw
241
      fi
236
      fi
242
      cp_umask=$mode$u_plus_rw;;
237
      cp_umask=$mode$u_plus_rw;;
243
  esac
238
  esac
Lines 274-288 Link Here
274
    # If destination is a directory, append the input filename; won't work
269
    # If destination is a directory, append the input filename; won't work
275
    # if double slashes aren't ignored.
270
    # if double slashes aren't ignored.
276
    if test -d "$dst"; then
271
    if test -d "$dst"; then
277
      if test "$is_target_a_directory" = never; then
272
      if test -n "$no_target_directory"; then
278
        echo "$0: $dst_arg: Is a directory" >&2
273
	echo "$0: $dst_arg: Is a directory" >&2
279
        exit 1
274
	exit 1
280
      fi
275
      fi
281
      dstdir=$dst
276
      dstdir=$dst
282
      dst=$dstdir/`basename "$src"`
277
      dst=$dstdir/`basename "$src"`
283
      dstdir_status=0
278
      dstdir_status=0
284
    else
279
    else
285
      dstdir=`dirname "$dst"`
280
      # Prefer dirname, but fall back on a substitute if dirname fails.
281
      dstdir=`
282
	(dirname "$dst") 2>/dev/null ||
283
	expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
284
	     X"$dst" : 'X\(//\)[^/]' \| \
285
	     X"$dst" : 'X\(//\)$' \| \
286
	     X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
287
	echo X"$dst" |
288
	    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
289
		   s//\1/
290
		   q
291
		 }
292
		 /^X\(\/\/\)[^/].*/{
293
		   s//\1/
294
		   q
295
		 }
296
		 /^X\(\/\/\)$/{
297
		   s//\1/
298
		   q
299
		 }
300
		 /^X\(\/\).*/{
301
		   s//\1/
302
		   q
303
		 }
304
		 s/.*/./; q'
305
      `
306
286
      test -d "$dstdir"
307
      test -d "$dstdir"
287
      dstdir_status=$?
308
      dstdir_status=$?
288
    fi
309
    fi
Lines 293-373 Link Here
293
  if test $dstdir_status != 0; then
314
  if test $dstdir_status != 0; then
294
    case $posix_mkdir in
315
    case $posix_mkdir in
295
      '')
316
      '')
296
        # Create intermediate dirs using mode 755 as modified by the umask.
317
	# Create intermediate dirs using mode 755 as modified by the umask.
297
        # This is like FreeBSD 'install' as of 1997-10-28.
318
	# This is like FreeBSD 'install' as of 1997-10-28.
298
        umask=`umask`
319
	umask=`umask`
299
        case $stripcmd.$umask in
320
	case $stripcmd.$umask in
300
          # Optimize common cases.
321
	  # Optimize common cases.
301
          *[2367][2367]) mkdir_umask=$umask;;
322
	  *[2367][2367]) mkdir_umask=$umask;;
302
          .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
323
	  .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
303
324
304
          *[0-7])
325
	  *[0-7])
305
            mkdir_umask=`expr $umask + 22 \
326
	    mkdir_umask=`expr $umask + 22 \
306
              - $umask % 100 % 40 + $umask % 20 \
327
	      - $umask % 100 % 40 + $umask % 20 \
307
              - $umask % 10 % 4 + $umask % 2
328
	      - $umask % 10 % 4 + $umask % 2
308
            `;;
329
	    `;;
309
          *) mkdir_umask=$umask,go-w;;
330
	  *) mkdir_umask=$umask,go-w;;
310
        esac
331
	esac
311
332
312
        # With -d, create the new directory with the user-specified mode.
333
	# With -d, create the new directory with the user-specified mode.
313
        # Otherwise, rely on $mkdir_umask.
334
	# Otherwise, rely on $mkdir_umask.
314
        if test -n "$dir_arg"; then
335
	if test -n "$dir_arg"; then
315
          mkdir_mode=-m$mode
336
	  mkdir_mode=-m$mode
316
        else
337
	else
317
          mkdir_mode=
338
	  mkdir_mode=
318
        fi
339
	fi
319
340
320
        posix_mkdir=false
341
	posix_mkdir=false
321
        case $umask in
342
	case $umask in
322
          *[123567][0-7][0-7])
343
	  *[123567][0-7][0-7])
323
            # POSIX mkdir -p sets u+wx bits regardless of umask, which
344
	    # POSIX mkdir -p sets u+wx bits regardless of umask, which
324
            # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
345
	    # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
325
            ;;
346
	    ;;
326
          *)
347
	  *)
327
            # $RANDOM is not portable (e.g. dash);  use it when possible to
348
	    tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
328
            # lower collision chance
349
	    trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
329
            tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
330
            trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0
331
350
332
            # As "mkdir -p" follows symlinks and we work in /tmp possibly;  so
351
	    if (umask $mkdir_umask &&
333
            # create the $tmpdir first (and fail if unsuccessful) to make sure
352
		exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
334
            # that nobody tries to guess the $tmpdir name.
353
	    then
335
            if (umask $mkdir_umask &&
354
	      if test -z "$dir_arg" || {
336
                $mkdirprog $mkdir_mode "$tmpdir" &&
355
		   # Check for POSIX incompatibilities with -m.
337
                exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
356
		   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
338
            then
357
		   # other-writable bit of parent directory when it shouldn't.
339
              if test -z "$dir_arg" || {
358
		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
340
                   # Check for POSIX incompatibilities with -m.
359
		   ls_ld_tmpdir=`ls -ld "$tmpdir"`
341
                   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
360
		   case $ls_ld_tmpdir in
342
                   # other-writable bit of parent directory when it shouldn't.
361
		     d????-?r-*) different_mode=700;;
343
                   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
362
		     d????-?--*) different_mode=755;;
344
                   test_tmpdir="$tmpdir/a"
363
		     *) false;;
345
                   ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
364
		   esac &&
346
                   case $ls_ld_tmpdir in
365
		   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
347
                     d????-?r-*) different_mode=700;;
366
		     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
348
                     d????-?--*) different_mode=755;;
367
		     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
349
                     *) false;;
368
		   }
350
                   esac &&
369
		 }
351
                   $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
370
	      then posix_mkdir=:
352
                     ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
371
	      fi
353
                     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
372
	      rmdir "$tmpdir/d" "$tmpdir"
354
                   }
373
	    else
355
                 }
374
	      # Remove any dirs left behind by ancient mkdir implementations.
356
              then posix_mkdir=:
375
	      rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
357
              fi
376
	    fi
358
              rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
377
	    trap '' 0;;
359
            else
378
	esac;;
360
              # Remove any dirs left behind by ancient mkdir implementations.
361
              rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
362
            fi
363
            trap '' 0;;
364
        esac;;
365
    esac
379
    esac
366
380
367
    if
381
    if
368
      $posix_mkdir && (
382
      $posix_mkdir && (
369
        umask $mkdir_umask &&
383
	umask $mkdir_umask &&
370
        $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
384
	$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
371
      )
385
      )
372
    then :
386
    then :
373
    else
387
    else
Lines 377-427 Link Here
377
      # directory the slow way, step by step, checking for races as we go.
391
      # directory the slow way, step by step, checking for races as we go.
378
392
379
      case $dstdir in
393
      case $dstdir in
380
        /*) prefix='/';;
394
	/*) prefix='/';;
381
        [-=\(\)!]*) prefix='./';;
395
	[-=\(\)!]*) prefix='./';;
382
        *)  prefix='';;
396
	*)  prefix='';;
383
      esac
397
      esac
384
398
399
      eval "$initialize_posix_glob"
400
385
      oIFS=$IFS
401
      oIFS=$IFS
386
      IFS=/
402
      IFS=/
387
      set -f
403
      $posix_glob set -f
388
      set fnord $dstdir
404
      set fnord $dstdir
389
      shift
405
      shift
390
      set +f
406
      $posix_glob set +f
391
      IFS=$oIFS
407
      IFS=$oIFS
392
408
393
      prefixes=
409
      prefixes=
394
410
395
      for d
411
      for d
396
      do
412
      do
397
        test X"$d" = X && continue
413
	test X"$d" = X && continue
398
414
399
        prefix=$prefix$d
415
	prefix=$prefix$d
400
        if test -d "$prefix"; then
416
	if test -d "$prefix"; then
401
          prefixes=
417
	  prefixes=
402
        else
418
	else
403
          if $posix_mkdir; then
419
	  if $posix_mkdir; then
404
            (umask=$mkdir_umask &&
420
	    (umask=$mkdir_umask &&
405
             $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
421
	     $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
406
            # Don't fail if two instances are running concurrently.
422
	    # Don't fail if two instances are running concurrently.
407
            test -d "$prefix" || exit 1
423
	    test -d "$prefix" || exit 1
408
          else
424
	  else
409
            case $prefix in
425
	    case $prefix in
410
              *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
426
	      *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
411
              *) qprefix=$prefix;;
427
	      *) qprefix=$prefix;;
412
            esac
428
	    esac
413
            prefixes="$prefixes '$qprefix'"
429
	    prefixes="$prefixes '$qprefix'"
414
          fi
430
	  fi
415
        fi
431
	fi
416
        prefix=$prefix/
432
	prefix=$prefix/
417
      done
433
      done
418
434
419
      if test -n "$prefixes"; then
435
      if test -n "$prefixes"; then
420
        # Don't fail if two instances are running concurrently.
436
	# Don't fail if two instances are running concurrently.
421
        (umask $mkdir_umask &&
437
	(umask $mkdir_umask &&
422
         eval "\$doit_exec \$mkdirprog $prefixes") ||
438
	 eval "\$doit_exec \$mkdirprog $prefixes") ||
423
          test -d "$dstdir" || exit 1
439
	  test -d "$dstdir" || exit 1
424
        obsolete_mkdir_used=true
440
	obsolete_mkdir_used=true
425
      fi
441
      fi
426
    fi
442
    fi
427
  fi
443
  fi
Lines 456-467 Link Here
456
472
457
    # If -C, don't bother to copy if it wouldn't change the file.
473
    # If -C, don't bother to copy if it wouldn't change the file.
458
    if $copy_on_change &&
474
    if $copy_on_change &&
459
       old=`LC_ALL=C ls -dlL "$dst"     2>/dev/null` &&
475
       old=`LC_ALL=C ls -dlL "$dst"	2>/dev/null` &&
460
       new=`LC_ALL=C ls -dlL "$dsttmp"  2>/dev/null` &&
476
       new=`LC_ALL=C ls -dlL "$dsttmp"	2>/dev/null` &&
461
       set -f &&
477
478
       eval "$initialize_posix_glob" &&
479
       $posix_glob set -f &&
462
       set X $old && old=:$2:$4:$5:$6 &&
480
       set X $old && old=:$2:$4:$5:$6 &&
463
       set X $new && new=:$2:$4:$5:$6 &&
481
       set X $new && new=:$2:$4:$5:$6 &&
464
       set +f &&
482
       $posix_glob set +f &&
483
465
       test "$old" = "$new" &&
484
       test "$old" = "$new" &&
466
       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
485
       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
467
    then
486
    then
Lines 474-497 Link Here
474
      # to itself, or perhaps because mv is so ancient that it does not
493
      # to itself, or perhaps because mv is so ancient that it does not
475
      # support -f.
494
      # support -f.
476
      {
495
      {
477
        # Now remove or move aside any old file at destination location.
496
	# Now remove or move aside any old file at destination location.
478
        # We try this two ways since rm can't unlink itself on some
497
	# We try this two ways since rm can't unlink itself on some
479
        # systems and the destination file might be busy for other
498
	# systems and the destination file might be busy for other
480
        # reasons.  In this case, the final cleanup might fail but the new
499
	# reasons.  In this case, the final cleanup might fail but the new
481
        # file should still install successfully.
500
	# file should still install successfully.
482
        {
501
	{
483
          test ! -f "$dst" ||
502
	  test ! -f "$dst" ||
484
          $doit $rmcmd -f "$dst" 2>/dev/null ||
503
	  $doit $rmcmd -f "$dst" 2>/dev/null ||
485
          { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
504
	  { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
486
            { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
505
	    { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
487
          } ||
506
	  } ||
488
          { echo "$0: cannot unlink or rename $dst" >&2
507
	  { echo "$0: cannot unlink or rename $dst" >&2
489
            (exit 1); exit 1
508
	    (exit 1); exit 1
490
          }
509
	  }
491
        } &&
510
	} &&
492
511
493
        # Now rename the file to the real destination.
512
	# Now rename the file to the real destination.
494
        $doit $mvcmd "$dsttmp" "$dst"
513
	$doit $mvcmd "$dsttmp" "$dst"
495
      }
514
      }
496
    fi || exit 1
515
    fi || exit 1
497
516
(-)fdupes-2.1.2/log.c (-1 / +1 lines)
Lines 1-4 Link Here
1
/* Copyright (c) 2018 Adrian Lopez
1
/* Copyright (c) 2018-2022 Adrian Lopez
2
2
3
   This software is provided 'as-is', without any express or implied
3
   This software is provided 'as-is', without any express or implied
4
   warranty. In no event will the authors be held liable for any damages
4
   warranty. In no event will the authors be held liable for any damages
(-)fdupes-2.1.2/log.h (-1 / +1 lines)
Lines 1-4 Link Here
1
/* Copyright (c) 2018 Adrian Lopez
1
/* Copyright (c) 2018-2022 Adrian Lopez
2
2
3
   This software is provided 'as-is', without any express or implied
3
   This software is provided 'as-is', without any express or implied
4
   warranty. In no event will the authors be held liable for any damages
4
   warranty. In no event will the authors be held liable for any damages
(-)fdupes-2.1.2/mbstowcs_escape_invalid.c (-1 / +1 lines)
Lines 1-4 Link Here
1
/* Copyright (c) 2019 Adrian Lopez
1
/* Copyright (c) 2019-2022 Adrian Lopez
2
2
3
   This software is provided 'as-is', without any express or implied
3
   This software is provided 'as-is', without any express or implied
4
   warranty. In no event will the authors be held liable for any damages
4
   warranty. In no event will the authors be held liable for any damages
(-)fdupes-2.1.2/mbstowcs_escape_invalid.h (-1 / +1 lines)
Lines 1-4 Link Here
1
/* Copyright (c) 2019 Adrian Lopez
1
/* Copyright (c) 2019-2022 Adrian Lopez
2
2
3
   This software is provided 'as-is', without any express or implied
3
   This software is provided 'as-is', without any express or implied
4
   warranty. In no event will the authors be held liable for any damages
4
   warranty. In no event will the authors be held liable for any damages
(-)fdupes-2.1.2/ncurses-commands.c (-21 / +93 lines)
Lines 1-4 Link Here
1
/* FDUPES Copyright (c) 2018 Adrian Lopez
1
/* FDUPES Copyright (c) 2018-2022 Adrian Lopez
2
2
3
   Permission is hereby granted, free of charge, to any person
3
   Permission is hereby granted, free of charge, to any person
4
   obtaining a copy of this software and associated documentation files
4
   obtaining a copy of this software and associated documentation files
Lines 22-30 Link Here
22
#include "config.h"
22
#include "config.h"
23
#include "ncurses-status.h"
23
#include "ncurses-status.h"
24
#include "ncurses-commands.h"
24
#include "ncurses-commands.h"
25
#include "fileaction.h"
26
#include "flags.h"
27
#include "confirmmatch.h"
28
#include "errormsg.h"
25
#include "wcs.h"
29
#include "wcs.h"
26
#include "mbstowcs_escape_invalid.h"
30
#include "mbstowcs_escape_invalid.h"
27
#include "log.h"
31
#include "log.h"
32
#include "removeifnotchanged.h"
28
#include <wchar.h>
33
#include <wchar.h>
29
#include <pcre2.h>
34
#include <pcre2.h>
30
35
Lines 619-625 Link Here
619
    {
624
    {
620
      if (groups[g].files[f].selected)
625
      if (groups[g].files[f].selected)
621
      {
626
      {
622
        set_file_action(&groups[g].files[f], 1, deletiontally);
627
        set_file_action(&groups[g].files[f], FILEACTION_KEEP, deletiontally);
623
        ++keepfilecount;
628
        ++keepfilecount;
624
      }
629
      }
625
    }
630
    }
Lines 643-649 Link Here
643
    {
648
    {
644
      if (groups[g].files[f].selected)
649
      if (groups[g].files[f].selected)
645
      {
650
      {
646
        set_file_action(&groups[g].files[f], -1, deletiontally);
651
        set_file_action(&groups[g].files[f], FILEACTION_DELETE, deletiontally);
647
        ++deletefilecount;
652
        ++deletefilecount;
648
      }
653
      }
649
    }
654
    }
Lines 667-673 Link Here
667
    {
672
    {
668
      if (groups[g].files[f].selected)
673
      if (groups[g].files[f].selected)
669
      {
674
      {
670
        set_file_action(&groups[g].files[f], 0, deletiontally);
675
        set_file_action(&groups[g].files[f], FILEACTION_UNRESOLVED, deletiontally);
671
        ++resetfilecount;
676
        ++resetfilecount;
672
      }
677
      }
673
    }
678
    }
Lines 681-692 Link Here
681
int filerowcount(file_t *file, const int columns, int group_file_count);
686
int filerowcount(file_t *file, const int columns, int group_file_count);
682
687
683
/* delete files tagged for deletion, delist sets with no untagged files */
688
/* delete files tagged for deletion, delist sets with no untagged files */
684
int cmd_prune(struct filegroup *groups, int groupcount, wchar_t *commandarguments, size_t *deletiontally, int *totalgroups, int *cursorgroup, int *cursorfile, int *topline, char *logfile, WINDOW *filewin, struct status_text *status)
689
int cmd_prune(struct filegroup *groups, int groupcount, wchar_t *commandarguments, size_t *deletiontally, int *totalgroups, int *cursorgroup, int *cursorfile, int *topline, char *logfile, WINDOW *filewin, WINDOW *statuswin, struct status_text *status)
685
{
690
{
686
  int deletecount;
691
  int deletecount;
687
  int preservecount;
692
  int preservecount;
688
  int unresolvedcount;
693
  int unresolvedcount;
689
  int totaldeleted = 0;
694
  int totaldeleted = 0;
695
  int totalfailed = 0;
690
  double deletedbytes = 0;
696
  double deletedbytes = 0;
691
  struct log_info *loginfo;
697
  struct log_info *loginfo;
692
  int g;
698
  int g;
Lines 695-700 Link Here
695
  int adjusttopline;
701
  int adjusttopline;
696
  int toplineoffset;
702
  int toplineoffset;
697
  int groupfirstline;
703
  int groupfirstline;
704
  FILE *file1;
705
  FILE *file2;
706
  int ismatch;
707
  wchar_t *statuscopy;
708
  struct groupfile *firstnotdeleted;
698
709
699
  if (logfile != 0)
710
  if (logfile != 0)
700
    loginfo = log_open(logfile, 0);
711
    loginfo = log_open(logfile, 0);
Lines 706-724 Link Here
706
    preservecount = 0;
717
    preservecount = 0;
707
    deletecount = 0;
718
    deletecount = 0;
708
    unresolvedcount = 0;
719
    unresolvedcount = 0;
720
    firstnotdeleted = 0;
709
721
710
    for (f = 0; f < groups[g].filecount; ++f)
722
    for (f = 0; f < groups[g].filecount; ++f)
711
    {
723
    {
712
      switch (groups[g].files[f].action)
724
      switch (groups[g].files[f].action)
713
      {
725
      {
714
        case -1:
726
        case FILEACTION_DELETE:
715
          ++deletecount;
727
          ++deletecount;
716
          break;
728
          break;
717
        case 0:
729
730
        case FILEACTION_UNRESOLVED:
731
        case FILEACTION_ERROR:
718
          ++unresolvedcount;
732
          ++unresolvedcount;
733
734
          if (firstnotdeleted == 0)
735
            firstnotdeleted = &groups[g].files[f];
736
719
          break;
737
          break;
720
        case 1:
738
739
        case FILEACTION_KEEP:
721
          ++preservecount;
740
          ++preservecount;
741
742
          if (firstnotdeleted == 0)
743
            firstnotdeleted = &groups[g].files[f];
744
722
          break;
745
          break;
723
      }
746
      }
724
    }
747
    }
Lines 731-748 Link Here
731
    {
754
    {
732
      for (f = 0; f < groups[g].filecount; ++f)
755
      for (f = 0; f < groups[g].filecount; ++f)
733
      {
756
      {
734
        if (groups[g].files[f].action == -1)
757
        if (groups[g].files[f].action == FILEACTION_DELETE)
735
        {
758
        {
736
          if (remove(groups[g].files[f].file->d_name) == 0)
759
          if (ISFLAG(flags, F_DEFERCONFIRMATION))
737
          {
760
          {
738
            set_file_action(&groups[g].files[f], -2, deletiontally);
761
            format_status_left(status, L"Confirming duplicates...");
762
            print_status(statuswin, status);
763
            wrefresh(statuswin);
739
764
765
            file1 = fopen(groups[g].files[f].file->d_name, "rb");
766
            file2 = fopen(firstnotdeleted->file->d_name, "rb");
767
768
            if (file1 && file2)
769
              ismatch = confirmmatch(file1, file2);
770
            else
771
              ismatch = 0;
772
773
            if (file2)
774
              fclose(file2);
775
776
            if (file1)
777
              fclose(file1);
778
          }
779
          else
780
          {
781
            ismatch = 1;
782
          }
783
784
          if (ismatch && removeifnotchanged(groups[g].files[f].file, 0) == 0)
785
          {
786
            set_file_action(&groups[g].files[f], FILEACTION_DELIST, deletiontally);
787
740
            deletedbytes += groups[g].files[f].file->size;
788
            deletedbytes += groups[g].files[f].file->size;
741
            ++totaldeleted;
789
            ++totaldeleted;
742
790
743
            if (loginfo)
791
            if (loginfo)
744
              log_file_deleted(loginfo, groups[g].files[f].file->d_name);
792
              log_file_deleted(loginfo, groups[g].files[f].file->d_name);
745
          }
793
          }
794
          else
795
          {
796
            set_file_action(&groups[g].files[f], FILEACTION_ERROR, deletiontally);
797
            unresolvedcount++;
798
            totalfailed++;
799
          }
746
        }
800
        }
747
      }
801
      }
748
802
Lines 750-756 Link Here
750
      {
804
      {
751
        for (f = 0; f < groups[g].filecount; ++f)
805
        for (f = 0; f < groups[g].filecount; ++f)
752
        {
806
        {
753
          if (groups[g].files[f].action >= 0)
807
          if (groups[g].files[f].action != FILEACTION_DELETE &&
808
              groups[g].files[f].action != FILEACTION_DELIST)
754
            log_file_remaining(loginfo, groups[g].files[f].file->d_name);
809
            log_file_remaining(loginfo, groups[g].files[f].file->d_name);
755
        }
810
        }
756
      }
811
      }
Lines 765-772 Link Here
765
    if (unresolvedcount == 0)
820
    if (unresolvedcount == 0)
766
    {
821
    {
767
      for (f = 0; f < groups[g].filecount; ++f)
822
      for (f = 0; f < groups[g].filecount; ++f)
768
        if (groups[g].files[f].action == 1)
823
        if (groups[g].files[f].action == FILEACTION_KEEP)
769
          set_file_action(&groups[g].files[f], -2, deletiontally);
824
          set_file_action(&groups[g].files[f], FILEACTION_DELIST, deletiontally);
770
825
771
      preservecount = 0;
826
      preservecount = 0;
772
    }
827
    }
Lines 774-787 Link Here
774
    else if (unresolvedcount == 1 && preservecount + deletecount == 0)
829
    else if (unresolvedcount == 1 && preservecount + deletecount == 0)
775
    {
830
    {
776
      for (f = 0; f < groups[g].filecount; ++f)
831
      for (f = 0; f < groups[g].filecount; ++f)
777
        if (groups[g].files[f].action == 0)
832
        if (groups[g].files[f].action == FILEACTION_UNRESOLVED || groups[g].files[f].action == FILEACTION_ERROR)
778
          set_file_action(&groups[g].files[f], -2, deletiontally);
833
          set_file_action(&groups[g].files[f], FILEACTION_DELIST, deletiontally);
779
    }
834
    }
780
835
781
    /* delist any files marked for delisting */
836
    /* delist any files marked for delisting */
782
    to = 0;
837
    to = 0;
783
    for (f = 0; f < groups[g].filecount; ++f)
838
    for (f = 0; f < groups[g].filecount; ++f)
784
      if (groups[g].files[f].action != -2)
839
      if (groups[g].files[f].action != FILEACTION_DELIST)
785
        groups[g].files[to++] = groups[g].files[f];
840
        groups[g].files[to++] = groups[g].files[f];
786
841
787
    groups[g].filecount = to;
842
    groups[g].filecount = to;
Lines 795-807 Link Here
795
    log_close(loginfo);
850
    log_close(loginfo);
796
851
797
  if (deletedbytes < 1000.0)
852
  if (deletedbytes < 1000.0)
798
    format_status_left(status, L"Deleted %ld files (occupying %.0f bytes).", totaldeleted, deletedbytes);
853
    format_status_left(status, L"Deleted %ld files (occupying %.0f bytes)%c", totaldeleted, deletedbytes, totalfailed ? ';' : '.');
799
  else if (deletedbytes <= (1000.0 * 1000.0))
854
  else if (deletedbytes <= (1000.0 * 1000.0))
800
    format_status_left(status, L"Deleted %ld files (occupying %.1f KB).", totaldeleted, deletedbytes / 1000.0);
855
    format_status_left(status, L"Deleted %ld files (occupying %.1f KB)%c", totaldeleted, deletedbytes / 1000.0, totalfailed ? ';' : '.');
801
  else if (deletedbytes <= (1000.0 * 1000.0 * 1000.0))
856
  else if (deletedbytes <= (1000.0 * 1000.0 * 1000.0))
802
    format_status_left(status, L"Deleted %ld files (occupying %.1f MB).", totaldeleted, deletedbytes / (1000.0 * 1000.0));
857
    format_status_left(status, L"Deleted %ld files (occupying %.1f MB)%c", totaldeleted, deletedbytes / (1000.0 * 1000.0), totalfailed ? ';' : '.');
803
  else
858
  else
804
    format_status_left(status, L"Deleted %ld files (occupying %.1f GB).", totaldeleted, deletedbytes / (1000.0 * 1000.0 * 1000.0));
859
    format_status_left(status, L"Deleted %ld files (occupying %.1f GB)%c", totaldeleted, deletedbytes / (1000.0 * 1000.0 * 1000.0), totalfailed ? ';' : '.');
860
861
  if (totalfailed > 0)
862
  {
863
    statuscopy = malloc(sizeof(wchar_t) * (wcslen(status->left) + 1));
864
    if (!statuscopy)
865
    {
866
      endwin();
867
      errormsg("out of memory\n");
868
      exit(1);
869
    }
870
871
    wcsncpy(statuscopy, status->left, wcslen(status->left) + 1);
872
873
    format_status_left(status, L"%S %d failed.", statuscopy, totalfailed);
874
875
    free(statuscopy);
876
  }
805
877
806
  /* delist empty groups */
878
  /* delist empty groups */
807
  to = 0;
879
  to = 0;
(-)fdupes-2.1.2/ncurses-commands.h (-2 / +2 lines)
Lines 1-4 Link Here
1
/* FDUPES Copyright (c) 2018 Adrian Lopez
1
/* FDUPES Copyright (c) 2018-2022 Adrian Lopez
2
2
3
   Permission is hereby granted, free of charge, to any person
3
   Permission is hereby granted, free of charge, to any person
4
   obtaining a copy of this software and associated documentation files
4
   obtaining a copy of this software and associated documentation files
Lines 71-76 Link Here
71
int cmd_keep_selected(struct filegroup *groups, int groupcount, wchar_t *commandarguments, size_t *deletiontally, struct status_text *status);
71
int cmd_keep_selected(struct filegroup *groups, int groupcount, wchar_t *commandarguments, size_t *deletiontally, struct status_text *status);
72
int cmd_delete_selected(struct filegroup *groups, int groupcount, wchar_t *commandarguments, size_t *deletiontally, struct status_text *status);
72
int cmd_delete_selected(struct filegroup *groups, int groupcount, wchar_t *commandarguments, size_t *deletiontally, struct status_text *status);
73
int cmd_reset_selected(struct filegroup *groups, int groupcount, wchar_t *commandarguments, size_t *deletiontally, struct status_text *status);
73
int cmd_reset_selected(struct filegroup *groups, int groupcount, wchar_t *commandarguments, size_t *deletiontally, struct status_text *status);
74
int cmd_prune(struct filegroup *groups, int groupcount, wchar_t *commandarguments, size_t *deletiontally, int *totalgroups, int *cursorgroup, int *cursorfile, int *topline, char *logfile, WINDOW *filewin, struct status_text *status);;
74
int cmd_prune(struct filegroup *groups, int groupcount, wchar_t *commandarguments, size_t *deletiontally, int *totalgroups, int *cursorgroup, int *cursorfile, int *topline, char *logfile, WINDOW *filewin, WINDOW *statuswin, struct status_text *status);;
75
75
76
#endif
76
#endif
(-)fdupes-2.1.2/ncurses-getcommand.c (-1 / +1 lines)
Lines 1-4 Link Here
1
/* FDUPES Copyright (c) 2018 Adrian Lopez
1
/* FDUPES Copyright (c) 2018-2022 Adrian Lopez
2
2
3
   Permission is hereby granted, free of charge, to any person
3
   Permission is hereby granted, free of charge, to any person
4
   obtaining a copy of this software and associated documentation files
4
   obtaining a copy of this software and associated documentation files
(-)fdupes-2.1.2/ncurses-getcommand.h (-1 / +1 lines)
Lines 1-4 Link Here
1
/* FDUPES Copyright (c) 2018 Adrian Lopez
1
/* FDUPES Copyright (c) 2018-2022 Adrian Lopez
2
2
3
   Permission is hereby granted, free of charge, to any person
3
   Permission is hereby granted, free of charge, to any person
4
   obtaining a copy of this software and associated documentation files
4
   obtaining a copy of this software and associated documentation files
(-)fdupes-2.1.2/ncurses-interface.c (-25 / +28 lines)
Lines 1-4 Link Here
1
/* FDUPES Copyright (c) 2018 Adrian Lopez
1
/* FDUPES Copyright (c) 2018-2022 Adrian Lopez
2
2
3
   Permission is hereby granted, free of charge, to any person
3
   Permission is hereby granted, free of charge, to any person
4
   obtaining a copy of this software and associated documentation files
4
   obtaining a copy of this software and associated documentation files
Lines 34-39 Link Here
34
#include "ncurses-prompt.h"
34
#include "ncurses-prompt.h"
35
#include "ncurses-status.h"
35
#include "ncurses-status.h"
36
#include "ncurses-print.h"
36
#include "ncurses-print.h"
37
#include "fileaction.h"
37
#include "mbstowcs_escape_invalid.h"
38
#include "mbstowcs_escape_invalid.h"
38
#include "positive_wcwidth.h"
39
#include "positive_wcwidth.h"
39
#include "commandidentifier.h"
40
#include "commandidentifier.h"
Lines 182-194 Link Here
182
{
183
{
183
  switch (file->action)
184
  switch (file->action)
184
  {
185
  {
185
    case -1:
186
    case FILEACTION_DELETE:
186
      if (new_action != -1)
187
      if (new_action != FILEACTION_DELETE)
187
        --*deletion_tally;
188
        --*deletion_tally;
188
      break;
189
      break;
189
190
190
    default:
191
    default:
191
      if (new_action == -1)
192
      if (new_action == FILEACTION_DELETE)
192
        ++*deletion_tally;
193
        ++*deletion_tally;
193
      break;
194
      break;
194
  }
195
  }
Lines 539-545 Link Here
539
    do
540
    do
540
    {
541
    {
541
      groups[totalgroups].files[groupfilecount].file = dupefile;
542
      groups[totalgroups].files[groupfilecount].file = dupefile;
542
      groups[totalgroups].files[groupfilecount].action = 0;
543
      groups[totalgroups].files[groupfilecount].action = FILEACTION_UNRESOLVED;
543
      groups[totalgroups].files[groupfilecount].selected = 0;
544
      groups[totalgroups].files[groupfilecount].selected = 0;
544
      ++groupfilecount;
545
      ++groupfilecount;
545
546
Lines 647-653 Link Here
647
          {
648
          {
648
            print_spaces(filewin, index_width);
649
            print_spaces(filewin, index_width);
649
650
650
            wprintw(filewin, " [%c] ", groups[groupindex].files[f].action > 0 ? '+' : groups[groupindex].files[f].action < 0 ? '-' : ' ');
651
            wprintw(filewin, " [%c] ", getfileactionchar(groups[groupindex].files[f].action));
651
652
652
            if (ISFLAG(flags, F_SHOWTIME))
653
            if (ISFLAG(flags, F_SHOWTIME))
653
              wprintw(filewin, "[%s] ", fmttime(groups[groupindex].files[f].file->mtime));
654
              wprintw(filewin, "[%s] ", fmttime(groups[groupindex].files[f].file->mtime));
Lines 673-679 Link Here
673
674
674
            if (cursorgroup == groupindex && cursorfile == f)
675
            if (cursorgroup == groupindex && cursorfile == f)
675
              wattron(filewin, A_REVERSE);
676
              wattron(filewin, A_REVERSE);
676
            wprintw(filewin, "[%c]", groups[groupindex].files[f].action > 0 ? '+' : groups[groupindex].files[f].action < 0 ? '-' : ' ');
677
            wprintw(filewin, "[%c]", getfileactionchar(groups[groupindex].files[f].action));
677
            if (cursorgroup == groupindex && cursorfile == f)
678
            if (cursorgroup == groupindex && cursorfile == f)
678
              wattroff(filewin, A_REVERSE);
679
              wattroff(filewin, A_REVERSE);
679
            wprintw(filewin, " ");
680
            wprintw(filewin, " ");
Lines 829-835 Link Here
829
830
830
            case COMMAND_RESET_GROUP:
831
            case COMMAND_RESET_GROUP:
831
              for (x = 0; x < groups[cursorgroup].filecount; ++x)
832
              for (x = 0; x < groups[cursorgroup].filecount; ++x)
832
                set_file_action(&groups[cursorgroup].files[x], 0, &globaldeletiontally);
833
                set_file_action(&groups[cursorgroup].files[x], FILEACTION_UNRESOLVED, &globaldeletiontally);
833
834
834
              format_status_left(status, L"Reset all files in current group.");
835
              format_status_left(status, L"Reset all files in current group.");
835
836
Lines 838-844 Link Here
838
            case COMMAND_PRESERVE_ALL:
839
            case COMMAND_PRESERVE_ALL:
839
              /* mark all files for preservation */
840
              /* mark all files for preservation */
840
              for (x = 0; x < groups[cursorgroup].filecount; ++x)
841
              for (x = 0; x < groups[cursorgroup].filecount; ++x)
841
                set_file_action(&groups[cursorgroup].files[x], 1, &globaldeletiontally);
842
                set_file_action(&groups[cursorgroup].files[x], FILEACTION_KEEP, &globaldeletiontally);
842
843
843
              format_status_left(status, L"%d files marked for preservation", groups[cursorgroup].filecount);
844
              format_status_left(status, L"%d files marked for preservation", groups[cursorgroup].filecount);
844
845
Lines 881-887 Link Here
881
              break;
882
              break;
882
883
883
            case COMMAND_PRUNE:
884
            case COMMAND_PRUNE:
884
              cmd_prune(groups, totalgroups, commandarguments, &globaldeletiontally, &totalgroups, &cursorgroup, &cursorfile, &topline, logfile, filewin, status);
885
              cmd_prune(groups, totalgroups, commandarguments, &globaldeletiontally, &totalgroups, &cursorgroup, &cursorfile, &topline, logfile, filewin, statuswin, status);
885
              break;
886
              break;
886
887
887
            case COMMAND_EXIT: /* exit program */
888
            case COMMAND_EXIT: /* exit program */
Lines 1016-1022 Link Here
1016
                if (wcstolcheck != token && *wcstolcheck == '\0')
1017
                if (wcstolcheck != token && *wcstolcheck == '\0')
1017
                {
1018
                {
1018
                  if (number > 0 && number <= groups[cursorgroup].filecount)
1019
                  if (number > 0 && number <= groups[cursorgroup].filecount)
1019
                    set_file_action(&groups[cursorgroup].files[number - 1], 1, &globaldeletiontally);
1020
                    set_file_action(&groups[cursorgroup].files[number - 1], FILEACTION_KEEP, &globaldeletiontally);
1020
                }
1021
                }
1021
1022
1022
                token = wcstok(NULL, L",", &wcsptr);
1023
                token = wcstok(NULL, L",", &wcsptr);
Lines 1028-1036 Link Here
1028
1029
1029
              for (x = 0; x < groups[cursorgroup].filecount; ++x)
1030
              for (x = 0; x < groups[cursorgroup].filecount; ++x)
1030
              {
1031
              {
1031
                if (groups[cursorgroup].files[x].action == 1)
1032
                if (groups[cursorgroup].files[x].action == FILEACTION_KEEP)
1032
                  ++preservecount;
1033
                  ++preservecount;
1033
                if (groups[cursorgroup].files[x].action == -1)
1034
                if (groups[cursorgroup].files[x].action == FILEACTION_DELETE)
1034
                  ++deletecount;
1035
                  ++deletecount;
1035
              }
1036
              }
1036
1037
Lines 1038-1046 Link Here
1038
              {
1039
              {
1039
                for (x = 0; x < groups[cursorgroup].filecount; ++x)
1040
                for (x = 0; x < groups[cursorgroup].filecount; ++x)
1040
                {
1041
                {
1041
                  if (groups[cursorgroup].files[x].action == 0)
1042
                  if (groups[cursorgroup].files[x].action == FILEACTION_UNRESOLVED || 
1043
                      groups[cursorgroup].files[x].action == FILEACTION_ERROR
1044
                  )
1042
                  {
1045
                  {
1043
                    set_file_action(&groups[cursorgroup].files[x], -1, &globaldeletiontally);
1046
                    set_file_action(&groups[cursorgroup].files[x], FILEACTION_DELETE, &globaldeletiontally);
1044
                    ++deletecount;
1047
                    ++deletecount;
1045
                  }
1048
                  }
1046
                }
1049
                }
Lines 1180-1186 Link Here
1180
        break;
1183
        break;
1181
1184
1182
      case KEY_SRIGHT:
1185
      case KEY_SRIGHT:
1183
        set_file_action(&groups[cursorgroup].files[cursorfile], 1, &globaldeletiontally);
1186
        set_file_action(&groups[cursorgroup].files[cursorfile], FILEACTION_KEEP, &globaldeletiontally);
1184
1187
1185
        format_status_left(status, L"1 file marked for preservation.");
1188
        format_status_left(status, L"1 file marked for preservation.");
1186
1189
Lines 1194-1205 Link Here
1194
      case KEY_SLEFT:
1197
      case KEY_SLEFT:
1195
        deletecount = 0;
1198
        deletecount = 0;
1196
1199
1197
        set_file_action(&groups[cursorgroup].files[cursorfile], -1, &globaldeletiontally);
1200
        set_file_action(&groups[cursorgroup].files[cursorfile], FILEACTION_DELETE, &globaldeletiontally);
1198
1201
1199
        format_status_left(status, L"1 file marked for deletion.");
1202
        format_status_left(status, L"1 file marked for deletion.");
1200
1203
1201
        for (x = 0; x < groups[cursorgroup].filecount; ++x)
1204
        for (x = 0; x < groups[cursorgroup].filecount; ++x)
1202
          if (groups[cursorgroup].files[x].action == -1)
1205
          if (groups[cursorgroup].files[x].action == FILEACTION_DELETE)
1203
            ++deletecount;
1206
            ++deletecount;
1204
1207
1205
        if (deletecount < groups[cursorgroup].filecount)
1208
        if (deletecount < groups[cursorgroup].filecount)
Lines 1231-1237 Link Here
1231
        break;
1234
        break;
1232
1235
1233
      case KEY_DC:
1236
      case KEY_DC:
1234
        cmd_prune(groups, totalgroups, commandarguments, &globaldeletiontally, &totalgroups, &cursorgroup, &cursorfile, &topline, logfile, filewin, status);
1237
        cmd_prune(groups, totalgroups, commandarguments, &globaldeletiontally, &totalgroups, &cursorgroup, &cursorfile, &topline, logfile, filewin, statuswin, status);
1235
        break;
1238
        break;
1236
1239
1237
      case KEY_RESIZE:
1240
      case KEY_RESIZE:
Lines 1267-1276 Link Here
1267
      switch (wch)
1270
      switch (wch)
1268
      {
1271
      {
1269
      case '?':
1272
      case '?':
1270
        if (groups[cursorgroup].files[cursorfile].action == 0)
1273
        if (groups[cursorgroup].files[cursorfile].action == FILEACTION_UNRESOLVED)
1271
          break;
1274
          break;
1272
1275
1273
        set_file_action(&groups[cursorgroup].files[cursorfile], 0, &globaldeletiontally);
1276
        set_file_action(&groups[cursorgroup].files[cursorfile], FILEACTION_UNRESOLVED, &globaldeletiontally);
1274
1277
1275
        if (cursorfile < groups[cursorgroup].filecount - 1)
1278
        if (cursorfile < groups[cursorgroup].filecount - 1)
1276
          move_to_next_file(&topline, &cursorgroup, &cursorfile, groups, filewin);
1279
          move_to_next_file(&topline, &cursorgroup, &cursorfile, groups, filewin);
Lines 1285-1291 Link Here
1285
1288
1286
        for (x = 0; x < groups[cursorgroup].filecount; ++x)
1289
        for (x = 0; x < groups[cursorgroup].filecount; ++x)
1287
        {
1290
        {
1288
          if (groups[cursorgroup].files[x].action == 1)
1291
          if (groups[cursorgroup].files[x].action == FILEACTION_KEEP)
1289
            ++preservecount;
1292
            ++preservecount;
1290
        }
1293
        }
1291
1294
Lines 1294-1303 Link Here
1294
1297
1295
        for (x = 0; x < groups[cursorgroup].filecount; ++x)
1298
        for (x = 0; x < groups[cursorgroup].filecount; ++x)
1296
        {
1299
        {
1297
          if (groups[cursorgroup].files[x].action == 0)
1300
          if (groups[cursorgroup].files[x].action == FILEACTION_UNRESOLVED)
1298
            set_file_action(&groups[cursorgroup].files[x], -1, &globaldeletiontally);
1301
            set_file_action(&groups[cursorgroup].files[x], FILEACTION_DELETE, &globaldeletiontally);
1299
1302
1300
          if (groups[cursorgroup].files[x].action == -1)
1303
          if (groups[cursorgroup].files[x].action == FILEACTION_DELETE)
1301
            ++deletecount;
1304
            ++deletecount;
1302
        }
1305
        }
1303
1306
(-)fdupes-2.1.2/ncurses-interface.h (-1 / +1 lines)
Lines 1-4 Link Here
1
/* FDUPES Copyright (c) 2018 Adrian Lopez
1
/* FDUPES Copyright (c) 2018-2022 Adrian Lopez
2
2
3
   Permission is hereby granted, free of charge, to any person
3
   Permission is hereby granted, free of charge, to any person
4
   obtaining a copy of this software and associated documentation files
4
   obtaining a copy of this software and associated documentation files
(-)fdupes-2.1.2/ncurses-print.c (-1 / +1 lines)
Lines 1-4 Link Here
1
/* FDUPES Copyright (c) 2018 Adrian Lopez
1
/* FDUPES Copyright (c) 2018-2022 Adrian Lopez
2
2
3
   Permission is hereby granted, free of charge, to any person
3
   Permission is hereby granted, free of charge, to any person
4
   obtaining a copy of this software and associated documentation files
4
   obtaining a copy of this software and associated documentation files
(-)fdupes-2.1.2/ncurses-print.h (-1 / +1 lines)
Lines 1-4 Link Here
1
/* FDUPES Copyright (c) 2018 Adrian Lopez
1
/* FDUPES Copyright (c) 2018-2022 Adrian Lopez
2
2
3
   Permission is hereby granted, free of charge, to any person
3
   Permission is hereby granted, free of charge, to any person
4
   obtaining a copy of this software and associated documentation files
4
   obtaining a copy of this software and associated documentation files
(-)fdupes-2.1.2/ncurses-prompt.c (-1 / +1 lines)
Lines 1-4 Link Here
1
/* FDUPES Copyright (c) 2018 Adrian Lopez
1
/* FDUPES Copyright (c) 2018-2022 Adrian Lopez
2
2
3
   Permission is hereby granted, free of charge, to any person
3
   Permission is hereby granted, free of charge, to any person
4
   obtaining a copy of this software and associated documentation files
4
   obtaining a copy of this software and associated documentation files
(-)fdupes-2.1.2/ncurses-prompt.h (-1 / +1 lines)
Lines 1-4 Link Here
1
/* FDUPES Copyright (c) 2018 Adrian Lopez
1
/* FDUPES Copyright (c) 2018-2022 Adrian Lopez
2
2
3
   Permission is hereby granted, free of charge, to any person
3
   Permission is hereby granted, free of charge, to any person
4
   obtaining a copy of this software and associated documentation files
4
   obtaining a copy of this software and associated documentation files
(-)fdupes-2.1.2/ncurses-status.c (-1 / +1 lines)
Lines 1-4 Link Here
1
/* FDUPES Copyright (c) 2018 Adrian Lopez
1
/* FDUPES Copyright (c) 2018-2022 Adrian Lopez
2
2
3
   Permission is hereby granted, free of charge, to any person
3
   Permission is hereby granted, free of charge, to any person
4
   obtaining a copy of this software and associated documentation files
4
   obtaining a copy of this software and associated documentation files
(-)fdupes-2.1.2/ncurses-status.h (-1 / +1 lines)
Lines 1-4 Link Here
1
/* FDUPES Copyright (c) 2018 Adrian Lopez
1
/* FDUPES Copyright (c) 2018-2022 Adrian Lopez
2
2
3
   Permission is hereby granted, free of charge, to any person
3
   Permission is hereby granted, free of charge, to any person
4
   obtaining a copy of this software and associated documentation files
4
   obtaining a copy of this software and associated documentation files
(-)fdupes-2.1.2/positive_wcwidth.c (-1 / +1 lines)
Lines 1-4 Link Here
1
/* Copyright (c) 2019 Adrian Lopez
1
/* Copyright (c) 2019-2022 Adrian Lopez
2
2
3
   This software is provided 'as-is', without any express or implied
3
   This software is provided 'as-is', without any express or implied
4
   warranty. In no event will the authors be held liable for any damages
4
   warranty. In no event will the authors be held liable for any damages
(-)fdupes-2.1.2/positive_wcwidth.h (-1 / +1 lines)
Lines 1-4 Link Here
1
/* Copyright (c) 2019 Adrian Lopez
1
/* Copyright (c) 2019-2022 Adrian Lopez
2
2
3
   This software is provided 'as-is', without any express or implied
3
   This software is provided 'as-is', without any express or implied
4
   warranty. In no event will the authors be held liable for any damages
4
   warranty. In no event will the authors be held liable for any damages
(-)fdupes-2.1.2/sigint.c (-1 / +1 lines)
Lines 1-4 Link Here
1
/* Copyright (c) 2018 Adrian Lopez
1
/* Copyright (c) 2018-2022 Adrian Lopez
2
2
3
   This software is provided 'as-is', without any express or implied
3
   This software is provided 'as-is', without any express or implied
4
   warranty. In no event will the authors be held liable for any damages
4
   warranty. In no event will the authors be held liable for any damages
(-)fdupes-2.1.2/sigint.h (-1 / +1 lines)
Lines 1-4 Link Here
1
/* Copyright (c) 2018 Adrian Lopez
1
/* Copyright (c) 2018-2022 Adrian Lopez
2
2
3
   This software is provided 'as-is', without any express or implied
3
   This software is provided 'as-is', without any express or implied
4
   warranty. In no event will the authors be held liable for any damages
4
   warranty. In no event will the authors be held liable for any damages
(-)fdupes-2.1.2/wcs.c (-1 / +1 lines)
Lines 1-4 Link Here
1
/* Copyright (c) 2018 Adrian Lopez
1
/* Copyright (c) 2018-2022 Adrian Lopez
2
2
3
   This software is provided 'as-is', without any express or implied
3
   This software is provided 'as-is', without any express or implied
4
   warranty. In no event will the authors be held liable for any damages
4
   warranty. In no event will the authors be held liable for any damages
(-)fdupes-2.1.2/wcs.h (-1 / +1 lines)
Lines 1-4 Link Here
1
/* Copyright (c) 2018 Adrian Lopez
1
/* Copyright (c) 2018-2022 Adrian Lopez
2
2
3
   This software is provided 'as-is', without any express or implied
3
   This software is provided 'as-is', without any express or implied
4
   warranty. In no event will the authors be held liable for any damages
4
   warranty. In no event will the authors be held liable for any damages

Return to bug 46316