15978408cSSascha Wildner /* $NetBSD: cd9660_strings.c,v 1.4 2007/01/16 17:32:05 hubertf Exp $ */
25978408cSSascha Wildner
35978408cSSascha Wildner /*-
45978408cSSascha Wildner * SPDX-License-Identifier: BSD-2-Clause-NetBSD
55978408cSSascha Wildner *
65978408cSSascha Wildner * Copyright (c) 2005 Daniel Watt, Walter Deignan, Ryan Gabrys, Alan
75978408cSSascha Wildner * Perez-Rathke and Ram Vedam. All rights reserved.
85978408cSSascha Wildner *
95978408cSSascha Wildner * This code was written by Daniel Watt, Walter Deignan, Ryan Gabrys,
105978408cSSascha Wildner * Alan Perez-Rathke and Ram Vedam.
115978408cSSascha Wildner *
125978408cSSascha Wildner * Redistribution and use in source and binary forms, with or
135978408cSSascha Wildner * without modification, are permitted provided that the following
145978408cSSascha Wildner * conditions are met:
155978408cSSascha Wildner * 1. Redistributions of source code must retain the above copyright
165978408cSSascha Wildner * notice, this list of conditions and the following disclaimer.
175978408cSSascha Wildner * 2. Redistributions in binary form must reproduce the above
185978408cSSascha Wildner * copyright notice, this list of conditions and the following
195978408cSSascha Wildner * disclaimer in the documentation and/or other materials provided
205978408cSSascha Wildner * with the distribution.
215978408cSSascha Wildner *
225978408cSSascha Wildner * THIS SOFTWARE IS PROVIDED BY DANIEL WATT, WALTER DEIGNAN, RYAN
235978408cSSascha Wildner * GABRYS, ALAN PEREZ-RATHKE AND RAM VEDAM ``AS IS'' AND ANY EXPRESS OR
245978408cSSascha Wildner * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
255978408cSSascha Wildner * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
265978408cSSascha Wildner * DISCLAIMED. IN NO EVENT SHALL DANIEL WATT, WALTER DEIGNAN, RYAN
275978408cSSascha Wildner * GABRYS, ALAN PEREZ-RATHKE AND RAM VEDAM BE LIABLE FOR ANY DIRECT, INDIRECT,
285978408cSSascha Wildner * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
295978408cSSascha Wildner * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
305978408cSSascha Wildner * USE,DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
315978408cSSascha Wildner * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
325978408cSSascha Wildner * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
335978408cSSascha Wildner * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
345978408cSSascha Wildner * OF SUCH DAMAGE.
35*811c2036SSascha Wildner *
36*811c2036SSascha Wildner * $FreeBSD: head/usr.sbin/makefs/cd9660/cd9660_strings.c 326276 2017-11-27 15:37:16Z pfg $
375978408cSSascha Wildner */
385978408cSSascha Wildner
395978408cSSascha Wildner #include <sys/mount.h>
405978408cSSascha Wildner
415978408cSSascha Wildner #include <sys/param.h>
425978408cSSascha Wildner #include <ctype.h>
435978408cSSascha Wildner
445978408cSSascha Wildner #include "makefs.h"
455978408cSSascha Wildner #include "cd9660.h"
465978408cSSascha Wildner
475978408cSSascha Wildner
485978408cSSascha Wildner void
cd9660_uppercase_characters(char * str,int len)495978408cSSascha Wildner cd9660_uppercase_characters(char *str, int len)
505978408cSSascha Wildner {
515978408cSSascha Wildner int p;
525978408cSSascha Wildner
535978408cSSascha Wildner for (p = 0; p < len; p++) {
545978408cSSascha Wildner if (islower((unsigned char)str[p]) )
555978408cSSascha Wildner str[p] -= 32;
565978408cSSascha Wildner }
575978408cSSascha Wildner }
585978408cSSascha Wildner
595978408cSSascha Wildner static inline int
cd9660_is_d_char(char c)605978408cSSascha Wildner cd9660_is_d_char(char c)
615978408cSSascha Wildner {
625978408cSSascha Wildner return (isupper((unsigned char)c)
635978408cSSascha Wildner || c == '_'
645978408cSSascha Wildner || (c >= '0' && c <= '9'));
655978408cSSascha Wildner }
665978408cSSascha Wildner
675978408cSSascha Wildner static inline int
cd9660_is_a_char(char c)685978408cSSascha Wildner cd9660_is_a_char(char c)
695978408cSSascha Wildner {
705978408cSSascha Wildner return (isupper((unsigned char)c)
715978408cSSascha Wildner || c == '_'
725978408cSSascha Wildner || (c >= '%' && c <= '?')
735978408cSSascha Wildner || (c >= ' ' && c <= '\"'));
745978408cSSascha Wildner }
755978408cSSascha Wildner
765978408cSSascha Wildner /*
775978408cSSascha Wildner * Test a string to see if it is composed of valid a characters
785978408cSSascha Wildner * @param const char* The string to test
795978408cSSascha Wildner * @returns int 1 if valid, 2 if valid if characters are converted to
805978408cSSascha Wildner * upper case, 0 otherwise
815978408cSSascha Wildner */
825978408cSSascha Wildner int
cd9660_valid_a_chars(const char * str)835978408cSSascha Wildner cd9660_valid_a_chars(const char *str)
845978408cSSascha Wildner {
855978408cSSascha Wildner const char *c = str;
865978408cSSascha Wildner int upperFound = 0;
875978408cSSascha Wildner
885978408cSSascha Wildner while ((*c) != '\0') {
895978408cSSascha Wildner if (!(cd9660_is_a_char(*c))) {
905978408cSSascha Wildner if (islower((unsigned char)*c) )
915978408cSSascha Wildner upperFound = 1;
925978408cSSascha Wildner else
935978408cSSascha Wildner return 0;
945978408cSSascha Wildner }
955978408cSSascha Wildner c++;
965978408cSSascha Wildner }
975978408cSSascha Wildner return upperFound + 1;
985978408cSSascha Wildner }
995978408cSSascha Wildner
1005978408cSSascha Wildner /*
1015978408cSSascha Wildner * Test a string to see if it is composed of valid d characters
1025978408cSSascha Wildner * @param const char* The string to test
1035978408cSSascha Wildner * @returns int 1 if valid, 2 if valid if characters are converted to
1045978408cSSascha Wildner * upper case, 0 otherwise
1055978408cSSascha Wildner */
1065978408cSSascha Wildner int
cd9660_valid_d_chars(const char * str)1075978408cSSascha Wildner cd9660_valid_d_chars(const char *str)
1085978408cSSascha Wildner {
1095978408cSSascha Wildner const char *c=str;
1105978408cSSascha Wildner int upperFound = 0;
1115978408cSSascha Wildner
1125978408cSSascha Wildner while ((*c) != '\0') {
1135978408cSSascha Wildner if (!(cd9660_is_d_char(*c))) {
1145978408cSSascha Wildner if (islower((unsigned char)*c) )
1155978408cSSascha Wildner upperFound = 1;
1165978408cSSascha Wildner else
1175978408cSSascha Wildner return 0;
1185978408cSSascha Wildner }
1195978408cSSascha Wildner c++;
1205978408cSSascha Wildner }
1215978408cSSascha Wildner return upperFound + 1;
1225978408cSSascha Wildner }
123