summaryrefslogtreecommitdiffstats
path: root/package/opkg/patches/013-add-list-changed-conffiles.patch
blob: 1824ceaa701e919405ce0d7c153e4ce5ecaa32ea (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
--- a/libopkg/opkg_cmd.c
+++ b/libopkg/opkg_cmd.c
@@ -617,6 +617,39 @@ opkg_list_installed_cmd(int argc, char *
 }
 
 static int
+opkg_list_changed_conffiles_cmd(int argc, char **argv)
+{
+     int i ;
+     pkg_vec_t *available;
+     pkg_t *pkg;
+     char *pkg_name = NULL;
+     conffile_list_elt_t *iter;
+     conffile_t *cf;
+
+     if (argc > 0) {
+	  pkg_name = argv[0];
+     }
+     available = pkg_vec_alloc();
+     pkg_hash_fetch_all_installed(available);
+     pkg_vec_sort(available, pkg_compare_names);
+     for (i=0; i < available->len; i++) {
+	  pkg = available->pkgs[i];
+	  /* if we have package name or pattern and pkg does not match, then skip it */
+	  if (pkg_name && fnmatch(pkg_name, pkg->name, 0))
+	    continue;
+	  if (nv_pair_list_empty(&pkg->conffiles))
+	    continue;
+	  for (iter = nv_pair_list_first(&pkg->conffiles); iter; iter = nv_pair_list_next(&pkg->conffiles, iter)) {
+	    cf = (conffile_t *)iter->data;
+	    if (cf->name && cf->value && conffile_has_been_modified(cf))
+          printf("%s\n", cf->name);
+	  }
+     }
+     pkg_vec_free(available);
+     return 0;
+}
+
+static int
 opkg_list_upgradable_cmd(int argc, char **argv)
 {
     struct active_list *head = prepare_upgrade_list();
@@ -1188,6 +1221,8 @@ static opkg_cmd_t cmds[] = {
      {"list-installed", 0, (opkg_cmd_fun_t)opkg_list_installed_cmd, PFM_SOURCE},
      {"list_upgradable", 0, (opkg_cmd_fun_t)opkg_list_upgradable_cmd, PFM_SOURCE},
      {"list-upgradable", 0, (opkg_cmd_fun_t)opkg_list_upgradable_cmd, PFM_SOURCE},
+     {"list_changed_conffiles", 0, (opkg_cmd_fun_t)opkg_list_changed_conffiles_cmd, PFM_SOURCE},
+     {"list-changed-conffiles", 0, (opkg_cmd_fun_t)opkg_list_changed_conffiles_cmd, PFM_SOURCE},
      {"info", 0, (opkg_cmd_fun_t)opkg_info_cmd, 0},
      {"flag", 1, (opkg_cmd_fun_t)opkg_flag_cmd, PFM_DESCRIPTION|PFM_SOURCE},
      {"status", 0, (opkg_cmd_fun_t)opkg_status_cmd, PFM_DESCRIPTION|PFM_SOURCE},
--- a/src/opkg-cl.c
+++ b/src/opkg-cl.c
@@ -228,6 +228,7 @@ usage()
 	printf("\tlist			List available packages\n");
 	printf("\tlist-installed		List installed packages\n");
 	printf("\tlist-upgradable		List installed and upgradable packages\n");
+	printf("\tlist-changed-conffiles	List user modified configuration files\n");
 	printf("\tfiles <pkg>		List files belonging to <pkg>\n");
 	printf("\tsearch <file|regexp>	List package providing <file>\n");
 	printf("\tinfo [pkg|regexp]	Display all info for <pkg>\n");
@@ -331,6 +332,8 @@ main(int argc, char *argv[])
 	    !strcmp(cmd_name,"compare-versions") ||
 	    !strcmp(cmd_name,"list_installed") ||
 	    !strcmp(cmd_name,"list-installed") ||
+	    !strcmp(cmd_name,"list_changed_conffiles") ||
+	    !strcmp(cmd_name,"list-changed-conffiles") ||
 	    !strcmp(cmd_name,"status") )
 		noreadfeedsfile = 1;