diff options
Diffstat (limited to 'usr/src/lib/print/libprint/common/nss_convert.c')
-rw-r--r-- | usr/src/lib/print/libprint/common/nss_convert.c | 207 |
1 files changed, 0 insertions, 207 deletions
diff --git a/usr/src/lib/print/libprint/common/nss_convert.c b/usr/src/lib/print/libprint/common/nss_convert.c deleted file mode 100644 index eaee6df5b2..0000000000 --- a/usr/src/lib/print/libprint/common/nss_convert.c +++ /dev/null @@ -1,207 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License (the "License"). - * You may not use this file except in compliance with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -/* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ - -#pragma ident "%Z%%M% %I% %E% SMI" - -/* - * This file contains routines necessary to convert a string buffer into - * a printer object. - */ - -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <sys/types.h> -#include <string.h> -#include <stdarg.h> -#include <syslog.h> - -#include <ns.h> -#include <list.h> - -#define ESCAPE_CHARS "\\\n=:" /* \, \n, =, : */ - -/* - * Just like strncat(3C), but escapes the supplied characters. - * This allows the escape character '\' and seperators to be part of the - * keys or values. - */ -char * -strncat_escaped(char *d, char *s, int len, char *escape) -{ - char *t = d; - - while ((*t != NULL) && (len > 0)) - len--, t++; - - if (escape == NULL) - escape = "\\"; - - while ((*s != NULL) && (len > 0)) { - if (strchr(escape, *s) != NULL) - len--, *t++ = '\\'; - len--, *t++ = *s++; - } - *t = NULL; - - return (d); -} - - - -char * -_cvt_printer_to_entry(ns_printer_t *printer, char *buf, int buflen) -{ - int i, len; - int bufferok = 1; - - (void) memset(buf, NULL, buflen); - - if ((printer == NULL) || (printer->attributes == NULL)) - return (NULL); - - if (snprintf(buf, buflen, "%s", printer->name) >= buflen) { - (void) memset(buf, NULL, buflen); - syslog(LOG_ERR, "_cvt_printer_to_entry: buffer overflow"); - return (NULL); - } - - if ((printer->aliases != NULL) && (printer->aliases[0] != NULL)) { - char **alias = printer->aliases; - - while (*alias != NULL) { - (void) strlcat(buf, "|", buflen); - (void) strncat_escaped(buf, *alias++, buflen, - ESCAPE_CHARS); - } - } - - if (strlcat(buf, ":", buflen) >= buflen) { - (void) memset(buf, NULL, buflen); - syslog(LOG_ERR, "_cvt_printer_to_entry: buffer overflow"); - return (NULL); - } - - len = strlen(buf); - - for (i = 0; printer->attributes[i] != NULL && bufferok; i++) { - ns_kvp_t *kvp = printer->attributes[i]; - - if (kvp->value == NULL) - continue; - (void) strlcat(buf, "\\\n\t:", buflen); - (void) strncat_escaped(buf, kvp->key, buflen, ESCAPE_CHARS); - (void) strlcat(buf, "=", buflen); - (void) strncat_escaped(buf, kvp->value, buflen, ESCAPE_CHARS); - if (strlcat(buf, ":", buflen) >= buflen) { - bufferok = 0; - } - } - - if (!bufferok) { - (void) memset(buf, NULL, buflen); - syslog(LOG_ERR, "_cvt_printer_to_entry: buffer overflow"); - return (NULL); - } - - if (strlen(buf) == len) { /* there were no attributes */ - (void) memset(buf, NULL, buflen); - buf = NULL; - } - - return (buf); -} - - -ns_printer_t * -_cvt_nss_entry_to_printer(char *entry, char *ns) -{ - char *name = NULL, - *key = NULL, - **aliases = NULL, - *cp, - buf[BUFSIZ]; - int in_namelist = 1, buf_pos = 0; - ns_printer_t *printer = NULL; - - if (entry == NULL) - return (NULL); - - (void) memset(buf, NULL, sizeof (buf)); - for (cp = entry; *cp != NULL; cp++) { - switch (*cp) { - case ':': /* end of kvp */ - if (in_namelist != 0) { - if (name == NULL) - name = strdup(buf); - else - aliases = (char **)list_append( - (void **)aliases, - (void *)strdup(buf)); - printer = (ns_printer_t *)ns_printer_create( - name, aliases, ns, NULL); - in_namelist = 0; - } else if (key != NULL) - (void) ns_set_value_from_string(key, buf, - printer); - (void) memset(buf, NULL, sizeof (buf)); - buf_pos = 0; - key = NULL; - break; - case '=': /* kvp seperator */ - if (key == NULL) { - key = strdup(buf); - (void) memset(buf, NULL, sizeof (buf)); - buf_pos = 0; - } else - buf[buf_pos++] = *cp; - break; - case '|': /* namelist seperator */ - if (in_namelist != 0) { - if (name == NULL) - name = strdup(buf); - else - aliases = (char **)list_append( - (void **)aliases, - (void *)strdup(buf)); - (void) memset(buf, NULL, sizeof (buf)); - buf_pos = 0; - } else /* add it to the buffer */ - buf[buf_pos++] = *cp; - break; - case '\\': /* escape char */ - buf[buf_pos++] = *(++cp); - break; - default: - buf[buf_pos++] = *cp; - } - - } - - if (key != NULL) - (void) ns_set_value_from_string(key, buf, printer); - - return (printer); -} |