8322 nl: misleading-indentation
[unleashed/tickless.git] / usr / src / cmd / lp / lib / msgs / _putmessage.c
blob66a6796f5d9833a0b35cc1de3aede9baee33049e
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
7 * with the License.
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
20 * CDDL HEADER END
22 /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
23 /* All Rights Reserved */
26 #ident "%Z%%M% %I% %E% SMI" /* SVr4.0 1.10 */
27 /* LINTLIBRARY */
29 # include <stdarg.h>
30 # include <string.h>
31 # include <errno.h>
33 # include "msgs.h"
35 extern char *_lp_msg_fmts[];
36 extern int errno;
38 /* VARARGS */
39 #if defined(__STDC__)
40 int _putmessage ( char * buf, short type, va_list arg )
41 #else
42 int _putmessage (buf, type, arg)
43 char *buf;
44 short type;
45 va_list arg;
46 #endif
48 char *fmt;
49 char *t_string;
50 int size = 0;
51 long t_long;
52 short t_short;
54 if (type < 0 || type > LAST_MESSAGE)
56 errno = EBADMSG;
57 return(-1);
60 if (buf)
61 (void) htos(buf + MESG_TYPE, type);
63 size = MESG_LEN;
65 fmt = _lp_msg_fmts[type];
67 while (*fmt != '\0')
68 switch(*fmt++)
70 case 'H':
71 t_short = (short) va_arg(arg, int);
72 if (buf)
73 (void) htos(buf + size, t_short);
75 size += 4;
76 break;
78 case 'L':
79 t_long = (long) va_arg(arg, int);
80 if (buf)
81 (void) ltos(buf + size, t_long);
83 size += 8;
84 break;
86 case 'S':
87 t_string = (char *) va_arg(arg, char *);
88 t_short = (t_string? strlen(t_string) : 0) + 1;
90 if (buf)
91 (void) htos(buf + size, t_short);
93 size += 4;
95 if (buf)
96 if (t_string)
97 (void) memcpy(buf + size, t_string, t_short);
98 else
99 (buf + size)[0] = 0;
101 size += t_short;
102 break;
104 case 'D':
105 t_short = (short) va_arg(arg, int) + 1;
106 t_string = (char *) va_arg(arg, char *);
108 if (buf)
109 (void) htos(buf + size, t_short);
111 size += 4;
113 if (buf)
114 if (t_string)
116 (void) memcpy(buf + size, t_string, t_short);
117 buf[size + t_short - 1] = '\0';
119 else
120 *(buf + size) = '\0';
122 size += t_short;
123 break;
127 if (buf)
128 *(buf + size) = '\0';
130 size++; /* Add a null, just on general principle */
132 if (buf)
133 (void) htos(buf + MESG_SIZE, size);
135 return(size);