xref: /freebsd/lib/libc/posix1e/extattr.c (revision 613100918de03164200eb28f7db1a2b1d701a697)
11bc2362eSRobert Watson /*-
21bc2362eSRobert Watson  * Copyright (c) 2001 Robert N. M. Watson
31bc2362eSRobert Watson  * All rights reserved.
41bc2362eSRobert Watson  *
51bc2362eSRobert Watson  * Redistribution and use in source and binary forms, with or without
61bc2362eSRobert Watson  * modification, are permitted provided that the following conditions
71bc2362eSRobert Watson  * are met:
81bc2362eSRobert Watson  * 1. Redistributions of source code must retain the above copyright
91bc2362eSRobert Watson  *    notice, this list of conditions and the following disclaimer.
101bc2362eSRobert Watson  * 2. Redistributions in binary form must reproduce the above copyright
111bc2362eSRobert Watson  *    notice, this list of conditions and the following disclaimer in the
121bc2362eSRobert Watson  *    documentation and/or other materials provided with the distribution.
131bc2362eSRobert Watson  *
141bc2362eSRobert Watson  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
151bc2362eSRobert Watson  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
161bc2362eSRobert Watson  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
171bc2362eSRobert Watson  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
181bc2362eSRobert Watson  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
191bc2362eSRobert Watson  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
201bc2362eSRobert Watson  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
211bc2362eSRobert Watson  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
221bc2362eSRobert Watson  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
231bc2362eSRobert Watson  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
241bc2362eSRobert Watson  * SUCH DAMAGE.
251bc2362eSRobert Watson  */
261bc2362eSRobert Watson /*
271bc2362eSRobert Watson  * TrustedBSD: Utility functions for extended attributes.
281bc2362eSRobert Watson  */
291bc2362eSRobert Watson 
30333fc21eSDavid E. O'Brien #include <sys/cdefs.h>
31333fc21eSDavid E. O'Brien __FBSDID("$FreeBSD$");
32333fc21eSDavid E. O'Brien 
331bc2362eSRobert Watson #include <sys/types.h>
341bc2362eSRobert Watson #include <sys/extattr.h>
351bc2362eSRobert Watson 
361bc2362eSRobert Watson #include <errno.h>
3761310091SStefan Farfeleder #include <libutil.h>
381bc2362eSRobert Watson #include <string.h>
391bc2362eSRobert Watson 
401bc2362eSRobert Watson int
41d51048c9SRobert Watson extattr_namespace_to_string(int attrnamespace, char **string)
421bc2362eSRobert Watson {
431bc2362eSRobert Watson 
44d51048c9SRobert Watson 	switch(attrnamespace) {
451bc2362eSRobert Watson 	case EXTATTR_NAMESPACE_USER:
4692369d84SBrian Feldman 		if (string != NULL)
471bc2362eSRobert Watson 			*string = strdup(EXTATTR_NAMESPACE_USER_STRING);
481bc2362eSRobert Watson 		return (0);
491bc2362eSRobert Watson 
501bc2362eSRobert Watson 	case EXTATTR_NAMESPACE_SYSTEM:
5192369d84SBrian Feldman 		if (string != NULL)
521bc2362eSRobert Watson 			*string = strdup(EXTATTR_NAMESPACE_SYSTEM_STRING);
531bc2362eSRobert Watson 		return (0);
541bc2362eSRobert Watson 
551bc2362eSRobert Watson 	default:
561bc2362eSRobert Watson 		errno = EINVAL;
571bc2362eSRobert Watson 		return (-1);
581bc2362eSRobert Watson 	}
591bc2362eSRobert Watson }
601bc2362eSRobert Watson 
611bc2362eSRobert Watson int
62d51048c9SRobert Watson extattr_string_to_namespace(const char *string, int *attrnamespace)
631bc2362eSRobert Watson {
641bc2362eSRobert Watson 
651bc2362eSRobert Watson 	if (!strcmp(string, EXTATTR_NAMESPACE_USER_STRING)) {
66d51048c9SRobert Watson 		if (attrnamespace != NULL)
67d51048c9SRobert Watson 			*attrnamespace = EXTATTR_NAMESPACE_USER;
681bc2362eSRobert Watson 		return (0);
691bc2362eSRobert Watson 	} else if (!strcmp(string, EXTATTR_NAMESPACE_SYSTEM_STRING)) {
70d51048c9SRobert Watson 		if (attrnamespace != NULL)
71d51048c9SRobert Watson 			*attrnamespace = EXTATTR_NAMESPACE_SYSTEM;
721bc2362eSRobert Watson 		return (0);
731bc2362eSRobert Watson 	} else {
741bc2362eSRobert Watson 		errno = EINVAL;
751bc2362eSRobert Watson 		return (-1);
761bc2362eSRobert Watson 	}
771bc2362eSRobert Watson }
78