1/*
2 * Copyright (c) 1999, 2008 Apple Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 */
23/*
24 * Mach Operating System
25 * Copyright (c) 1991,1990 Carnegie Mellon University
26 * All Rights Reserved.
27 *
28 * Permission to use, copy, modify and distribute this software and its
29 * documentation is hereby granted, provided that both the copyright
30 * notice and this permission notice appear in all copies of the
31 * software, derivative works or modified versions, and any portions
32 * thereof, and that both notices appear in supporting documentation.
33 *
34 * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS
35 * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
36 * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
37 *
38 * Carnegie Mellon requests users of this software to return to
39 *
40 *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
41 *  School of Computer Science
42 *  Carnegie Mellon University
43 *  Pittsburgh PA 15213-3890
44 *
45 * any improvements or extensions that they make and grant Carnegie the
46 * rights to redistribute these changes.
47 */
48
49#include <mach/boolean.h>
50#include <ctype.h>
51#include "error.h"
52#include "alloc.h"
53#include "strdefs.h"
54
55string_t
56strmake(char *string)
57{
58  register string_t saved;
59
60  saved = malloc(strlen(string) + 1);
61  if (saved == strNULL)
62    fatal("strmake('%s'): %s", string, strerror(errno));
63  return strcpy(saved, string);
64}
65
66string_t
67strconcat(string_t left, string_t right)
68{
69  register string_t saved;
70
71  saved = malloc(strlen(left) + strlen(right) + 1);
72  if (saved == strNULL)
73    fatal("strconcat('%s', '%s'): %s", left, right, strerror(errno));
74  return strcat(strcpy(saved, left), right);
75}
76
77string_t
78strphrase(string_t left, string_t right)
79{
80  string_t saved;
81  string_t current;
82  size_t llen;
83
84  llen = strlen(left);
85  saved = malloc(llen + strlen(right) + 2);
86  if (saved == strNULL)
87    fatal("strphrase('%s', '%s'): %s", left, right, strerror(errno));
88  strcpy(saved, left);
89  current = saved + llen;
90  *(current++) = ' ';
91  strcpy(current, right);
92  free(left);
93  return(saved);
94}
95
96void
97strfree(string_t string)
98{
99  free(string);
100}
101
102char *
103strbool(boolean_t bool)
104{
105  if (bool)
106    return "TRUE";
107  else
108    return "FALSE";
109}
110
111char *
112strstring(string_t string)
113{
114  if (string == strNULL)
115    return "NULL";
116  else
117    return string;
118}
119
120char *
121toupperstr(char *p)
122{
123  register char *s = p;
124  char c;
125
126  while ((c = *s)) {
127    if (islower(c))
128      *s = toupper(c);
129    s++;
130  }
131  return(p);
132}
133