Statistics
| Branch: | Revision:

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
}