xref: /netbsd-src/external/bsd/pkg_install/dist/lib/automatic.c (revision 404fbe5fb94ca1e054339640cabb2801ce52dd30)
1 /*	$NetBSD: automatic.c,v 1.1.1.1 2008/09/30 19:00:26 joerg Exp $	*/
2 
3 /*-
4  * Copyright (c) 2005 The NetBSD Foundation, Inc.
5  * All rights reserved.
6  *
7  * This code is derived from software contributed to The NetBSD Foundation
8  * by Dieter Baron and Thomas Klausner.
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions
12  * are met:
13  * 1. Redistributions of source code must retain the above copyright
14  *    notice, this list of conditions and the following disclaimer.
15  * 2. Redistributions in binary form must reproduce the above copyright
16  *    notice, this list of conditions and the following disclaimer in the
17  *    documentation and/or other materials provided with the distribution.
18  * 3. Neither the name of The NetBSD Foundation nor the names of its
19  *    contributors may be used to endorse or promote products derived
20  *    from this software without specific prior written permission.
21  *
22  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
23  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
24  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
25  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
26  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
27  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
28  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
29  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
30  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
31  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32  * POSSIBILITY OF SUCH DAMAGE.
33  */
34 
35 #if HAVE_CONFIG_H
36 #include "config.h"
37 #endif
38 #include <nbcompat.h>
39 #if HAVE_SYS_CDEFS_H
40 #include <sys/cdefs.h>
41 #endif
42 #ifndef lint
43 __RCSID("$NetBSD: automatic.c,v 1.1.1.1 2008/09/30 19:00:26 joerg Exp $");
44 #endif
45 
46 #if HAVE_ASSERT_H
47 #include <assert.h>
48 #endif
49 #if HAVE_ERR_H
50 #include <err.h>
51 #endif
52 #if HAVE_ERRNO_H
53 #include <errno.h>
54 #endif
55 #if HAVE_FCNTL_H
56 #include <fcntl.h>
57 #endif
58 #if HAVE_STRING_H
59 #include <string.h>
60 #endif
61 #if HAVE_STDLIB_H
62 #include <stdlib.h>
63 #endif
64 #if HAVE_SYS_STAT_H
65 #include <sys/stat.h>
66 #endif
67 #include "lib.h"
68 
69 Boolean
70 is_automatic_installed(const char *pkg)
71 {
72 	char *filename, *value;
73 	Boolean ret;
74 
75 	assert(pkg[0] != '/');
76 
77 	filename = pkgdb_pkg_file(pkg, INSTALLED_INFO_FNAME);
78 
79 	value = var_get(filename, AUTOMATIC_VARNAME);
80 
81 	if (value && strcasecmp(value, "yes") == 0)
82 	    ret = TRUE;
83 	else
84 	    ret = FALSE;
85 
86 	free(value);
87 	free(filename);
88 
89 	return ret;
90 }
91 
92 int
93 mark_as_automatic_installed(const char *pkg, int value)
94 {
95 	char *filename;
96 	int retval;
97 
98 	assert(pkg[0] != '/');
99 
100 	filename = pkgdb_pkg_file(pkg, INSTALLED_INFO_FNAME);
101 
102 	retval = var_set(filename, AUTOMATIC_VARNAME, value ? "yes" : NULL);
103 
104 	free(filename);
105 
106 	return retval;
107 }
108