/* * Copyright (c) 2023 DTB * Copyright (c) 2023–2024 Emma Tebibyte * SPDX-License-Identifier: AGPL-3.0-or-later * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU Affero General Public License as published by the Free * Software Foundation, either version 3 of the License, or (at your option) any * later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more * details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see https://www.gnu.org/licenses/. */ #include /* fprintf(3), perror(3), stderr */ #include /* EX_OK, EX_OSERR, EX_USAGE */ #ifdef __OpenBSD__ # include /* pledge(2), unveil(2) */ #endif char *program_name = "strcmp"; int main(int argc, char *argv[]) { unsigned int i; #ifdef __OpenBSD__ if (pledge("stdio unveil", "") == -1 || unveil(NULL, NULL) == -1) { perror(argv[0] == NULL ? program_name : argv[0]); return EX_OSERR; } #endif if (argc < 3) { (void)fprintf( stderr, "Usage: %s string string...\n", argv[0] == NULL ? program_name : argv[0] ); return EX_USAGE; } for (; *argv[1] != '\0'; ++argv[1]) { for (i = 2; i < argc; ++i) { /* a former string has a greater byte value */ if (*argv[i-1] > *argv[i]) { return 1; /* a latter string has a greater byte value */ } else if (*argv[i-1] < *argv[i]++) { return -1; /* actually 255 */ } } } return EX_OK; }