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;