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