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 44int 45namecmp(const FTSENT *a, const FTSENT *b) 46{ 47 48 return (strcoll(a->fts_name, b->fts_name)); 49} 50 51int 52revnamecmp(const FTSENT *a, const FTSENT *b) 53{ 54 55 return (strcoll(b->fts_name, a->fts_name)); 56} 57 58int 59verscmp(const FTSENT *a, const FTSENT *b) 60{ 61 62 return (strverscmp(a->fts_name, b->fts_name)); 63} 64 65int 66revverscmp(const FTSENT *a, const FTSENT *b) 67{ 68 69 return (strverscmp(b->fts_name, a->fts_name)); 70} 71 72int 73modcmp(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 94int 95revmodcmp(const FTSENT *a, const FTSENT *b) 96{ 97 98 return (modcmp(b, a)); 99} 100 101int 102acccmp(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 123int 124revacccmp(const FTSENT *a, const FTSENT *b) 125{ 126 127 return (acccmp(b, a)); 128} 129 130int 131birthcmp(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 152int 153revbirthcmp(const FTSENT *a, const FTSENT *b) 154{ 155 156 return (birthcmp(b, a)); 157} 158 159int 160statcmp(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 181int 182revstatcmp(const FTSENT *a, const FTSENT *b) 183{ 184 185 return (statcmp(b, a)); 186} 187 188int 189sizecmp(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 199int 200revsizecmp(const FTSENT *a, const FTSENT *b) 201{ 202 203 return (sizecmp(b, a)); 204} 205