xref: /openbsd-src/lib/libc/yp/ypexclude.c (revision fa713987d76a93563f4184563f8d4ffc677f4041)
1*fa713987Sderaadt /*	$OpenBSD: ypexclude.c,v 1.2 2015/08/20 21:49:29 deraadt Exp $ */
27584db8dSschwarze /*
37584db8dSschwarze  * Copyright (c) 2008 Theo de Raadt
47584db8dSschwarze  * Copyright (c) 1995, 1996, Jason Downs.  All rights reserved.
57584db8dSschwarze  *
67584db8dSschwarze  * Redistribution and use in source and binary forms, with or without
77584db8dSschwarze  * modification, are permitted provided that the following conditions
87584db8dSschwarze  * are met:
97584db8dSschwarze  * 1. Redistributions of source code must retain the above copyright
107584db8dSschwarze  *    notice, this list of conditions and the following disclaimer.
117584db8dSschwarze  * 2. Redistributions in binary form must reproduce the above copyright
127584db8dSschwarze  *    notice, this list of conditions and the following disclaimer in the
137584db8dSschwarze  *    documentation and/or other materials provided with the distribution.
147584db8dSschwarze  * 3. Neither the name of the University of California nor the names of its
157584db8dSschwarze  *    contributors may be used to endorse or promote products derived from
167584db8dSschwarze  *    this software without specific prior written permission.
177584db8dSschwarze  *
187584db8dSschwarze  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
197584db8dSschwarze  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
207584db8dSschwarze  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
217584db8dSschwarze  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
227584db8dSschwarze  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
237584db8dSschwarze  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
247584db8dSschwarze  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
257584db8dSschwarze  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
267584db8dSschwarze  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
277584db8dSschwarze  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
287584db8dSschwarze  * SUCH DAMAGE.
297584db8dSschwarze  */
307584db8dSschwarze 
317584db8dSschwarze #include <stdlib.h>
327584db8dSschwarze #include <string.h>
337584db8dSschwarze #include "ypexclude.h"
347584db8dSschwarze 
357584db8dSschwarze int
__ypexclude_add(struct _ypexclude ** headp,const char * name)367584db8dSschwarze __ypexclude_add(struct _ypexclude **headp, const char *name)
377584db8dSschwarze {
387584db8dSschwarze 	struct _ypexclude *new;
397584db8dSschwarze 
407584db8dSschwarze 	if (name[0] == '\0')    /* skip */
417584db8dSschwarze 		return (0);
427584db8dSschwarze 
43*fa713987Sderaadt 	new = malloc(sizeof(struct _ypexclude));
447584db8dSschwarze 	if (new == NULL)
457584db8dSschwarze 		return (1);
467584db8dSschwarze 	new->name = strdup(name);
477584db8dSschwarze 	if (new->name == NULL) {
487584db8dSschwarze 		free(new);
497584db8dSschwarze 		return (1);
507584db8dSschwarze 	}
517584db8dSschwarze 
527584db8dSschwarze 	new->next = *headp;
537584db8dSschwarze 	*headp = new;
547584db8dSschwarze 	return (0);
557584db8dSschwarze }
567584db8dSschwarze 
577584db8dSschwarze int
__ypexclude_is(struct _ypexclude ** headp,const char * name)587584db8dSschwarze __ypexclude_is(struct _ypexclude **headp, const char *name)
597584db8dSschwarze {
607584db8dSschwarze 	struct _ypexclude *curr;
617584db8dSschwarze 
627584db8dSschwarze 	for (curr = *headp; curr; curr = curr->next) {
637584db8dSschwarze 		if (strcmp(curr->name, name) == 0)
647584db8dSschwarze 			return (1);     /* excluded */
657584db8dSschwarze 	}
667584db8dSschwarze 	return (0);
677584db8dSschwarze }
687584db8dSschwarze 
697584db8dSschwarze void
__ypexclude_free(struct _ypexclude ** headp)707584db8dSschwarze __ypexclude_free(struct _ypexclude **headp)
717584db8dSschwarze {
727584db8dSschwarze 	struct _ypexclude *curr, *next;
737584db8dSschwarze 
747584db8dSschwarze 	for (curr = *headp; curr; curr = next) {
757584db8dSschwarze 		next = curr->next;
767584db8dSschwarze 		free((void *)curr->name);
777584db8dSschwarze 		free(curr);
787584db8dSschwarze 	}
797584db8dSschwarze 	*headp = NULL;
807584db8dSschwarze }
81