166
Concatenate two strings with reallocation
169
char *ReallocStrcat(char *dest, const char *src)
172
dest = g_realloc (dest, strlen(dest)+strlen(src)+sizeof(char));
166
181
Munge a string to be suitable for filenames
167
We only support strings that can be converted to ISO-8859-1
170
184
char *MungeString(char *str,StrTransPrefs *prefs)
172
unsigned char *src,*dst;
187
gchar *filename_char;
177
iso_str=g_convert(str,strlen(str),"ISO-8859-1","UTF-8",
195
src=g_utf8_to_ucs4(str,strlen(str),&ri,&wi,NULL);
184
for(src=dst=iso_str;*src;src++) {
186
if(prefs->no_underscore) *dst++=' ';
189
else if(*src & (1<<7)) {
190
if(prefs->allow_high_bits) *dst++=*src;
193
else if(!isalnum(*src)&&!strchr(prefs->allow_these_chars,*src)) continue;
202
utf8_char_len=g_unichar_to_utf8(prefs->no_lower_case?
203
*c:g_unichar_tolower(*c),utf8_char);
204
utf8_char[utf8_char_len]='\0';
205
filename_char=g_filename_from_utf8(utf8_char,-1,&rb,&wb,NULL);
206
g_free(filename_char);
207
if (!filename_char || !prefs->allow_high_bits && *c >> 7) {
209
g_snprintf(escape,11,"(%x)",*c);
210
dst=ReallocStrcat(dst,escape);
214
dst=ReallocStrcat(dst,prefs->no_underscore?" ":"_");
216
else if(!g_unichar_isalnum(*c)&&
217
!g_utf8_strchr(prefs->allow_these_chars,
218
strlen(prefs->allow_these_chars),*c)) {
195
if(prefs->no_lower_case) *dst++=*src;
196
else *dst++=tolower(*src);
222
dst=ReallocStrcat(dst,utf8_char);
202
utf8_str=g_convert(iso_str,strlen(iso_str),"UTF-8","ISO-8859-1",
214
231
int MakeTranslatedArgs(char *str,GString **args,int maxargs,
274
294
MakeTranslatedArgs(cmd,args,100,trans_func,user_data,do_munge_default,prefs);
276
297
ArgsToLocale(args);
278
300
for(arg=1;args[arg];arg++) {
279
301
char_args[arg]=args[arg]->str;