The following commit has been merged in the master branch:
commit 46aadad359a9e4204cfe707f47e3cfceef47e709
Author: Guillem Jover <guil...@debian.org>
Date:   Fri Aug 19 22:59:53 2011 +0200

    u-a: Refactor --install argument checking into a new function

diff --git a/utils/update-alternatives.c b/utils/update-alternatives.c
index 2dd16f3..73ac954 100644
--- a/utils/update-alternatives.c
+++ b/utils/update-alternatives.c
@@ -2083,6 +2083,108 @@ alternative_evolve(struct alternative *a, struct 
alternative *b,
        }
 }
 
+/**
+ * Check the alternative installation arguments.
+ *
+ * That the caller doesn't mix links between alternatives, doesn't mix
+ * alternatives between slave/master, and that the various parameters
+ * are fine.
+ */
+static void
+alternative_check_install_args(struct alternative *inst_alt,
+                               struct fileset *fileset)
+{
+       struct alternative_map *alt_map_links, *alt_map_parent;
+       struct alternative *found;
+       struct slave_link *sl;
+       struct stat st;
+
+       /* Load information about all alternatives to check for mistakes. */
+       alt_map_links = alternative_map_new(NULL, NULL);
+       alt_map_parent = alternative_map_new(NULL, NULL);
+       alternative_map_load_tree(alt_map_links, alt_map_parent);
+
+       found = alternative_map_find(alt_map_parent, inst_alt->master_name);
+       if (found && strcmp(found->master_name, inst_alt->master_name) != 0) {
+               error(_("alternative %s can't be master: it is a slave of %s"),
+                     inst_alt->master_name, found->master_name);
+       }
+
+       found = alternative_map_find(alt_map_links, inst_alt->master_link);
+       if (found && strcmp(found->master_name, inst_alt->master_name) != 0) {
+               found = alternative_map_find(alt_map_parent,
+                                            found->master_name);
+               error(_("alternative link %s is already managed by %s."),
+                     inst_alt->master_link, found->master_name);
+       }
+
+       if (inst_alt->master_link[0] != '/')
+               error(_("alternative link is not absolute as it should be: %s"),
+                     inst_alt->master_link);
+
+       if (fileset->master_file[0] != '/')
+               error(_("alternative path is not absolute as it should be: %s"),
+                     fileset->master_file);
+
+       if (stat(fileset->master_file, &st) == -1 && errno == ENOENT)
+               error(_("alternative path %s doesn't exist."),
+                     fileset->master_file);
+
+       if (strpbrk(inst_alt->master_name, "/ \t"))
+               error(_("alternative name (%s) must not contain '/' "
+                       "and spaces."), inst_alt->master_name);
+
+       for (sl = inst_alt->slaves; sl; sl = sl->next) {
+               const char *file = fileset_get_slave(fileset, sl->name);
+
+               found = alternative_map_find(alt_map_parent, sl->name);
+               if (found &&
+                   strcmp(found->master_name, inst_alt->master_name) != 0) {
+                       char *msg;
+
+                       if (strcmp(found->master_name, sl->name) == 0)
+                               msg = _("it is a master alternative.");
+                       else
+                               xasprintf(&msg, _("it is a slave of %s"),
+                                         found->master_name);
+                       error(_("alternative %s can't be slave of %s: %s"),
+                             sl->name, inst_alt->master_name, msg);
+               }
+
+               found = alternative_map_find(alt_map_links, sl->link);
+               if (found &&
+                   strcmp(found->master_name, inst_alt->master_name) != 0) {
+                       error(_("alternative link %s is already "
+                               "managed by %s."), sl->link,
+                             found->master_name);
+               }
+               if (found) {
+                       struct slave_link *sl2;
+
+                       for (sl2 = found->slaves; sl2; sl2 = sl2->next)
+                               if (strcmp(sl2->link, sl->link) == 0)
+                                       break;
+                       if (sl2 && strcmp(sl2->name, sl->name) != 0)
+                               error(_("alternative link %s is already "
+                                       "managed by %s (slave of %s)."),
+                                     sl->link, sl2->name,
+                                     found->master_name);
+               }
+
+               if (sl->link[0] != '/')
+                       error(_("alternative link is not absolute as "
+                               "it should be: %s"), sl->link);
+
+               if (!file || file[0] != '/')
+                       error(_("alternative path is not absolute as "
+                               "it should be: %s"), file);
+
+               if (strpbrk(sl->name, "/ \t"))
+                       error(_("alternative name (%s) must not contain '/' "
+                               "and spaces."), sl->name);
+       }
+}
+
 /*
  * Main program
  */
