~ubuntu-branches/debian/squeeze/grip/squeeze

« back to all changes in this revision

Viewing changes to src/launch.c

  • Committer: Bazaar Package Importer
  • Author(s): Daniel Baumann
  • Date: 2006-10-29 15:58:00 UTC
  • mfrom: (3.1.3 edgy)
  • Revision ID: james.westby@ubuntu.com-20061029155800-btygc4xu2wv5fjbi
Tags: 3.3.1-11
* Added patch from Adrian Cox <adrian@humboldt.co.uk> to apply album gain
  adjustment to the right album (Closes: #231886).
* Added patch from Matt Zimmerman <mdz@debian.org> to call executables in
  path (Closes: #269596, #38447).

Show diffs side-by-side

added added

removed removed

Lines of Context:
163
163
}
164
164
 
165
165
/*
 
166
  Concatenate two strings with reallocation
 
167
*/
 
168
 
 
169
char *ReallocStrcat(char *dest, const char *src)
 
170
{
 
171
  if(src) {
 
172
    dest = g_realloc (dest, strlen(dest)+strlen(src)+sizeof(char));
 
173
    if (dest) {
 
174
      strcat(dest,src);
 
175
    }
 
176
  }
 
177
  return dest;
 
178
}
 
179
 
 
180
/*
166
181
  Munge a string to be suitable for filenames
167
 
  We only support strings that can be converted to ISO-8859-1
168
182
*/
169
183
 
170
184
char *MungeString(char *str,StrTransPrefs *prefs)
171
185
{
172
 
  unsigned char *src,*dst;
173
 
  char *iso_str;
174
 
  char *utf8_str;
 
186
  gunichar *src, *c;
 
187
  gchar *filename_char;
 
188
  char *dst;
 
189
  glong ri,wi;
175
190
  gsize rb,wb;
176
 
 
177
 
  iso_str=g_convert(str,strlen(str),"ISO-8859-1","UTF-8",
178
 
                    &rb,&wb,NULL);
179
 
 
180
 
  if(!iso_str) {
 
191
  char escape[11];
 
192
  char utf8_char[7];
 
193
  gint utf8_char_len;
 
194
 
 
195
  src=g_utf8_to_ucs4(str,strlen(str),&ri,&wi,NULL);
 
196
  if(!src) {
181
197
    return NULL;
182
198
  }
183
 
 
184
 
  for(src=dst=iso_str;*src;src++) {
185
 
    if((*src==' ')) {
186
 
      if(prefs->no_underscore) *dst++=' ';
187
 
      else *dst++='_';
188
 
    }
189
 
    else if(*src & (1<<7)) {
190
 
      if(prefs->allow_high_bits) *dst++=*src;
191
 
      else continue;
192
 
    }
193
 
    else if(!isalnum(*src)&&!strchr(prefs->allow_these_chars,*src)) continue;
 
199
  
 
200
  dst=g_strdup("");
 
201
  for(c=src;*c;c++) {
 
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) {
 
208
      if (prefs->escape) {
 
209
        g_snprintf(escape,11,"(%x)",*c);
 
210
        dst=ReallocStrcat(dst,escape);
 
211
      }
 
212
    }
 
213
    else if(*c==' ') {
 
214
      dst=ReallocStrcat(dst,prefs->no_underscore?" ":"_");
 
215
    }
 
216
    else if(!g_unichar_isalnum(*c)&&
 
217
            !g_utf8_strchr(prefs->allow_these_chars,
 
218
            strlen(prefs->allow_these_chars),*c)) {
 
219
      continue;
 
220
    }
194
221
    else {
195
 
      if(prefs->no_lower_case) *dst++=*src;
196
 
      else *dst++=tolower(*src);
 
222
      dst=ReallocStrcat(dst,utf8_char);
197
223
    }
198
224
  }
199
 
 
200
 
  *dst='\0';
201
 
 
202
 
  utf8_str=g_convert(iso_str,strlen(iso_str),"UTF-8","ISO-8859-1",
203
 
                     &rb,&wb,NULL);
204
 
 
205
 
  free(iso_str);
206
 
 
207
 
  if(!utf8_str) {
208
 
    return NULL;
209
 
  }
210
 
 
211
 
  return utf8_str;
 
225
  
 
226
  g_free(src);
 
227
  
 
228
  return dst;
212
229
}
213
230
 
214
231
int MakeTranslatedArgs(char *str,GString **args,int maxargs,
238
255
 
239
256
extern char *FindRoot(char *);
240
257
 
 
258
/*
241
259
void ArgsToLocale(GString **args)
242
260
{
243
261
  char *new_str;
255
273
      
256
274
      args[pos]=new_arg;
257
275
    }
 
276
    g_free(new_str);
258
277
  }
259
278
}
 
279
*/
260
280
 
261
281
void TranslateAndLaunch(char *cmd,char *(*trans_func)(char,void *,gboolean *),
262
282
                        void *user_data,gboolean do_munge_default,
273
293
 
274
294
  MakeTranslatedArgs(cmd,args,100,trans_func,user_data,do_munge_default,prefs);
275
295
 
 
296
/*
276
297
  ArgsToLocale(args);
 
298
*/
277
299
 
278
300
  for(arg=1;args[arg];arg++) {
279
301
    char_args[arg]=args[arg]->str;