Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/bin/ls/cmp.c
39476 views
1
/*-
2
* SPDX-License-Identifier: BSD-3-Clause
3
*
4
* Copyright (c) 1989, 1993
5
* The Regents of the University of California. All rights reserved.
6
*
7
* This code is derived from software contributed to Berkeley by
8
* Michael Fischbein.
9
*
10
* Redistribution and use in source and binary forms, with or without
11
* modification, are permitted provided that the following conditions
12
* are met:
13
* 1. Redistributions of source code must retain the above copyright
14
* notice, this list of conditions and the following disclaimer.
15
* 2. Redistributions in binary form must reproduce the above copyright
16
* notice, this list of conditions and the following disclaimer in the
17
* documentation and/or other materials provided with the distribution.
18
* 3. Neither the name of the University nor the names of its contributors
19
* may be used to endorse or promote products derived from this software
20
* without specific prior written permission.
21
*
22
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
23
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32
* SUCH DAMAGE.
33
*/
34
35
#include <sys/types.h>
36
#include <sys/stat.h>
37
38
#include <fts.h>
39
#include <string.h>
40
41
#include "ls.h"
42
#include "extern.h"
43
44
int
45
namecmp(const FTSENT *a, const FTSENT *b)
46
{
47
48
return (strcoll(a->fts_name, b->fts_name));
49
}
50
51
int
52
revnamecmp(const FTSENT *a, const FTSENT *b)
53
{
54
55
return (strcoll(b->fts_name, a->fts_name));
56
}
57
58
int
59
verscmp(const FTSENT *a, const FTSENT *b)
60
{
61
62
return (strverscmp(a->fts_name, b->fts_name));
63
}
64
65
int
66
revverscmp(const FTSENT *a, const FTSENT *b)
67
{
68
69
return (strverscmp(b->fts_name, a->fts_name));
70
}
71
72
int
73
modcmp(const FTSENT *a, const FTSENT *b)
74
{
75
76
if (b->fts_statp->st_mtim.tv_sec >
77
a->fts_statp->st_mtim.tv_sec)
78
return (1);
79
if (b->fts_statp->st_mtim.tv_sec <
80
a->fts_statp->st_mtim.tv_sec)
81
return (-1);
82
if (b->fts_statp->st_mtim.tv_nsec >
83
a->fts_statp->st_mtim.tv_nsec)
84
return (1);
85
if (b->fts_statp->st_mtim.tv_nsec <
86
a->fts_statp->st_mtim.tv_nsec)
87
return (-1);
88
if (f_samesort)
89
return (strcoll(b->fts_name, a->fts_name));
90
else
91
return (strcoll(a->fts_name, b->fts_name));
92
}
93
94
int
95
revmodcmp(const FTSENT *a, const FTSENT *b)
96
{
97
98
return (modcmp(b, a));
99
}
100
101
int
102
acccmp(const FTSENT *a, const FTSENT *b)
103
{
104
105
if (b->fts_statp->st_atim.tv_sec >
106
a->fts_statp->st_atim.tv_sec)
107
return (1);
108
if (b->fts_statp->st_atim.tv_sec <
109
a->fts_statp->st_atim.tv_sec)
110
return (-1);
111
if (b->fts_statp->st_atim.tv_nsec >
112
a->fts_statp->st_atim.tv_nsec)
113
return (1);
114
if (b->fts_statp->st_atim.tv_nsec <
115
a->fts_statp->st_atim.tv_nsec)
116
return (-1);
117
if (f_samesort)
118
return (strcoll(b->fts_name, a->fts_name));
119
else
120
return (strcoll(a->fts_name, b->fts_name));
121
}
122
123
int
124
revacccmp(const FTSENT *a, const FTSENT *b)
125
{
126
127
return (acccmp(b, a));
128
}
129
130
int
131
birthcmp(const FTSENT *a, const FTSENT *b)
132
{
133
134
if (b->fts_statp->st_birthtim.tv_sec >
135
a->fts_statp->st_birthtim.tv_sec)
136
return (1);
137
if (b->fts_statp->st_birthtim.tv_sec <
138
a->fts_statp->st_birthtim.tv_sec)
139
return (-1);
140
if (b->fts_statp->st_birthtim.tv_nsec >
141
a->fts_statp->st_birthtim.tv_nsec)
142
return (1);
143
if (b->fts_statp->st_birthtim.tv_nsec <
144
a->fts_statp->st_birthtim.tv_nsec)
145
return (-1);
146
if (f_samesort)
147
return (strcoll(b->fts_name, a->fts_name));
148
else
149
return (strcoll(a->fts_name, b->fts_name));
150
}
151
152
int
153
revbirthcmp(const FTSENT *a, const FTSENT *b)
154
{
155
156
return (birthcmp(b, a));
157
}
158
159
int
160
statcmp(const FTSENT *a, const FTSENT *b)
161
{
162
163
if (b->fts_statp->st_ctim.tv_sec >
164
a->fts_statp->st_ctim.tv_sec)
165
return (1);
166
if (b->fts_statp->st_ctim.tv_sec <
167
a->fts_statp->st_ctim.tv_sec)
168
return (-1);
169
if (b->fts_statp->st_ctim.tv_nsec >
170
a->fts_statp->st_ctim.tv_nsec)
171
return (1);
172
if (b->fts_statp->st_ctim.tv_nsec <
173
a->fts_statp->st_ctim.tv_nsec)
174
return (-1);
175
if (f_samesort)
176
return (strcoll(b->fts_name, a->fts_name));
177
else
178
return (strcoll(a->fts_name, b->fts_name));
179
}
180
181
int
182
revstatcmp(const FTSENT *a, const FTSENT *b)
183
{
184
185
return (statcmp(b, a));
186
}
187
188
int
189
sizecmp(const FTSENT *a, const FTSENT *b)
190
{
191
192
if (b->fts_statp->st_size > a->fts_statp->st_size)
193
return (1);
194
if (b->fts_statp->st_size < a->fts_statp->st_size)
195
return (-1);
196
return (strcoll(a->fts_name, b->fts_name));
197
}
198
199
int
200
revsizecmp(const FTSENT *a, const FTSENT *b)
201
{
202
203
return (sizecmp(b, a));
204
}
205
206