Workaround fuer Driverfehler

to_struct im aktuellen Driver hat einen Fehler bei der
Konvertierung von structs in structs. Daher wird in
diesem Fall zunaechst in ein Array und dann in die
Ziel-struct konvertiert.

Change-Id: I2037a6888e2bf95c81775ab8a20e294910a59fa9
diff --git a/p/daemon/channeld.c b/p/daemon/channeld.c
index 9ee640d..843bc58 100644
--- a/p/daemon/channeld.c
+++ b/p/daemon/channeld.c
@@ -687,9 +687,16 @@
   }
   // Einige Daten merken, damit sie reaktiviert werden kann, wenn jemand
   // einloggt, der die Ebene abonniert hat.
+#if __VERSION_MINOR__ == 6 && __VERSION_MICRO__ < 4
+  // Workaround fuer Bug in to_struct: erst in array wandeln, dann in die
+  // richtige struct.
+  m_add(channelC, chname, to_struct(to_array(channels[chname])[0..3],
+                                    (<channel_base_s>)),
+        time());
+#else
   m_add(channelC, chname, to_struct(channels[chname], (<channel_base_s>)),
         time());
-
+#endif
   // aktive Ebene loeschen bzw. deaktivieren.
   m_delete(channels, chname);
   // History wird nicht geloescht, damit sie noch verfuegbar ist, wenn die
@@ -952,7 +959,13 @@
         && object_name(owner) != cbase.creator)
       return E_ACCESS_DENIED;
     // Alte Daten der Ebene uebernehmen
+#if __VERSION_MINOR__ == 6 && __VERSION_MICRO__ < 4
+    // Workaround fuer Bug in to_struct: erst in array wandeln, dann in die
+    // richtige struct.
+    ch = to_struct(to_array(cbase), (<channel_s>));
+#else
     ch = to_struct(cbase, (<channel_s>));
+#endif
     // Wenn eine Beschreibung uebergeben, dann ersetzt sie jetzt die alte
     if (desc)
       ch.desc = desc;