@@ -2249,106 +2351,8 @@ main(int argc, char **argv)
                           "--config, --set, --set-selections, --install, "
                           "--remove, --all, --remove-all or --auto"));
 
-       /* Check that caller don't mix links between alternatives and don't mix
-        * alternatives between slave/master, and that the various parameters
-        * are fine. */
-       if (strcmp(action, "install") == 0) {
-               struct alternative_map *alt_map_links, *alt_map_parent;
-               struct alternative *found;
-               struct stat st;
-               struct slave_link *sl;
-
-               /* Load information about all alternatives to be able to
-                * check for mistakes. */
-               alt_map_links = alternative_map_new(NULL, NULL);
-               alt_map_parent = alternative_map_new(NULL, NULL);
-               alternative_map_load_tree(alt_map_links, alt_map_parent);
-
-               found = alternative_map_find(alt_map_parent,
-                                            inst_alt->master_name);
-               if (found && strcmp(found->master_name,
-                                   inst_alt->master_name) != 0) {
-                       error(_("alternative %s can't be master: "
-                               "it is a slave of %s"),
-                             inst_alt->master_name, found->master_name);
-               }
-
-               found = alternative_map_find(alt_map_links,
-                                            inst_alt->master_link);
-               if (found && strcmp(found->master_name,
-                                   inst_alt->master_name) != 0) {
-                       found = alternative_map_find(alt_map_parent,
-                                                    found->master_name);
-                       error(_("alternative link %s is already managed by 
%s."),
-                             inst_alt->master_link, found->master_name);
-               }
-
-               if (inst_alt->master_link[0] != '/')
-                       error(_("alternative link is not absolute as it "
-                               "should be: %s"), inst_alt->master_link);
-
-               if (fileset->master_file[0] != '/')
-                       error(_("alternative path is not absolute as it "
-                               "should be: %s"), fileset->master_file);
-
-               if (stat(fileset->master_file, &st) == -1 && errno == ENOENT)
-                       error(_("alternative path %s doesn't exist."),
-                             fileset->master_file);
-
-               if (strpbrk(inst_alt->master_name, "/ \t"))
-                       error(_("alternative name (%s) must not contain '/' "
-                               "and spaces."), inst_alt->master_name);
-
-               for (sl = inst_alt->slaves; sl; sl = sl->next) {
-                       const char *file = fileset_get_slave(fileset, sl->name);
-
-                       found = alternative_map_find(alt_map_parent, sl->name);
-                       if (found && strcmp(found->master_name,
-                                           inst_alt->master_name) != 0) {
-                               char *msg;
-
-                               if (strcmp(found->master_name, sl->name) == 0)
-                                       msg = _("it is a master alternative.");
-                               else
-                                       xasprintf(&msg, _("it is a slave of 
%s"),
-                                                 found->master_name);
-                               error(_("alternative %s can't be slave of "
-                                       "%s: %s"), sl->name,
-                                     inst_alt->master_name, msg);
-                       }
-
-                       found = alternative_map_find(alt_map_links, sl->link);
-                       if (found && strcmp(found->master_name,
-                                           inst_alt->master_name) != 0) {
-                               error(_("alternative link %s is already "
-                                       "managed by %s."), sl->link,
-                                     found->master_name);
-                       }
-                       if (found) {
-                               struct slave_link *sl2;
-                               for (sl2 = found->slaves; sl2; sl2 = sl2->next)
-                                       if (strcmp(sl2->link, sl->link) == 0)
-                                               break;
-                               if (sl2 && strcmp(sl2->name, sl->name) != 0)
-                                       error(_("alternative link %s is already 
"
-                                               "managed by %s (slave of %s)."),
-                                             sl->link, sl2->name,
-                                             found->master_name);
-                       }
-
-                       if (sl->link[0] != '/')
-                               error(_("alternative link is not absolute as "
-                                       "it should be: %s"), sl->link);
-
-                       if (!file || file[0] != '/')
-                               error(_("alternative path is not absolute as "
-                                       "it should be: %s"), file);
-
-                       if (strpbrk(sl->name, "/ \t"))
-                               error(_("alternative name (%s) must not contain 
'/' "
-                                       "and spaces."), sl->name);
-               }
-       }
+       if (strcmp(action, "install") == 0)
+               alternative_check_install_args(inst_alt, fileset);
 
        /* Handle actions. */
        if (strcmp(action, "all") == 0) {

-- 
dpkg's main repository


-- 
To UNSUBSCRIBE, email to debian-dpkg-cvs-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to