root / trunk / Pithos.ShellExtensions / MarshalHelpers.cs @ 73cdd135
History | View | Annotate | Download (880 Bytes)
1 | d78cbf09 | Panagiotis Kanavos | using System; |
---|---|---|---|
2 | d78cbf09 | Panagiotis Kanavos | using System.Diagnostics.Contracts; |
3 | d78cbf09 | Panagiotis Kanavos | using System.Runtime.InteropServices; |
4 | d78cbf09 | Panagiotis Kanavos | using System.Text; |
5 | d78cbf09 | Panagiotis Kanavos | |
6 | d78cbf09 | Panagiotis Kanavos | namespace Pithos.ShellExtensions |
7 | d78cbf09 | Panagiotis Kanavos | { |
8 | d78cbf09 | Panagiotis Kanavos | public static class MarshalHelpers |
9 | d78cbf09 | Panagiotis Kanavos | { |
10 | d78cbf09 | Panagiotis Kanavos | |
11 | d78cbf09 | Panagiotis Kanavos | public static void CopyToBuffer(string input, IntPtr buffer, int bufferSize) |
12 | d78cbf09 | Panagiotis Kanavos | { |
13 | d78cbf09 | Panagiotis Kanavos | Contract.Requires(buffer != IntPtr.Zero); |
14 | d78cbf09 | Panagiotis Kanavos | Contract.Requires(bufferSize >=0 ); |
15 | d78cbf09 | Panagiotis Kanavos | |
16 | d78cbf09 | Panagiotis Kanavos | var bytes = Encoding.Unicode.GetBytes(input); |
17 | d78cbf09 | Panagiotis Kanavos | |
18 | d78cbf09 | Panagiotis Kanavos | if (bytes.Length + 2 >= bufferSize) |
19 | d78cbf09 | Panagiotis Kanavos | return; |
20 | d78cbf09 | Panagiotis Kanavos | |
21 | d78cbf09 | Panagiotis Kanavos | for (var i = 0; i < bytes.Length; i++) |
22 | d78cbf09 | Panagiotis Kanavos | { |
23 | d78cbf09 | Panagiotis Kanavos | Marshal.WriteByte(buffer, i, bytes[i]); |
24 | d78cbf09 | Panagiotis Kanavos | } |
25 | d78cbf09 | Panagiotis Kanavos | //write the null terminator "\0\0" |
26 | d78cbf09 | Panagiotis Kanavos | Marshal.WriteByte(buffer, bytes.Length, 0); |
27 | d78cbf09 | Panagiotis Kanavos | Marshal.WriteByte(buffer, bytes.Length + 1, 0); |
28 | d78cbf09 | Panagiotis Kanavos | } |
29 | d78cbf09 | Panagiotis Kanavos | } |
30 | d78cbf09 | Panagiotis Kanavos | } |