]> git.street.me.uk Git - andy/viking.git/blobdiff - src/babel.c
Add copyright for files vikgoto.h & vikgotoxmltool.h
[andy/viking.git] / src / babel.c
index 87493bca766e48deaaa16390bdf5b43c235e51f1..e9d2f4e56d66e5df22720f17413078cbdcfa62e1 100644 (file)
@@ -158,6 +158,10 @@ gboolean babel_general_convert_from( VikTrwLayer *vt, BabelStatusFunc cb, gchar
     g_error_free(error);
     ret = FALSE;
   } else {
+    /* No data required */
+    if ( vt == NULL )
+      return TRUE;
+
     gchar line[512];
     FILE *diag;
     diag = fdopen(babel_stdout, "r");
@@ -189,12 +193,11 @@ gboolean babel_general_convert_from( VikTrwLayer *vt, BabelStatusFunc cb, gchar
 
 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;
@@ -204,23 +207,32 @@ gboolean a_babel_convert_from( VikTrwLayer *vt, const char *babelargs, BabelStat
 
     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++] = (char *)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);
+    } else
+      g_warning("gpsbabel not found in PATH");
+    g_free(gpsbabel_loc);
   }
 
   g_remove(name_dst);
@@ -269,7 +281,7 @@ gboolean a_babel_convert_from_shellcommand ( VikTrwLayer *vt, const char *input_
 
 gboolean a_babel_convert_from_url ( VikTrwLayer *vt, const char *url, const char *input_type, BabelStatusFunc cb, gpointer user_data )
 {
-  static DownloadOptions options = {NULL, 0, a_check_html_file};
+  static DownloadMapOptions options = { FALSE, FALSE, NULL, 0, a_check_kml_file};
   gint fd_src;
   int fetch_ret;
   gboolean ret = FALSE;
@@ -284,7 +296,7 @@ gboolean a_babel_convert_from_url ( VikTrwLayer *vt, const char *url, const char
 
     babelargs = g_strdup_printf(" -i %s", input_type);
 
-    fetch_ret = a_http_download_get_url(url, "", name_src, &options);
+    fetch_ret = a_http_download_get_url(url, "", name_src, &options, NULL);
     if (fetch_ret == 0)
       ret = a_babel_convert_from( vt, babelargs, NULL, name_src, NULL);
  
@@ -405,12 +417,11 @@ gboolean babel_general_convert_to( VikTrwLayer *vt, BabelStatusFunc cb, gchar **
 
 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;
@@ -420,23 +431,31 @@ gboolean a_babel_convert_to( VikTrwLayer *vt, const char *babelargs, BabelStatus
 
     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++] = (char *)to;
+      args[i] = NULL;
+
+      ret = babel_general_convert_to ( vt, cb, args, name_src, user_data );
+
+      g_free ( unbuffer_loc );
+      g_strfreev(sub_args);
+    } else
+      g_warning("gpsbabel not found in PATH");
+    g_free(gpsbabel_loc);
   }
 
   g_remove(name_src);