private void UpdateFromMem(IntPtr sigPtr) { /* Work around memory layout problem (bug?) on Windows systems * with libgpgme <= 1.1.8 * //_gpgme_signature sig = new _gpgme_signature(); * */ if (!libgpgme.IsWindows || (Gpgme.Version.Major >= 1 && Gpgme.Version.Minor >= 2) ) { _gpgme_signature unixsig = new _gpgme_signature(); Marshal.PtrToStructure(sigPtr, unixsig); summary = (SignatureSummary)unixsig.summary; fpr = Gpgme.PtrToStringUTF8(unixsig.fpr); status = unixsig.status; timestamp = unixsig.timestamp; exp_timestamp = unixsig.exp_timestamp; validity = (Validity)unixsig.validity; validity_reason = unixsig.validity_reason; pubkey_algo = (KeyAlgorithm)unixsig.pubkey_algo; hash_algo = (HashAlgorithm)unixsig.hash_algo; pka_address = Gpgme.PtrToStringUTF8(unixsig.pka_address); wrong_key_usage = unixsig.wrong_key_usage; pka_trust = (PkaStatus)unixsig.pka_trust; chain_model = unixsig.chain_model; if (unixsig.notations != IntPtr.Zero) { notations = new SignatureNotation(unixsig.notations); } if (unixsig.next != IntPtr.Zero) { next = new Signature(unixsig.next); } } else { _gpgme_signature_windows winsig = new _gpgme_signature_windows(); Marshal.PtrToStructure(sigPtr, winsig); summary = (SignatureSummary)winsig.summary; fpr = Gpgme.PtrToStringUTF8(winsig.fpr); status = winsig.status; timestamp = winsig.timestamp; exp_timestamp = winsig.exp_timestamp; validity = (Validity)winsig.validity; validity_reason = winsig.validity_reason; pubkey_algo = (KeyAlgorithm)winsig.pubkey_algo; hash_algo = (HashAlgorithm)winsig.hash_algo; pka_address = Gpgme.PtrToStringUTF8(winsig.pka_address); wrong_key_usage = winsig.wrong_key_usage; pka_trust = (PkaStatus)winsig.pka_trust; chain_model = winsig.chain_model; if (winsig.notations != IntPtr.Zero) { notations = new SignatureNotation(winsig.notations); } if (winsig.next != IntPtr.Zero) { next = new Signature(winsig.next); } } }
private void UpdateFromMem(IntPtr sigPtr) { /* Work around memory layout problem (bug?) on Windows systems * with libgpgme <= 1.1.8 * //_gpgme_signature sig = new _gpgme_signature(); * */ if (!libgpgme.IsWindows || (Gpgme.Version.Major >= 1 && Gpgme.Version.Minor >= 2) ) { var unixsig = new _gpgme_signature(); Marshal.PtrToStructure(sigPtr, unixsig); Summary = (SignatureSummary)unixsig.summary; Fingerprint = Gpgme.PtrToStringUTF8(unixsig.fpr); _status = unixsig.status; _timestamp = unixsig.timestamp; _exp_timestamp = unixsig.exp_timestamp; Validity = (Validity)unixsig.validity; _validity_reason = unixsig.validity_reason; PubkeyAlgorithm = (KeyAlgorithm)unixsig.pubkey_algo; HashAlgorithm = (HashAlgorithm)unixsig.hash_algo; PKAAddress = Gpgme.PtrToStringUTF8(unixsig.pka_address); WrongKeyUsage = unixsig.wrong_key_usage; PKATrust = unixsig.pka_trust; ChainModel = unixsig.chain_model; if (unixsig.notations != IntPtr.Zero) { Notations = new SignatureNotation(unixsig.notations); } if (unixsig.next != IntPtr.Zero) { Next = new Signature(unixsig.next); } } else { var winsig = new _gpgme_signature_windows(); Marshal.PtrToStructure(sigPtr, winsig); Summary = (SignatureSummary)winsig.summary; Fingerprint = Gpgme.PtrToStringUTF8(winsig.fpr); _status = winsig.status; _timestamp = winsig.timestamp; _exp_timestamp = winsig.exp_timestamp; Validity = (Validity)winsig.validity; _validity_reason = winsig.validity_reason; PubkeyAlgorithm = (KeyAlgorithm)winsig.pubkey_algo; HashAlgorithm = (HashAlgorithm)winsig.hash_algo; PKAAddress = Gpgme.PtrToStringUTF8(winsig.pka_address); WrongKeyUsage = winsig.wrong_key_usage; PKATrust = winsig.pka_trust; ChainModel = winsig.chain_model; if (winsig.notations != IntPtr.Zero) { Notations = new SignatureNotation(winsig.notations); } if (winsig.next != IntPtr.Zero) { Next = new Signature(winsig.next); } } }