1/* $NetBSD: balpar.c,v 1.2 2017/02/14 01:16:49 christos Exp $ */ 2 3/*++ 4/* NAME 5/* balpar 3 6/* SUMMARY 7/* determine length of string in parentheses 8/* SYNOPSIS 9/* #include <stringops.h> 10/* 11/* size_t balpar(string, parens) 12/* const char *string; 13/* const char *parens; 14/* DESCRIPTION 15/* balpar() determines the length of a string enclosed in 16/* the specified parentheses, zero in case of error. 17/* SEE ALSO 18/* A balpar() routine appears in Brian W. Kernighan, P.J. Plauger: 19/* "Software Tools", Addison-Wesley 1976. This function is different. 20/* LICENSE 21/* .ad 22/* .fi 23/* The Secure Mailer license must be distributed with this software. 24/* AUTHOR(S) 25/* Wietse Venema 26/* IBM T.J. Watson Research 27/* P.O. Box 704 28/* Yorktown Heights, NY 10598, USA 29/*--*/ 30 31/* System library. */ 32 33#include <sys_defs.h> 34 35/* Utility library. */ 36 37#include <stringops.h> 38 39/* balpar - return length of {text} */ 40 41size_t balpar(const char *string, const char *parens) 42{ 43 const char *cp; 44 int level; 45 int ch; 46 47 if (*string != parens[0]) 48 return (0); 49 for (level = 1, cp = string + 1; (ch = *cp) != 0; cp++) { 50 if (ch == parens[1]) { 51 if (--level == 0) 52 return (cp - string + 1); 53 } else if (ch == parens[0]) { 54 level++; 55 } 56 } 57 return (0); 58} 59