1: #ifndef lint
2: static char sccsid[] = "@(#)string.c 3.8 4/24/85";
3: #endif
4:
5: /*
6: * Copyright (c) 1983 Regents of the University of California,
7: * All rights reserved. Redistribution permitted subject to
8: * the terms of the Berkeley Software License Agreement.
9: */
10:
11: #include "string.h"
12:
13: char *malloc();
14: char *sprintf();
15:
16: char *
17: str_cpy(s)
18: register char *s;
19: {
20: char *str;
21: register char *p;
22:
23: str = p = str_alloc(strlen(s) + 1);
24: if (p == 0)
25: return 0;
26: while (*p++ = *s++)
27: ;
28: return str;
29: }
30:
31: char *
32: str_ncpy(s, n)
33: register char *s;
34: register n;
35: {
36: int l = strlen(s);
37: char *str;
38: register char *p;
39:
40: if (n > l)
41: n = l;
42: str = p = str_alloc(n + 1);
43: if (p == 0)
44: return 0;
45: while (--n >= 0)
46: *p++ = *s++;
47: *p = 0;
48: return str;
49: }
50:
51: char *
52: str_itoa(i)
53: int i;
54: {
55: char buf[30];
56:
57: (void) sprintf(buf, "%d", i);
58: return str_cpy(buf);
59: }
60:
61: char *
62: str_cat(s1, s2)
63: char *s1, *s2;
64: {
65: char *str;
66: register char *p, *q;
67:
68: str = p = str_alloc(strlen(s1) + strlen(s2) + 1);
69: if (p == 0)
70: return 0;
71: for (q = s1; *p++ = *q++;)
72: ;
73: for (q = s2, p--; *p++ = *q++;)
74: ;
75: return str;
76: }
77:
78: /*
79: * match s against p.
80: * s can be a prefix of p with at least min characters.
81: */
82: str_match(s, p, min)
83: register char *s, *p;
84: register min;
85: {
86: for (; *s && *p && *s == *p; s++, p++, min--)
87: ;
88: return *s == *p || *s == 0 && min <= 0;
89: }
90:
91: #ifdef STR_DEBUG
92: char *
93: str_alloc(l)
94: int l;
95: {
96: register struct string *s;
97:
98: s = (struct string *) malloc((unsigned)l + str_offset);
99: if (s == 0)
100: return 0;
101: if (str_head.s_forw == 0)
102: str_head.s_forw = str_head.s_back = &str_head;
103: s->s_forw = str_head.s_forw;
104: s->s_back = &str_head;
105: str_head.s_forw = s;
106: s->s_forw->s_back = s;
107: return s->s_data;
108: }
109:
110: str_free(str)
111: char *str;
112: {
113: register struct string *s;
114:
115: for (s = str_head.s_forw; s != &str_head && s->s_data != str;
116: s = s->s_forw)
117: ;
118: if (s == &str_head)
119: abort();
120: s->s_back->s_forw = s->s_forw;
121: s->s_forw->s_back = s->s_back;
122: free((char *)s);
123: }
124: #endif
Defined functions
Defined variables
sccsid
defined in line
2;
never used