gboolean a_babel_convert_from( VikTrwLayer *vt, const char *babelargs, BabelStatusFunc cb, const char *from, gpointer user_data )
{
+ int i,j;
int fd_dst;
gchar *name_dst;
- gchar *cmd;
gboolean ret = FALSE;
- gchar **args;
- gint nb_args;
+ gchar *args[64];
if ((fd_dst = g_file_open_tmp("tmp-viking.XXXXXX", &name_dst, NULL)) >= 0) {
gchar *gpsbabel_loc;
if (gpsbabel_loc ) {
gchar *unbuffer_loc = g_find_program_in_path("unbuffer");
- cmd = g_strdup_printf ( "%s%s%s %s -o gpx %s %s",
- unbuffer_loc ? unbuffer_loc : "",
- unbuffer_loc ? " " : "",
- gpsbabel_loc,
- babelargs,
- from,
- name_dst );
-
- if ( unbuffer_loc )
- g_free ( unbuffer_loc );
-
- if ( g_shell_parse_argv(cmd, &nb_args, &args, NULL) ) {
- ret = babel_general_convert_from ( vt, cb, args, name_dst, user_data );
- g_strfreev(args);
+ gchar **sub_args = g_strsplit(babelargs, " ", 0);
+
+ i = 0;
+ if (unbuffer_loc)
+ args[i++] = unbuffer_loc;
+ args[i++] = gpsbabel_loc;
+ for (j = 0; sub_args[j]; j++) {
+ /* some version of gpsbabel can not take extra blank arg */
+ if (sub_args[j][0] != '\0')
+ args[i++] = sub_args[j];
}
- g_free ( cmd );
+ args[i++] = "-o";
+ args[i++] = "gpx";
+ args[i++] = "-f";
+ args[i++] = from;
+ args[i++] = "-F";
+ args[i++] = name_dst;
+ args[i] = NULL;
+
+ ret = babel_general_convert_from ( vt, cb, args, name_dst, user_data );
+
+ g_free ( unbuffer_loc );
+ g_strfreev(sub_args);
}
+ g_free(gpsbabel_loc);
}
g_remove(name_dst);
gboolean a_babel_convert_to( VikTrwLayer *vt, const char *babelargs, BabelStatusFunc cb, const char *to, gpointer user_data )
{
+ int i,j;
int fd_src;
gchar *name_src;
- gchar *cmd;
gboolean ret = FALSE;
- gchar **args;
- gint nb_args;
+ gchar *args[64];
if ((fd_src = g_file_open_tmp("tmp-viking.XXXXXX", &name_src, NULL)) >= 0) {
gchar *gpsbabel_loc;
if (gpsbabel_loc ) {
gchar *unbuffer_loc = g_find_program_in_path("unbuffer");
- cmd = g_strdup_printf ( "%s%s%s %s -i gpx %s %s",
- unbuffer_loc ? unbuffer_loc : "",
- unbuffer_loc ? " " : "",
- gpsbabel_loc,
- babelargs,
- name_src,
- to);
-
- if ( unbuffer_loc )
- g_free ( unbuffer_loc );
- g_debug ( "%s: %s", __FUNCTION__, cmd );
- if ( g_shell_parse_argv(cmd, &nb_args, &args, NULL) ) {
- ret = babel_general_convert_to ( vt, cb, args, name_src, user_data );
- g_strfreev(args);
- }
- g_free ( cmd );
+ gchar **sub_args = g_strsplit(babelargs, " ", 0);
+
+ i = 0;
+ if (unbuffer_loc)
+ args[i++] = unbuffer_loc;
+ args[i++] = gpsbabel_loc;
+ args[i++] = "-i";
+ args[i++] = "gpx";
+ for (j = 0; sub_args[j]; j++)
+ /* some version of gpsbabel can not take extra blank arg */
+ if (sub_args[j][0] != '\0')
+ args[i++] = sub_args[j];
+ args[i++] = "-f";
+ args[i++] = name_src;
+ args[i++] = "-F";
+ args[i++] = to;
+ args[i] = NULL;
+
+ ret = babel_general_convert_to ( vt, cb, args, name_src, user_data );
+
+ g_free ( unbuffer_loc );
+ g_strfreev(sub_args);
}
+ g_free(gpsbabel_loc);
}
g_remove(name_src);