Skip to content
This repository was archived by the owner on Oct 1, 2024. It is now read-only.

Commit 0ecd173

Browse files
authored
Merge pull request #163 from mono/strings-free
[Gen] Always free strdup strings as they're not held by native
2 parents 8abc2ba + 150162e commit 0ecd173

File tree

2 files changed

+20
-3
lines changed

2 files changed

+20
-3
lines changed

generator/MarshalGen.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,5 +60,22 @@ public override string FromNative (string var)
6060
return String.Format (from_fmt, var);
6161
}
6262
}
63+
64+
public class StringMarshalGen : MarshalGen, IManualMarshaler
65+
{
66+
public StringMarshalGen (string ctype, string type, string mtype, string call_fmt, string from_fmt) : base (ctype, type, mtype, call_fmt, from_fmt, true)
67+
{
68+
}
69+
70+
public string AllocNative (string managed_var)
71+
{
72+
return CallByName (managed_var);
73+
}
74+
75+
public string ReleaseNative (string native_var)
76+
{
77+
return string.Format ("GLib.Marshaller.Free ({0})", native_var);
78+
}
79+
}
6380
}
6481

generator/SymbolTable.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,9 +107,9 @@ public SymbolTable ()
107107
AddType (new ConstStringGen ("const-xmlChar"));
108108
AddType (new ConstStringGen ("const-char"));
109109
AddType (new ConstFilenameGen ("const-gfilename"));
110-
AddType (new MarshalGen ("gfilename", "string", "IntPtr", "GLib.Marshaller.StringToFilenamePtr({0})", "GLib.Marshaller.FilenamePtrToStringGFree({0})"));
111-
AddType (new MarshalGen ("gchar", "string", "IntPtr", "GLib.Marshaller.StringToPtrGStrdup({0})", "GLib.Marshaller.PtrToStringGFree({0})"));
112-
AddType (new MarshalGen ("char", "string", "IntPtr", "GLib.Marshaller.StringToPtrGStrdup({0})", "GLib.Marshaller.PtrToStringGFree({0})"));
110+
AddType (new StringMarshalGen ("gfilename", "string", "IntPtr", "GLib.Marshaller.StringToFilenamePtr({0})", "GLib.Marshaller.FilenamePtrToStringGFree({0})"));
111+
AddType (new StringMarshalGen ("gchar", "string", "IntPtr", "GLib.Marshaller.StringToPtrGStrdup({0})", "GLib.Marshaller.PtrToStringGFree({0})"));
112+
AddType (new StringMarshalGen ("char", "string", "IntPtr", "GLib.Marshaller.StringToPtrGStrdup({0})", "GLib.Marshaller.PtrToStringGFree({0})"));
113113
AddType (new SimpleGen ("GStrv", "string[]", "null"));
114114

115115
// manually wrapped types requiring more complex marshaling

0 commit comments

Comments
 (0)