Hi Aki, On 02/03/2011 07:20 AM, Aki Niemi wrote: > --- > src/util.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > src/util.h | 7 ++++++ > 2 files changed, 71 insertions(+), 0 deletions(-) > +unsigned char *convert_utf8_to_gsm_best_lang(const char *utf8, long len, > + long *items_read, long *items_written, > + unsigned char terminator, > + enum gsm_dialect hint, > + enum gsm_dialect *used_locking, > + enum gsm_dialect *used_single) > +{ > + enum gsm_dialect locking = GSM_DIALECT_DEFAULT; > + enum gsm_dialect single = GSM_DIALECT_DEFAULT; > + unsigned char *encoded; > + > + encoded = convert_utf8_to_gsm_with_lang(utf8, len, items_read, > + items_written, terminator, > + locking, single); > + if (encoded != NULL) > + return encoded; So this was actually wrong since you were not setting used_locking or used_single. > + > + if (hint == GSM_DIALECT_DEFAULT) > + return NULL; > + > + single = hint; > + encoded = convert_utf8_to_gsm_with_lang(utf8, len, items_read, > + items_written, terminator, > + locking, single); > + if (encoded != NULL) > + return encoded; Same here > + > + /* Spanish dialect uses the default locking shift table */ > + if (hint == GSM_DIALECT_SPANISH) > + return NULL; > + > + locking = hint; > + encoded = convert_utf8_to_gsm_with_lang(utf8, len, items_read, > + items_written, terminator, > + locking, single); > + > + if (encoded == NULL) > + return NULL; > + > + if (used_locking != NULL) > + *used_locking = locking; > + > + if (used_single != NULL) > + *used_single = single; > + > + return encoded; > +} > + Applied and fixed in a follow on patch. Regards, -Denis