--- bash-2.05b/copy_cmd.c	2002-03-12 20:41:03.000000000 +0100
+++ hush-bash-2.05b/copy_cmd.c	2004-10-05 23:12:52.000000000 +0200
@@ -35,6 +35,10 @@
 static PATTERN_LIST *copy_case_clause __P((PATTERN_LIST *));
 static PATTERN_LIST *copy_case_clauses __P((PATTERN_LIST *));
 static FOR_COM *copy_for_command __P((FOR_COM *));
+#ifdef HUSH
+static ON_COM *copy_on_command __P((ON_COM *));
+static TRANSLATE_COM *copy_translate_command __P((TRANSLATE_COM *));
+#endif /* HUSH */
 #if defined (ARITH_FOR_COMMAND)
 static ARITH_FOR_COM *copy_arith_for_command __P((ARITH_FOR_COM *));
 #endif
@@ -158,6 +162,30 @@
   return (REVERSE_LIST (new_list, REDIRECT *));
 }
 
+#ifdef HUSH
+static ON_COM *
+copy_on_command (ON_COM *com)
+{
+  ON_COM *new_on;
+
+  new_on = (ON_COM *) xmalloc (sizeof (ON_COM));
+  new_on->flags = com->flags;
+  new_on->operation = copy_word (com->operation);
+  new_on->action = copy_command (com->action);
+  return (new_on);
+}
+
+static TRANSLATE_COM *
+copy_translate_command (TRANSLATE_COM *com)
+{
+  TRANSLATE_COM *new_translate;
+
+  new_translate = (TRANSLATE_COM *) xmalloc (sizeof(TRANSLATE_COM));
+  new_translate->flags = com->flags;
+  new_translate->modifiers = copy_word_list(com->modifiers);
+  return (new_translate);
+}
+
 static FOR_COM *
 copy_for_command (com)
      FOR_COM *com;
@@ -171,6 +199,7 @@
   new_for->action = copy_command (com->action);
   return (new_for);
 }
+#endif /* HUSH */
 
 #if defined (ARITH_FOR_COMMAND)
 static ARITH_FOR_COM *
@@ -338,7 +367,16 @@
 
   switch (command->type)
     {
-      case cm_for:
+#ifdef HUSH
+    case cm_on:
+      new_command->value.On = copy_on_command (command->value.On);
+      break;
+
+    case cm_translate:
+      new_command->value.Translate = copy_translate_command (command->value.Translate);
+      break;
+#endif /* HUSH */
+    case cm_for:
 	new_command->value.For = copy_for_command (command->value.For);
 	break;
 
