xref: /dflybsd-src/usr.sbin/makefs/cd9660/cd9660_strings.c (revision 811c20360d3976dd91a7d45accefc6ccb109f33b)
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