Glib::ustring mapping fails with non ascii-7 characters

This commit is contained in:
Michael Brown authored and Gustavo J. A. M. Carneiro committed 2012-06-02 12:25:13 +01:00
1 parent f9d39f961a
commit 692698b0a7
1 file changed
+23 -30
+23 -30
View File
@@ -237,22 +237,20 @@ class GlibStringParam(Parameter):
wrapper.before_call.write_code(
"%s = (%s).c_str();" % (ptr, self.value))
wrapper.before_call.write_code(
"%s = (%s).size();" % (len_, self.value))
"%s = (%s).bytes();" % (len_, self.value))
wrapper.build_params.add_parameter('s#', [ptr, len_])
def convert_python_to_c(self, wrapper):
assert isinstance(wrapper, ForwardWrapperBase)
if self.default_value is None:
name = wrapper.declarations.declare_variable("const char *", self.name)
name_len = wrapper.declarations.declare_variable("Py_ssize_t", self.name+'_len')
wrapper.parse_params.add_parameter('s#', ['&'+name, '&'+name_len], self.value)
wrapper.call_params.append('Glib::ustring(%s, %s)' % (name, name_len))
wrapper.parse_params.add_parameter('et', ['"utf-8"', '&'+name], self.value)
wrapper.call_params.append('Glib::ustring(%s)' % (name))
else:
name = wrapper.declarations.declare_variable("const char *", self.name, 'NULL')
name_len = wrapper.declarations.declare_variable("Py_ssize_t", self.name+'_len')
wrapper.parse_params.add_parameter('s#', ['&'+name, '&'+name_len], self.value, optional=True)
wrapper.call_params.append('(%s ? Glib::ustring(%s, %s) : %s)'
% (name, name, name_len, self.default_value))
wrapper.parse_params.add_parameter('et', ['"utf-8"', '&'+name], self.value, optional=True)
wrapper.call_params.append('(%s ? Glib::ustring(%s) : %s)'
% (name, name, self.default_value))
class GlibStringRefParam(Parameter):
@@ -272,31 +270,29 @@ class GlibStringRefParam(Parameter):
wrapper.before_call.write_code(
"%s = (%s).c_str();" % (ptr, self.value))
wrapper.before_call.write_code(
"%s = (%s).size();" % (len_, self.value))
"%s = (%s).bytes();" % (len_, self.value))
wrapper.build_params.add_parameter('s#', [ptr, len_])
if self.direction & Parameter.DIRECTION_OUT:
if ptr is None:
ptr = wrapper.declarations.declare_variable("const char *", self.name + "_ptr")
len_ = wrapper.declarations.declare_variable("Py_ssize_t", self.name + "_len")
wrapper.parse_params.add_parameter("s#", ['&'+ptr, '&'+len_], self.value)
wrapper.parse_params.add_parameter("et", ['"utf-8"', '&'+ptr], self.value)
wrapper.after_call.write_code(
"%s = Glib::ustring(%s, %s);" % (self.value, ptr, len_))
"%s = Glib::ustring(%s);" % (self.value, ptr))
def convert_python_to_c(self, wrapper):
assert isinstance(wrapper, ForwardWrapperBase)
name = wrapper.declarations.declare_variable("const char *", self.name)
name_len = wrapper.declarations.declare_variable("Py_ssize_t", self.name+'_len')
name_std = wrapper.declarations.declare_variable("Glib::ustring", self.name + '_std')
wrapper.call_params.append(name_std)
if self.direction & Parameter.DIRECTION_IN:
wrapper.parse_params.add_parameter('s#', ['&'+name, '&'+name_len], self.value)
wrapper.before_call.write_code('%s = Glib::ustring(%s, %s);' %
(name_std, name, name_len))
wrapper.parse_params.add_parameter('et', ['"utf-8"', '&'+name], self.value)
wrapper.before_call.write_code('%s = Glib::ustring(%s);' %
(name_std, name))
if self.direction & Parameter.DIRECTION_OUT:
wrapper.build_params.add_parameter("s#", ['('+name_std+').c_str()', '('+name_std+').size()'])
wrapper.build_params.add_parameter("s#", ['('+name_std+').c_str()', '('+name_std+').bytes()'])
class GlibStringPtrParam(PointerParameter):
@@ -315,16 +311,15 @@ class GlibStringPtrParam(PointerParameter):
wrapper.before_call.write_code(
"%s = %s->c_str();" % (ptr, self.value))
wrapper.before_call.write_code(
"%s = %s->size();" % (len_, self.value))
"%s = %s->bytes();" % (len_, self.value))
wrapper.build_params.add_parameter('s#', [ptr, len_])
if self.direction & Parameter.DIRECTION_OUT:
if ptr is None:
ptr = wrapper.declarations.declare_variable("const char *", self.name + "_ptr")
len_ = wrapper.declarations.declare_variable("Py_ssize_t", self.name + "_len")
wrapper.parse_params.add_parameter("s#", ['&'+ptr, '&'+len_], self.value)
wrapper.parse_params.add_parameter("et", ['"utf-8"', '&'+ptr], self.value)
wrapper.after_call.write_code(
"*%s = Glib::ustring(%s, %s);" % (self.value, ptr, len_))
"*%s = Glib::ustring(%s);" % (self.value, ptr))
if self.transfer_ownership:
wrapper.after_call.write_code("delete %s;" % (self.value,))
@@ -333,7 +328,6 @@ class GlibStringPtrParam(PointerParameter):
assert isinstance(wrapper, ForwardWrapperBase)
assert self.default_value is None, "default_value not implemented yet"
name = wrapper.declarations.declare_variable("const char *", self.name)
name_len = wrapper.declarations.declare_variable("Py_ssize_t", self.name+'_len')
if self.transfer_ownership:
name_std = wrapper.declarations.declare_variable("Glib::ustring*", self.name + '_std', 'new Glib::ustring')
wrapper.call_params.append('%s' % name_std)
@@ -344,12 +338,12 @@ class GlibStringPtrParam(PointerParameter):
name_std_value = name_std
if self.direction & Parameter.DIRECTION_IN:
wrapper.parse_params.add_parameter('s#', ['&'+name, '&'+name_len], self.value)
wrapper.before_call.write_code('%s = Glib::ustring(%s, %s);' %
(name_std_value, name, name_len))
wrapper.parse_params.add_parameter('et', ['"utf-8"', '&'+name], self.value)
wrapper.before_call.write_code('%s = Glib::ustring(%s);' %
(name_std_value, name))
if self.direction & Parameter.DIRECTION_OUT:
wrapper.build_params.add_parameter("s#", ['('+name_std_value+').c_str()', '('+name_std_value+').size()'])
wrapper.build_params.add_parameter("s#", ['('+name_std_value+').c_str()', '('+name_std_value+').bytes()'])
class GlibStringReturn(ReturnValue):
@@ -361,13 +355,12 @@ class GlibStringReturn(ReturnValue):
def convert_python_to_c(self, wrapper):
ptr = wrapper.declarations.declare_variable("const char *", "retval_ptr")
len_ = wrapper.declarations.declare_variable("Py_ssize_t", "retval_len")
wrapper.parse_params.add_parameter("s#", ['&'+ptr, '&'+len_])
wrapper.parse_params.add_parameter("et", ['"utf-8"', '&'+ptr])
wrapper.after_call.write_code(
"%s = Glib::ustring(%s, %s);" % (self.value, ptr, len_))
"%s = Glib::ustring(%s);" % (self.value, ptr))
def convert_c_to_python(self, wrapper):
wrapper.build_params.add_parameter("s#", ['(%s).c_str()' % self.value,
'(%s).size()' % self.value],
'(%s).bytes()' % self.value],
prepend=True)