[Gelöst] XMail auf 7390

mehle

Mitglied
Mitglied seit
26 Jan 2009
Beiträge
273
Punkte für Reaktionen
0
Punkte
0
Hi,

nach einer Woche tüfteln und Haare raufen habe ich rausbekommen, warum XMail auf einer 7390 zwar sauber läuft, aber die DNS Anfragen fehlerhaft sind: 7390 ist eine big endian Machine und der SysMachine.h Patch definiert eine little endian Maschine (alle anderen Boxen).

Anbei ist der Patch, der Anstelle von patches/300-SysMachine.patch für eine 7390 eingespielt werden muss.

Aber: ich brauche folgende Hilfe und Hinweise: wie kann man einen Patch für eine 7390 einspielen, aber auf anderen Platformen nicht (und umgedreht). Der vorhandene Patch patches/300-SysMachine.patch ist ja ok für alle anderen Maschinen.

Vielen Dank
Stephan
 

Anhänge

  • 300-SysMachine-7390.patch.zip
    481 Bytes · Aufrufe: 3
Ich weiß nicht, wofür ein Mail Programm überhaupt wissen muss, ob es auf Big oder Little Endian läuft.

Die richtige Lösung sind nicht verschiedene Patches, sondern ein Programm, das es selbst herausfindet.
Für autoconf werden bereits die passenden Definitionen gesetzt, also verwendet diese Programm vermutlich kein autoconf, oder nicht richtig.
Eine andere Möglichkeit ist <endian.h> zu verwenden und in Abhängigkeit davon die Defines zu setzen, die das Programm erwartet.
Es gibt übrigens Standard Definitionen in <stdint.h>, die man verwenden kann. Mit der folgenden Datei sollte es auf jedem Linux System (und vielen anderen) funktionieren, wenn der Little Endian Teil noch ergänzt wird. Es sei denn, dass Programm verwendet signed oder unsigned vor MACH_TYPE_nBIT
Code:
#ifndef _MACHDEFS_H
#define _MACHDEFS_H


#include <stdint.h>
#include <endian.h>
#if __BYTE_ORDER == __LITTLE_ENDIAN
...
#else
#define MACH_BIG_ENDIAN_WORDS
#define MACH_BIG_ENDIAN_BITFIELD
#endif

typedef int8_t MachInt8;
typedef uint8_t MachUInt8;
#define MACH_TYPE_8BIT int8_t

typedef int16_t MachInt16;
typedef uint16_t MachUInt16;
#define MACH_TYPE_16BIT int16_t

typedef int32_t MachInt32;
typedef uint32_t MachUInt32;
#define MACH_TYPE_32BIT int32_t

typedef int64_t MachInt64;
typedef uint64_t MachUInt64;
#define MACH_TYPE_64BIT int64_t

#endif

Wenn ich mich richtig erinnere sind alle neueren Boxen (x3xx) Big Endian.
 
Natürlich, hätte ich selber drauf kommen können...

Anbei ist der Patch.

Re Warum: XMail ist als ein sehr portables Programm geschrieben -- es läuft auf vielen verschienen Platformen wo nicht notwendiger weise ein autoconf existiert. Deswegen haben die ein Programm MkMachDep.cpp, welches die SysMachine.h erzeugt. Das Makefile von XMail aber versucht es lokal auszuführen, was natürlich nicht zum Ziel führt. Deswegen brauchen wir ein vordefiniertes SysMachine.h.

PS: den neuen Inhalt für Big Endian habe ich erzeugt, indem ich MkMachDep kompiliert habe und auf meiner 7390 ausgeführt habe.
 

Anhänge

  • 300-SysMachine.patch.zip
    539 Bytes · Aufrufe: 3
Das beantwortet nicht die Frage, warum ein Email Programm überhaupt wissen muss, ob es auf Big oder Little Endian läuft. Ist aber auch nicht so wichtig.
 
@Whoopie

Danke für die Konsolidierung des Patches.
 
Der Dank geht an er13, er hat's eingecheckt.
 

Zurzeit aktive Besucher

Statistik des Forums

Themen
246,760
Beiträge
2,256,968
Mitglieder
374,788
Neuestes Mitglied
LaceyJerome
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.