libopkg: fix pkg_set_ptr() to properly set NULL pointers
[oweals/opkg-lede.git] / libopkg / conffile.c
1 /* conffile.c - the opkg package management system
2
3    Carl D. Worth
4
5    Copyright (C) 2001 University of Southern California
6
7    This program is free software; you can redistribute it and/or
8    modify it under the terms of the GNU General Public License as
9    published by the Free Software Foundation; either version 2, or (at
10    your option) any later version.
11
12    This program is distributed in the hope that it will be useful, but
13    WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15    General Public License for more details.
16 */
17
18 #include <stdio.h>
19 #include <stdlib.h>
20
21 #include "opkg_message.h"
22 #include "conffile.h"
23 #include "file_util.h"
24 #include "sprintf_alloc.h"
25 #include "opkg_conf.h"
26
27 int conffile_init(conffile_t * conffile, const char *file_name,
28                   const char *md5sum)
29 {
30         return nv_pair_init(conffile, file_name, md5sum);
31 }
32
33 void conffile_deinit(conffile_t * conffile)
34 {
35         nv_pair_deinit(conffile);
36 }
37
38 int conffile_has_been_modified(conffile_t * conffile)
39 {
40         char *chksum;
41         char *filename = conffile->name;
42         char *root_filename;
43         int ret = 1;
44
45         if (conffile->value == NULL) {
46                 opkg_msg(NOTICE, "Conffile %s has no md5sum.\n",
47                          conffile->name);
48                 return 1;
49         }
50
51         root_filename = root_filename_alloc(filename);
52
53 #ifdef HAVE_MD5
54         if (conffile->value && strlen(conffile->value) > 33) {
55                 chksum = file_sha256sum_alloc(root_filename);
56         } else {
57                 chksum = file_md5sum_alloc(root_filename);
58         }
59 #else
60         chksum = file_sha256sum_alloc(root_filename);
61 #endif
62         if (chksum && (ret = strcmp(chksum, conffile->value))) {
63                 opkg_msg(INFO, "Conffile %s:\n\told chk=%s\n\tnew chk=%s\n",
64                          conffile->name, chksum, conffile->value);
65         }
66
67         free(root_filename);
68         if (chksum)
69                 free(chksum);
70
71         return ret;
72 }