diff --git a/Common/OpenFile.cpp b/Common/OpenFile.cpp
index cb36bdbefeb5c139151e89637fcb60acb3527022..0820013b7c2ae3d914e4de099d41fb12f8140e04 100644
--- a/Common/OpenFile.cpp
+++ b/Common/OpenFile.cpp
@@ -404,10 +404,10 @@ void OpenProject(const char *name)
       delete PView::list[i];
 #endif
 #if !defined(HAVE_NO_PARSER)
-  // reinitialize the parser symbol tree (only if the current model is
-  // not empty: if it's empty it probably mean we just launched gmsh,
-  // and we don't want to delete variables set e.g. using the -string
-  // command line option)
+  // reinitialize the variables defined in the parser (only if the
+  // current model is not empty: if it's empty it probably mean we
+  // just launched gmsh, and we don't want to delete variables set
+  // e.g. using the -string command line option)
   if(GModel::current()->getNumVertices()) gmsh_yysymbols.clear();
 #endif
   GModel::current()->destroy();
diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp
index c4c424fb1a27c379d201ec38c660aa250ef5ea80..eac616bf456f31e163212f7f2dbbc9110c71b6da 100644
--- a/Fltk/Callbacks.cpp
+++ b/Fltk/Callbacks.cpp
@@ -2698,7 +2698,7 @@ static void _add_new_point()
   Msg::StatusBar(3, false, "");
 }
 
-static void _add_new_multiline(int type)
+static void _add_new_multiline(std::string type)
 {
   std::vector<GVertex*> vertices;
   std::vector<GEdge*> edges;
@@ -2730,22 +2730,8 @@ static void _add_new_multiline(int type)
       Msg::Warning("Entity de-selection not supported yet during multi-line creation");
     }
     if(ib == 'e') {
-      if(p.size() >= 2) {
-        switch (type) {
-        case 0:
-          add_multline(p.size(), &p[0], CTX.filename);
-          break;
-        case 1:
-          add_spline(p.size(), &p[0], CTX.filename);
-          break;
-        case 2:
-          add_bspline(p.size(), &p[0], CTX.filename);
-          break;
-        case 3:
-          add_bezier(p.size(), &p[0], CTX.filename);
-          break;
-        }
-      }
+      if(p.size() >= 2)
+	add_multline(type, p.size(), &p[0], CTX.filename);
       WID->reset_visibility();
       ZeroHighlight();
       Draw();
@@ -2810,7 +2796,7 @@ static void _add_new_line()
       break;
     }
     if(p.size() == 2) {
-      add_multline(2, &p[0], CTX.filename);
+      add_multline("Line", p.size(), &p[0], CTX.filename);
       WID->reset_visibility();
       ZeroHighlight();
       Draw();
@@ -3058,8 +3044,8 @@ static void _add_new_surface_volume(int mode)
           }
           if(List_Nbr(List2)) {
             switch (mode) {
-            case 0: add_surf(List2, CTX.filename, 0, 2); break;
-            case 1: add_surf(List2, CTX.filename, 0, 1); break;
+            case 0: add_surf("Plane Surface", List2, CTX.filename); break;
+            case 1: add_surf("Ruled Surface", List2, CTX.filename); break;
             case 2: add_vol(List2, CTX.filename); break;
             }
             WID->reset_visibility();
@@ -3094,9 +3080,9 @@ void geometry_elementary_add_new_cb(CALLBACK_ARGS)
   else if(str == "Line")
     _add_new_line();
   else if(str == "Spline")
-    _add_new_multiline(1);
+    _add_new_multiline(str);
   else if(str == "BSpline")
-    _add_new_multiline(2);
+    _add_new_multiline(str);
   else if(str == "Circle")
     _add_new_circle();
   else if(str == "Ellipse")
@@ -3312,7 +3298,7 @@ static void _action_point_line_surface_volume(int action, int mode, const char *
           delet(List1, CTX.filename, what);
           break;
         case 7:
-          add_physical(List1, CTX.filename, type);
+          add_physical(what, List1, CTX.filename);
           break;
         case 8:
           add_charlength(List1, CTX.filename, WID->context_mesh_input[0]->value());
diff --git a/Geo/GModelIO_Geo.cpp b/Geo/GModelIO_Geo.cpp
index 249666820679b9d869db4549f92c947010da91cc..6ba5f396647c120427c1ab2a46d1f78da5d11650 100644
--- a/Geo/GModelIO_Geo.cpp
+++ b/Geo/GModelIO_Geo.cpp
@@ -174,11 +174,11 @@ class writeGVertexGEO {
     if(gv->getNativeType() == GEntity::GmshModel){
       Vertex *v = (Vertex*)gv->getNativePtr();
       if(!v) return;
-      fprintf(geo, "Point (%d) = {%.16g, %.16g, %.16g, %.16g};\n",
+      fprintf(geo, "Point(%d) = {%.16g, %.16g, %.16g, %.16g};\n",
               v->Num, v->Pos.X, v->Pos.Y, v->Pos.Z, v->lc);
     }
     else{
-      fprintf(geo, "Point (%d) = {%.16g, %.16g, %.16g, %.16g};\n",
+      fprintf(geo, "Point(%d) = {%.16g, %.16g, %.16g, %.16g};\n",
               gv->tag(), gv->x(), gv->y(), gv->z(), 
               gv->prescribedMeshSizeAtVertex());
     }
@@ -199,18 +199,18 @@ class writeGEdgeGEO {
       if(!c || c->Num < 0) return;
       switch (c->Typ) {
       case MSH_SEGM_LINE:
-        fprintf(geo, "Line (%d) = ", c->Num);
+        fprintf(geo, "Line(%d) = ", c->Num);
         break;
       case MSH_SEGM_CIRC:
       case MSH_SEGM_CIRC_INV:
-        fprintf(geo, "Circle (%d) = ", c->Num);
+        fprintf(geo, "Circle(%d) = ", c->Num);
         break;
       case MSH_SEGM_ELLI:
       case MSH_SEGM_ELLI_INV:
-        fprintf(geo, "Ellipse (%d) = ", c->Num);
+        fprintf(geo, "Ellipse(%d) = ", c->Num);
         break;
       case MSH_SEGM_NURBS:
-        fprintf(geo, "Nurbs (%d) = {", c->Num);
+        fprintf(geo, "Nurbs(%d) = {", c->Num);
         for(int i = 0; i < List_Nbr(c->Control_Points); i++) {
           Vertex *v;
           List_Read(c->Control_Points, i, &v);
@@ -235,13 +235,13 @@ class writeGEdgeGEO {
         fprintf(geo, "  Order %d;\n", c->degre);
         return;
       case MSH_SEGM_SPLN:
-        fprintf(geo, "CatmullRom (%d) = ", c->Num);
+        fprintf(geo, "CatmullRom(%d) = ", c->Num);
         break;
       case MSH_SEGM_BSPLN:
-        fprintf(geo, "BSpline (%d) = ", c->Num);
+        fprintf(geo, "BSpline(%d) = ", c->Num);
         break;
       case MSH_SEGM_BEZIER:
-        fprintf(geo, "Bezier (%d) = ", c->Num);
+        fprintf(geo, "Bezier(%d) = ", c->Num);
         break;
       default:
         Msg::Error("Unknown curve type %d", c->Typ);
@@ -262,7 +262,7 @@ class writeGEdgeGEO {
     else{
       if(ge->getBeginVertex() && ge->getEndVertex()){
         if(ge->geomType() == GEntity::Line){
-          fprintf(geo, "Line (%d) = {%d, %d};\n", 
+          fprintf(geo, "Line(%d) = {%d, %d};\n", 
                   ge->tag(), ge->getBeginVertex()->tag(), ge->getEndVertex()->tag());
         }
         else{
@@ -274,10 +274,10 @@ class writeGEdgeGEO {
           for(int i = 1; i < ge->minimumDrawSegments(); i++){
             double u = umin + (double)i / ge->minimumDrawSegments() * (umax - umin);
             GPoint p = ge->point(u);
-            fprintf(geo, "Point (p%d + %d) = {%.16g, %.16g, %.16g, 1.e+22};\n", 
+            fprintf(geo, "Point(p%d + %d) = {%.16g, %.16g, %.16g, 1.e+22};\n", 
                     ge->tag(), i, p.x(), p.y(), p.z());
           }
-          fprintf(geo, "CatmullRom (%d) = {%d", ge->tag(), ge->getBeginVertex()->tag());
+          fprintf(geo, "CatmullRom(%d) = {%d", ge->tag(), ge->getBeginVertex()->tag());
           for(int i = 1; i < ge->minimumDrawSegments(); i++)
             fprintf(geo, ", p%d + %d", ge->tag(), i);
           fprintf(geo, ", %d};\n", ge->getEndVertex()->tag());
@@ -304,7 +304,7 @@ class writeGFaceGEO {
         num.push_back((*it)->tag());
       for(std::list<int>::iterator it = orientations.begin(); it != orientations.end(); it++)
         ori.push_back((*it) > 0 ? 1 : -1);
-      fprintf(geo, "Line Loop (%d) = ", gf->tag());
+      fprintf(geo, "Line Loop(%d) = ", gf->tag());
       for(unsigned int i = 0; i < num.size(); i++){
         if(i)
           fprintf(geo, ", %d", num[i] * ori[i]);
@@ -313,10 +313,10 @@ class writeGFaceGEO {
       }
       fprintf(geo, "};\n");
       if(gf->geomType() == GEntity::Plane){
-        fprintf(geo, "Plane Surface (%d) = {%d};\n", gf->tag(), gf->tag());
+        fprintf(geo, "Plane Surface(%d) = {%d};\n", gf->tag(), gf->tag());
       }
       else if(edges.size() == 3 || edges.size() == 4){
-        fprintf(geo, "Ruled Surface (%d) = {%d};\n", gf->tag(), gf->tag());
+        fprintf(geo, "Ruled Surface(%d) = {%d};\n", gf->tag(), gf->tag());
       }
       else{
         Msg::Error("Skipping surface %d in export", gf->tag());
@@ -336,7 +336,7 @@ class writeGRegionGEO {
 
     std::list<GFace*> faces = gr->faces();
     if(faces.size()){
-      fprintf(geo, "Surface Loop (%d) = ", gr->tag());
+      fprintf(geo, "Surface Loop(%d) = ", gr->tag());
       for(std::list<GFace*>::iterator it = faces.begin(); it != faces.end(); it++) {
         if(it != faces.begin())
           fprintf(geo, ", %d", (*it)->tag());
@@ -344,7 +344,7 @@ class writeGRegionGEO {
           fprintf(geo, "{%d", (*it)->tag());
       }
       fprintf(geo, "};\n");
-      fprintf(geo, "Volume (%d) = {%d};\n", gr->tag(), gr->tag());
+      fprintf(geo, "Volume(%d) = {%d};\n", gr->tag(), gr->tag());
     }
   }
 };
@@ -384,11 +384,11 @@ class writePhysicalGroupGEO {
     }
 
     if(oldName.size())
-      fprintf(geo, " (%s) = {", oldName.c_str());
+      fprintf(geo, "(%s) = {", oldName.c_str());
     else if(newName.size())
-      fprintf(geo, " (\"%s\") = {", newName.c_str());
+      fprintf(geo, "(\"%s\") = {", newName.c_str());
     else
-      fprintf(geo, " (%d) = {", g.first);
+      fprintf(geo, "(%d) = {", g.first);
     for(unsigned int i = 0; i < g.second.size(); i++) {
       if(i) fprintf(geo, ", ");
       fprintf(geo, "%d", g.second[i]->tag());
diff --git a/Geo/GeoStringInterface.cpp b/Geo/GeoStringInterface.cpp
index 471a7ac5fcaef5f9ca9deb5cd3a1f6bb1fc6135d..3f4dc2b31293843602308d5d1de5adad35bd1c54 100644
--- a/Geo/GeoStringInterface.cpp
+++ b/Geo/GeoStringInterface.cpp
@@ -21,38 +21,20 @@
 
 extern Context_T CTX;
 
-#define BUFFSIZE 128000
-
-// Some old systems don't have snprintf... Just call sprintf instead.
-
-#if defined(HAVE_NO_SNPRINTF)
-static int snprintf(char *str, size_t size, const char* fmt, ...)
-{
-  va_list args;
-  va_start(args, fmt);
-  int ret = vsprintf(str, fmt, args);
-  va_end(args);
-  return ret;
-}
-#endif
-
-double evaluate_scalarfunction(const char *var, double val, const char *funct)
+double evaluate_scalarfunction(std::string var, double val, std::string funct)
 {
 #if defined(HAVE_NO_PARSER)
   Msg::Error("Scalar function evaluation not available without Gmsh parser");
   return 0.;
 #else
-  FILE *tempf;
-  tempf = gmsh_yyin;
-
+  FILE *tempf = gmsh_yyin;
   if(!(gmsh_yyin = fopen(CTX.tmp_filename_fullpath, "w"))) {
     Msg::Error("Unable to open temporary file '%s'", CTX.tmp_filename_fullpath);
     return 0.;
   }
-
   // pose "variable = function" and evaluate function
-  fprintf(gmsh_yyin, "%s = %.16g ;\n", var, val);
-  fprintf(gmsh_yyin, "ValeurTemporaire__ = %s ;\n", funct);
+  fprintf(gmsh_yyin, "%s = %.16g ;\n", var.c_str(), val);
+  fprintf(gmsh_yyin, "ValeurTemporaire__ = %s ;\n", funct.c_str());
   fclose(gmsh_yyin);
   gmsh_yyin = fopen(CTX.tmp_filename_fullpath, "r");
   while(!feof(gmsh_yyin)) {
@@ -60,7 +42,6 @@ double evaluate_scalarfunction(const char *var, double val, const char *funct)
   }
   fclose(gmsh_yyin);
   gmsh_yyin = tempf;
-
   // retreive value
   if(gmsh_yysymbols.count("ValeurTemporaire__")) 
     return gmsh_yysymbols["ValeurTemporaire__"][0];
@@ -68,7 +49,7 @@ double evaluate_scalarfunction(const char *var, double val, const char *funct)
 #endif
 }
 
-void add_infile(const char *text, const char *fich, bool deleted_something)
+void add_infile(std::string text, std::string filename, bool deleted_something)
 {
 #if defined(HAVE_NO_PARSER)
   Msg::Error("GEO file creation not available without Gmsh parser");
@@ -78,8 +59,8 @@ void add_infile(const char *text, const char *fich, bool deleted_something)
     return;
   }
 
-  fprintf(gmsh_yyin, "%s\n", text);
-  Msg::StatusBar(2, true, "%s", text);
+  fprintf(gmsh_yyin, "%s\n", text.c_str());
+  Msg::StatusBar(2, true, "%s", text.c_str());
   fclose(gmsh_yyin);
   gmsh_yyin = fopen(CTX.tmp_filename_fullpath, "r");
   while(!feof(gmsh_yyin)) {
@@ -96,14 +77,14 @@ void add_infile(const char *text, const char *fich, bool deleted_something)
   CTX.mesh.changed = ENT_ALL;
 
   FILE *file;
-  if(!(file = fopen(fich, "a"))) {
-    Msg::Error("Unable to open file '%s'", fich);
+  if(!(file = fopen(filename.c_str(), "a"))) {
+    Msg::Error("Unable to open file '%s'", filename.c_str());
     return;
   }
   
   if(!CTX.expert_mode) {
     char no_ext[256], ext[256], base[256];
-    SplitFileName(fich, no_ext, ext, base);
+    SplitFileName(filename.c_str(), no_ext, ext, base);
     if(strlen(ext) && strcmp(ext, ".geo") && strcmp(ext, ".GEO")){
       char question[1024];
       sprintf(question, 
@@ -112,7 +93,7 @@ void add_infile(const char *text, const char *fich, bool deleted_something)
               "(You might want to create a new `.geo' file containing the command\n\n"
               "Merge \"%s\";\n\n"
               "and use that file instead. To disable this warning in the future, select\n"
-              "`Enable expert mode' in the option dialog.)", fich);
+              "`Enable expert mode' in the option dialog.)", filename.c_str());
       if(!Msg::GetBinaryAnswer(question, "Proceed", "Cancel", false)){
         fclose(file);
         return;
@@ -120,458 +101,272 @@ void add_infile(const char *text, const char *fich, bool deleted_something)
     }
   }
 
-  fprintf(file, "%s\n", text);
+  fprintf(file, "%s\n", text.c_str());
   fclose(file);
 #endif
 }
 
-void coherence(const char *fich)
+void coherence(std::string filename)
 {
-  add_infile("Coherence;", fich, true);
+  add_infile("Coherence;", filename, true);
 }
 
-static void strncat_list(char *text, List_T *list)
+static std::string list2string(List_T *list)
 {
-  char text2[BUFFSIZE];
+  std::ostringstream sstream;
   for(int i = 0; i < List_Nbr(list); i++){
     int num;
     List_Read(list, i, &num);
-    if(!i)
-      snprintf(text2, BUFFSIZE, "%d", num);
-    else
-      snprintf(text2, BUFFSIZE, ",%d", num);
-    strncat(text, text2, BUFFSIZE-strlen(text));
+    if(i) sstream << ", ";
+    sstream << num;
   }
+  return sstream.str();
 }
 
-void delet(List_T *list, const char *fich, const char *what)
+void delet(List_T *list, std::string filename, std::string what)
 {
-  char text[BUFFSIZE];
-
-  snprintf(text, BUFFSIZE, "Delete {\n  %s{", what);
-  strncat_list(text, list);
-  strncat(text, "};\n}", BUFFSIZE-strlen(text));
-  add_infile(text, fich, true);
+  std::ostringstream sstream;
+  sstream << "Delete {\n  " << what << "{" << list2string(list) << "};\n}";
+  add_infile(sstream.str(), filename, true);
 }
 
-void add_trsfsurf(int N, int *l, const char *fich, const char *dir)
+void add_trsfsurf(int N, int *l, std::string filename, std::string dir)
 {
-  char text[BUFFSIZE], text2[BUFFSIZE];
-
-  snprintf(text, BUFFSIZE, "Transfinite Surface {%d} = {", l[0]);
+  std::ostringstream sstream;
+  sstream << "Transfinite Surface {" << l[0] << "} = {";
   for(int i = 1; i < N; i++) {
-    if(i == 1)
-      snprintf(text2, BUFFSIZE, "%d", l[i]);
-    else
-      snprintf(text2, BUFFSIZE, ",%d", l[i]);
-    strncat(text, text2, BUFFSIZE-strlen(text));
+    if(i > 1) sstream << ", ";
+    sstream << l[i];
   }
-  if (!strcmp(dir,"Left"))
-    snprintf(text2, BUFFSIZE, "};");
+  if(dir == "Left")
+    sstream << "};";
   else
-    snprintf(text2, BUFFSIZE, "} %s;",dir);
-
-  strncat(text, text2, BUFFSIZE-strlen(text));
-  add_infile(text, fich);
+    sstream << "} " << dir << ";";
+  add_infile(sstream.str(), filename);
 }
 
-void add_charlength(List_T *list, const char *fich, const char *lc)
+void add_charlength(List_T *list, std::string filename, std::string lc)
 {
-  char text[BUFFSIZE];
-
-  snprintf(text, BUFFSIZE, "Characteristic Length {");
-  strncat_list(text, list);
-  strncat(text, "} = ", BUFFSIZE-strlen(text));
-  strncat(text, lc, BUFFSIZE-strlen(text));
-  strncat(text, ";", BUFFSIZE-strlen(text));
-  add_infile(text, fich);
+  std::ostringstream sstream;
+  sstream << "Characteristic Length {" << list2string(list) << "} = " << lc << ";";
+  add_infile(sstream.str().c_str(), filename);
 }
 
-void add_recosurf(List_T *list, const char *fich)
+void add_recosurf(List_T *list, std::string filename)
 {
-  char text[BUFFSIZE];
-
-  snprintf(text, BUFFSIZE, "Recombine Surface {");
-  strncat_list(text, list);
-  strncat(text, "};", BUFFSIZE-strlen(text));
-  add_infile(text, fich);
+  std::ostringstream sstream;
+  sstream << "Recombine Surface {" << list2string(list) << "};";
+  add_infile(sstream.str(), filename);
 }
 
-void add_trsfline(int N, int *l, const char *fich, const char *type, 
-                  const char *typearg, const char *pts)
+void add_trsfline(int N, int *l, std::string filename, std::string type, 
+                  std::string typearg, std::string pts)
 {
-  char text[BUFFSIZE], text2[BUFFSIZE];
-
-  snprintf(text, BUFFSIZE, "Transfinite Line {");
+  std::ostringstream sstream;
+  sstream << "Transfinite Line {";
   for(int i = 0; i < N; i++) {
-    if(!i)
-      snprintf(text2, BUFFSIZE, "%d", l[i]);
-    else
-      snprintf(text2, BUFFSIZE, ",%d", l[i]);
-    strncat(text, text2, BUFFSIZE-strlen(text));
+    if(i) sstream << ", ";
+    sstream << l[i];
   }
-  if(strlen(typearg))
-    snprintf(text2, BUFFSIZE, "} = %s Using %s %s;", pts, type, typearg);
+  if(typearg.empty())
+    sstream << "} = " << pts << ";";
   else
-    snprintf(text2, BUFFSIZE, "} = %s;", pts);
-  strncat(text, text2, BUFFSIZE-strlen(text));
-  add_infile(text, fich);
+    sstream << "} = " << pts << "Using " << type << " " << typearg << ";";
+  add_infile(sstream.str(), filename);
 }
 
-void add_param(const char *par, const char *value, const char *fich)
-{
-  char text[BUFFSIZE];
-  snprintf(text, BUFFSIZE, "%s = %s;", par, value);
-  add_infile(text, fich);
-}
-
-void add_point(const char *fich, const char *x, const char *y, const char *z, 
-               const char *lc)
-{
-  char text[BUFFSIZE];
-  int ip = NEWPOINT();
-  snprintf(text, BUFFSIZE, "Point(%d) = {%s,%s,%s,%s};", ip, x, y, z, lc);
-  add_infile(text, fich);
-}
-
-void add_field_option(int field_id, const char *option_name, const char *option_value, 
-		      const char *fich)
+void add_param(std::string par, std::string value, std::string filename)
 {
   std::ostringstream sstream;
-  sstream<<"Field["<<field_id<<"]."<<std::string(option_name)<<" = "
-	 <<std::string(option_value)<<";";
-  add_infile(sstream.str().c_str(),fich);
+  sstream << par << " = " << value << ";";
+  add_infile(sstream.str(), filename);
 }
 
-void add_field(int field_id, const char *type_name, const char *fich)
+void add_point(std::string filename, std::string x, std::string y,
+	       std::string z, std::string lc)
 {
   std::ostringstream sstream;
-  sstream<<"Field["<<field_id<<"] = "<<std::string(type_name)<<";";
-  add_infile(sstream.str().c_str(),fich);
+  sstream << "Point(" << NEWPOINT() << ") = {" << x << ", " << y << ", " 
+	  << z << ", " << lc << "};";
+  add_infile(sstream.str(), filename);
 }
 
-void delete_field(int field_id, const char *fich)
+void add_field_option(int field_id, std::string option_name, 
+		      std::string option_value, std::string filename)
 {
   std::ostringstream sstream;
-  sstream<<"Delete Field ["<<field_id<<"];";
-  add_infile(sstream.str().c_str(),fich);
+  sstream << "Field[" << field_id << "]." << option_name << " = " 
+	  << option_value << ";";
+  add_infile(sstream.str(), filename);
 }
 
-void set_background_field(int field_id,const char *fich)
+void add_field(int field_id, std::string type_name, std::string filename)
 {
   std::ostringstream sstream;
-  sstream<<"Background Field = "<<field_id<<";";
-  add_infile(sstream.str().c_str(),fich);
+  sstream << "Field[" << field_id << "] = " << type_name << ";";
+  add_infile(sstream.str(), filename);
 }
 
-void add_line(int p1, int p2, const char *fich)
+void delete_field(int field_id, std::string filename)
 {
-  char text[BUFFSIZE];
-  int iseg;
-  List_T *list = List_Create(2, 2, sizeof(int));
-  List_Add(list, &p1);
-  List_Add(list, &p2);
-  if((recognize_seg(MSH_SEGM_LINE, list, &iseg))) {
-    List_Delete(list);
-    return;
-  }
-  List_Delete(list);
-
-  snprintf(text, BUFFSIZE, "Line(%d) = {%d,%d};", NEWLINE(), p1, p2);
-  add_infile(text, fich);
-}
-
-void add_circ(int p1, int p2, int p3, const char *fich)
-{
-  char text[BUFFSIZE];
-
-  snprintf(text, BUFFSIZE, "Circle(%d) = {%d,%d,%d};", NEWLINE(), p1, p2, p3);
-  add_infile(text, fich);
-}
-
-void add_ell(int p1, int p2, int p3, int p4, const char *fich)
-{
-  char text[BUFFSIZE];
-
-  snprintf(text, BUFFSIZE, "Ellipse(%d) = {%d,%d,%d,%d};", NEWLINE(), p1, p2,
-           p3, p4);
-  add_infile(text, fich);
+  std::ostringstream sstream;
+  sstream << "Delete Field [" << field_id << "];";
+  add_infile(sstream.str(), filename);
 }
 
-void add_spline(int N, int *p, const char *fich)
+void set_background_field(int field_id,std::string filename)
 {
-  char text[BUFFSIZE], text2[BUFFSIZE];
-
-  snprintf(text, BUFFSIZE, "Spline(%d) = {", NEWLINE());
-  for(int i = 0; i < N; i++) {
-    if(i != N - 1)
-      snprintf(text2, BUFFSIZE, "%d,", p[i]);
-    else
-      snprintf(text2, BUFFSIZE, "%d};", p[i]);
-    strncat(text, text2, BUFFSIZE-strlen(text));
-  }
-  add_infile(text, fich);
+  std::ostringstream sstream;
+  sstream << "Background Field = " << field_id << ";";
+  add_infile(sstream.str(), filename);
 }
 
-void add_bezier(int N, int *p, const char *fich)
+void add_multline(std::string type, int N, int *p, std::string filename)
 {
-  char text[BUFFSIZE], text2[BUFFSIZE];
-
-  snprintf(text, BUFFSIZE, "Bezier(%d) = {", NEWLINE());
+  std::ostringstream sstream;
+  sstream << type << "(" << NEWLINE() << ") = {";
   for(int i = 0; i < N; i++) {
-    if(i != N - 1)
-      snprintf(text2, BUFFSIZE, "%d,", p[i]);
-    else
-      snprintf(text2, BUFFSIZE, "%d};", p[i]);
-    strncat(text, text2, BUFFSIZE-strlen(text));
+    if(i) sstream << ", ";
+    sstream << p[i];
   }
-  add_infile(text, fich);
+  sstream << "};";
+  add_infile(sstream.str(), filename);
 }
 
-void add_bspline(int N, int *p, const char *fich)
+void add_circ(int p1, int p2, int p3, std::string filename)
 {
-  char text[BUFFSIZE], text2[BUFFSIZE];
-
-  snprintf(text, BUFFSIZE, "BSpline(%d) = {", NEWLINE());
-  for(int i = 0; i < N; i++) {
-    if(i != N - 1)
-      snprintf(text2, BUFFSIZE, "%d,", p[i]);
-    else
-      snprintf(text2, BUFFSIZE, "%d};", p[i]);
-    strncat(text, text2, BUFFSIZE-strlen(text));
-  }
-  add_infile(text, fich);
+  std::ostringstream sstream;
+  sstream << "Circle(" << NEWLINE() << ") = {" << p1 << ", " << p2 << ", "
+	  << p3 << "};";
+  add_infile(sstream.str(), filename);
 }
 
-void add_multline(int N, int *p, const char *fich)
+void add_ell(int p1, int p2, int p3, int p4, std::string filename)
 {
-  char text[BUFFSIZE], text2[BUFFSIZE];
-  int iseg;
-
-  List_T *list = List_Create(N, 2, sizeof(int));
-  for(int i = 0; i < N; i++)
-    List_Add(list, &p[i]);
-  if((recognize_seg(MSH_SEGM_LINE, list, &iseg))) {
-    List_Delete(list);
-    return;
-  }
-  List_Delete(list);
-
-  snprintf(text, BUFFSIZE, "Line(%d) = {", NEWLINE());
-  for(int i = 0; i < N; i++) {
-    if(i != N - 1)
-      snprintf(text2, BUFFSIZE, "%d,", p[i]);
-    else
-      snprintf(text2, BUFFSIZE, "%d};", p[i]);
-    strncat(text, text2, BUFFSIZE-strlen(text));
-  }
-  add_infile(text, fich);
+  std::ostringstream sstream;
+  sstream << "Ellipse(" << NEWLINE() << ") = {" << p1 << ", " << p2 << ", "
+	  << p3 << ", " << p4 << "};";
+  add_infile(sstream.str(), filename);
 }
 
-void add_lineloop(List_T *list, const char *fich, int *numloop)
+void add_lineloop(List_T *list, std::string filename, int *numloop)
 {
-  char text[BUFFSIZE];
-
-  if((recognize_loop(list, numloop)))
-    return;
-
+  if(recognize_loop(list, numloop)) return;
   *numloop = NEWLINELOOP();
-  snprintf(text, BUFFSIZE, "Line Loop(%d) = {", *numloop);
-  strncat_list(text, list);
-  strncat(text, "};", BUFFSIZE-strlen(text));
-  add_infile(text, fich);
+  std::ostringstream sstream;
+  sstream << "Line Loop(" << *numloop << ") = {" << list2string(list) << "};";
+  add_infile(sstream.str(), filename);
 }
 
-void add_surf(List_T *list, const char *fich, int support, int typ)
+void add_surf(std::string type, List_T *list, std::string filename)
 {
-  char text[BUFFSIZE];
-
-  if(typ == 1) {
-    snprintf(text, BUFFSIZE, "Ruled Surface(%d) = {", NEWSURFACE());
-  }
-  else {
-    snprintf(text, BUFFSIZE, "Plane Surface(%d) = {", NEWSURFACE());
-  }
-  strncat_list(text, list);
-  strncat(text, "};", BUFFSIZE-strlen(text));
-  add_infile(text, fich);
+  std::ostringstream sstream;  
+  sstream << type << "(" << NEWSURFACE() << ") = {" << list2string(list) << "};";
+  add_infile(sstream.str(), filename);
 }
 
-void add_surfloop(List_T *list, const char *fich, int *numvol)
+void add_surfloop(List_T *list, std::string filename, int *numloop)
 {
-  char text[BUFFSIZE];
-
-  if((recognize_surfloop(list, numvol)))
-    return;
-
-  *numvol = NEWSURFACELOOP();
-  snprintf(text, BUFFSIZE, "Surface Loop(%d) = {", *numvol);
-  strncat_list(text, list);
-  strncat(text, "};", BUFFSIZE-strlen(text));
-  add_infile(text, fich);
+  if(recognize_surfloop(list, numloop)) return;
+  *numloop = NEWSURFACELOOP();
+  std::ostringstream sstream;
+  sstream << "Surface Loop(" << *numloop << ") = {" << list2string(list) << "};";
+  add_infile(sstream.str(), filename);
 }
 
-void add_vol(List_T *list, const char *fich)
+void add_vol(List_T *list, std::string filename)
 {
-  char text[BUFFSIZE];
-
-  snprintf(text, BUFFSIZE, "Volume(%d) = {", NEWVOLUME());
-  strncat_list(text, list);
-  strncat(text, "};", BUFFSIZE-strlen(text));
-  add_infile(text, fich);
+  std::ostringstream sstream;
+  sstream << "Volume(" << NEWVOLUME() << ") = {" << list2string(list) << "};";
+  add_infile(sstream.str(), filename);
 }
 
-void add_trsfvol(int N, int *l, const char *fich)
+void add_trsfvol(int N, int *l, std::string filename)
 {
-  char text[BUFFSIZE], text2[BUFFSIZE];
-
-  snprintf(text, BUFFSIZE, "Transfinite Volume{%d} = {", l[0]);
+  std::ostringstream sstream;
+  sstream << "Transfinite Volume{" << l[0] << "} = {";
   for(int i = 1; i < N; i++) {
-    if(i == 1)
-      snprintf(text2, BUFFSIZE, "%d", l[i]);
-    else
-      snprintf(text2, BUFFSIZE, ",%d", l[i]);
-    strncat(text, text2, BUFFSIZE-strlen(text));
+    if(i > 1) sstream << ", ";
+    sstream << l[i];
   }
-  snprintf(text2, BUFFSIZE, "};");
-  strncat(text, text2, BUFFSIZE-strlen(text));
-  add_infile(text, fich);
+  sstream << "};";
+  add_infile(sstream.str(), filename);
 }
 
-int add_physical(List_T *list, const char *fich, int type)
+void add_physical(std::string type, List_T *list, std::string filename)
 {
-  char text[BUFFSIZE];
-  int num = NEWPHYSICAL();
-  
-  switch (type) {
-  case ENT_POINT:
-    snprintf(text, BUFFSIZE, "Physical Point(%d) = {", num);
-    break;
-  case ENT_LINE:
-    snprintf(text, BUFFSIZE, "Physical Line(%d) = {", num);
-    break;
-  case ENT_SURFACE:
-    snprintf(text, BUFFSIZE, "Physical Surface(%d) = {", num);
-    break;
-  case ENT_VOLUME:
-    snprintf(text, BUFFSIZE, "Physical Volume(%d) = {", num);
-    break;
-  }
-
-  strncat_list(text, list);
-  strncat(text, "};", BUFFSIZE-strlen(text));
-  add_infile(text, fich);
-  
-  return num;
+  std::ostringstream sstream;
+  sstream << "Physical " << type << "(" << NEWPHYSICAL() << ") = {" 
+	  << list2string(list) << "};";
+  add_infile(sstream.str(), filename);
 }
 
-void translate(int add, List_T *list, const char *fich, const char *what,
-               const char *tx, const char *ty, const char *tz)
+void translate(int add, List_T *list, std::string filename, std::string what,
+               std::string tx, std::string ty, std::string tz)
 {
-  char text[BUFFSIZE];
-
-  if(add)
-    snprintf(text, BUFFSIZE, "Translate {%s,%s,%s} {\n  Duplicata { %s{", tx, ty, tz, what);
-  else
-    snprintf(text, BUFFSIZE, "Translate {%s,%s,%s} {\n  %s{", tx, ty, tz, what);
-
-  strncat_list(text, list);
-  
-  if(add)
-    strncat(text, "}; }\n}", BUFFSIZE-strlen(text));
-  else
-    strncat(text, "};\n}", BUFFSIZE-strlen(text));
-
-  add_infile(text, fich);
+  std::ostringstream sstream;
+  sstream << "Translate {" << tx << ", " << ty << ", " << tz << "} {\n  ";
+  if(add) sstream << "Duplicata { ";
+  sstream << what << "{" << list2string(list) << "};";
+  if(add) sstream << " }";
+  sstream << "\n}";
+  add_infile(sstream.str(), filename);
 }
 
-void rotate(int add, List_T *list, const char *fich, const char *what, 
-            const char *ax, const char *ay, const char *az,
-            const char *px, const char *py, const char *pz, const char *angle)
+void rotate(int add, List_T *list, std::string filename, std::string what, 
+            std::string ax, std::string ay, std::string az,
+            std::string px, std::string py, std::string pz, std::string angle)
 {
-  char text[BUFFSIZE];
-
-  if(add)
-    snprintf(text, BUFFSIZE, "Rotate {{%s,%s,%s}, {%s,%s,%s}, %s} {\n  Duplicata { %s{",
-             ax, ay, az, px, py, pz, angle, what);
-  else
-    snprintf(text, BUFFSIZE, "Rotate {{%s,%s,%s}, {%s,%s,%s}, %s} {\n  %s{",
-             ax, ay, az, px, py, pz, angle, what);
-
-  strncat_list(text, list);
-
-  if(add)
-    strncat(text, "}; }\n}", BUFFSIZE-strlen(text));
-  else
-    strncat(text, "};\n}", BUFFSIZE-strlen(text));
-
-  add_infile(text, fich);
+  std::ostringstream sstream;
+  sstream << "Rotate {{" << ax << ", " << ay << ", " << az << "}, {" 
+	  << px << ", " << py << ", " << pz << "}, " << angle << "} {\n  ";
+  if(add) sstream << "Duplicata { ";
+  sstream << what << "{" << list2string(list) << "};";
+  if(add) sstream << " }";
+  sstream << "\n}";
+  add_infile(sstream.str(), filename);
 }
 
-void dilate(int add, List_T *list, const char *fich, const char *what,
-            const char *dx, const char *dy, const char *dz, const char *df)
+void dilate(int add, List_T *list, std::string filename, std::string what,
+            std::string dx, std::string dy, std::string dz, std::string df)
 {
-  char text[BUFFSIZE];
-
-  if(add)
-    snprintf(text, BUFFSIZE, "Dilate {{%s,%s,%s}, %s} {\n  Duplicata { %s{",
-             dx, dy, dz, df, what);
-  else
-    snprintf(text, BUFFSIZE, "Dilate {{%s,%s,%s}, %s} {\n  %s{",
-             dx, dy, dz, df, what);
-
-  strncat_list(text, list);
-
-  if(add)
-    strncat(text, "}; }\n}", BUFFSIZE-strlen(text));
-  else
-    strncat(text, "};\n}", BUFFSIZE-strlen(text));
-
-  add_infile(text, fich);
+  std::ostringstream sstream;
+  sstream << "Dilate {{" << dx << ", " << dy << ", " << dz << "}, " << df << "} {\n  ";
+  if(add) sstream << "Duplicata { ";
+  sstream << what << "{" << list2string(list) << "};";
+  if(add) sstream << " }";
+  sstream << "\n}";
+  add_infile(sstream.str(), filename);
 }
 
-void symmetry(int add, List_T *list, const char *fich, const char *what,
-              const char *sa, const char *sb, const char *sc, const char *sd)
+void symmetry(int add, List_T *list, std::string filename, std::string what,
+              std::string sa, std::string sb, std::string sc, std::string sd)
 {
-  char text[BUFFSIZE];
-
-  if(add)
-    snprintf(text, BUFFSIZE, "Symmetry {%s,%s,%s,%s} {\n  Duplicata { %s{",
-             sa, sb, sc, sd, what);
-  else
-    snprintf(text, BUFFSIZE, "Symmetry {%s,%s,%s,%s} {\n  %s{",
-             sa, sb, sc, sd, what);
-
-  strncat_list(text, list);
-
-  if(add)
-    strncat(text, "}; }\n}", BUFFSIZE-strlen(text));
-  else
-    strncat(text, "};\n}", BUFFSIZE-strlen(text));
-
-  add_infile(text, fich);
+  std::ostringstream sstream;
+  sstream << "Symmetry {" << sa << ", " << sb << ", " << sc << ", " << sd << "} {\n  ";
+  if(add) sstream << "Duplicata { ";
+  sstream << what << "{" << list2string(list) << "};";
+  if(add) sstream << " }";
+  sstream << "\n}";
+  add_infile(sstream.str(), filename);
 }
 
-void extrude(List_T *list, const char *fich, const char *what, 
-             const char *tx, const char *ty, const char *tz)
+void extrude(List_T *list, std::string filename, std::string what, 
+             std::string tx, std::string ty, std::string tz)
 {
-  char text[BUFFSIZE];
-
-  snprintf(text, BUFFSIZE, "Extrude {%s,%s,%s} {\n  %s{", tx, ty, tz, what);
-  strncat_list(text, list);
-  strncat(text, "};\n}", BUFFSIZE-strlen(text));
-  add_infile(text, fich);
+  std::ostringstream sstream;
+  sstream << "Extrude {" << tx << ", " << ty << ", " << tz << "} {\n  " << what 
+	  << "{" << list2string(list) << "};\n}";
+  add_infile(sstream.str(), filename);
 }
 
-void protude(List_T *list, const char *fich, const char *what, 
-             const char *ax, const char *ay, const char *az,
-             const char *px, const char *py, const char *pz, const char *angle)
+void protude(List_T *list, std::string filename, std::string what, 
+             std::string ax, std::string ay, std::string az,
+             std::string px, std::string py, std::string pz, std::string angle)
 {
-  char text[BUFFSIZE];
-
-  snprintf(text, BUFFSIZE, "Extrude {{%s,%s,%s}, {%s,%s,%s}, %s} {\n  %s{",
-           ax, ay, az, px, py, pz, angle, what);
-  strncat_list(text, list);
-  strncat(text, "};\n}", BUFFSIZE-strlen(text));
-  add_infile(text, fich);
+  std::ostringstream sstream;
+  sstream << "Extrude {{" << ax << ", " << ay << ", " << az << "}, {" 
+	  << px << ", " << py << ", " << pz << "}, " << angle << "} {\n  "
+	  << what << "{" << list2string(list) << "};\n}";
+  add_infile(sstream.str(), filename);
 }
diff --git a/Geo/GeoStringInterface.h b/Geo/GeoStringInterface.h
index d5523dcd731b104913e4e5f076b9fa788a5fbeea..f3408363dd1bd625e93183bc37b9f18f6d0790d8 100644
--- a/Geo/GeoStringInterface.h
+++ b/Geo/GeoStringInterface.h
@@ -6,51 +6,49 @@
 #ifndef _GEO_STRING_INTERFACE_H_
 #define _GEO_STRING_INTERFACE_H_
 
+#include <string>
 #include "ListUtils.h"
 
-double evaluate_scalarfunction(const char *var, double val, const char *funct);
+double evaluate_scalarfunction(std::string var, double val, std::string funct);
 
-void coherence(const char *fich);
-void delet(List_T *list, const char *fich, const char *what);
-void add_infile(const char *text, const char *fich, bool deleted_something=false);
-void add_trsfline(int N, int *l, const char *fich, const char *type, 
-                  const char *typearg, const char *pts);
-void add_trsfsurf(int N, int *l, const char *fich, const char *dir);
-void add_trsfvol(int N, int *l, const char *fich);
-void add_charlength(List_T *list, const char *fich, const char *lc);
-void add_recosurf(List_T *list, const char *fich);
-void add_param(const char *par, const char *value, const char *fich);
-void add_point(const char *fich, const char *x, const char *y, const char *z, 
-               const char *lc);
-void add_line(int p1, int p2, const char *fich);
-void add_circ(int p1, int p2, int p3, const char *fich);
-void add_ell(int p1, int p2, int p3, int p4, const char *fich);
-void add_spline(int N, int *p, const char *fich);
-void add_bezier(int N, int *p, const char *fich);
-void add_bspline(int N, int *p, const char *fich);
-void add_field_option(int field_id, const char *option_name, const char *option_value, const char *fich);
-void add_field(int field_id, const char *type_name, const char *fich);
-void delete_field(int field_id, const char *fich);
-void set_background_field(int field_id,const char *fich);
-void add_multline(int N, int *p, const char *fich);
-void add_lineloop(List_T *list, const char *fich, int *numloop);
-void add_surf(List_T *list, const char *fich, int support, int typ);
-void add_surfloop(List_T *list, const char *fich, int *numvol);
-void add_vol(List_T *list, const char *fich);
-int add_physical(List_T *list, const char *fich, int type);
-void translate(int add, List_T *list, const char *fich, const char *what,
-               const char *tx, const char *ty, const char *tz);
-void rotate(int add, List_T *list, const char *fich, const char *what, 
-            const char *ax, const char *ay, const char *az,
-            const char *px, const char *py, const char *pz, const char *angle);
-void dilate(int add, List_T *list, const char *fich, const char *what,
-            const char *dx, const char *dy, const char *dz, const char *df);
-void symmetry(int add, List_T *list, const char *fich, const char *what, 
-              const char *sa, const char *sb, const char *sc, const char *sd);
-void extrude(List_T *list, const char *fich, const char *what, const char *tx, 
-             const char *ty, const char *tz);
-void protude(List_T *list, const char *fich, const char *what, 
-             const char *ax, const char *ay, const char *az, 
-             const char *px, const char *py, const char *pz, const char *angle);
+void coherence(std::string filename);
+void delet(List_T *list, std::string filename, std::string what);
+void add_infile(std::string text, std::string filename, bool deleted_something=false);
+void add_trsfline(int N, int *l, std::string filename, std::string type, 
+                  std::string typearg, std::string pts);
+void add_trsfsurf(int N, int *l, std::string filename, std::string dir);
+void add_trsfvol(int N, int *l, std::string filename);
+void add_charlength(List_T *list, std::string filename, std::string lc);
+void add_recosurf(List_T *list, std::string filename);
+void add_param(std::string par, std::string value, std::string filename);
+void add_point(std::string filename, std::string x, std::string y, std::string z, 
+               std::string lc);
+void add_multline(std::string type, int N, int *p, std::string filename);
+void add_circ(int p1, int p2, int p3, std::string filename);
+void add_ell(int p1, int p2, int p3, int p4, std::string filename);
+void add_field_option(int field_id, std::string option_name, std::string option_value,
+		      std::string filename);
+void add_field(int field_id, std::string type_name, std::string filename);
+void delete_field(int field_id, std::string filename);
+void set_background_field(int field_id,std::string filename);
+void add_lineloop(List_T *list, std::string filename, int *numloop);
+void add_surf(std::string type, List_T *list, std::string filename);
+void add_surfloop(List_T *list, std::string filename, int *numvol);
+void add_vol(List_T *list, std::string filename);
+void add_physical(std::string type, List_T *list, std::string filename);
+void translate(int add, List_T *list, std::string filename, std::string what,
+               std::string tx, std::string ty, std::string tz);
+void rotate(int add, List_T *list, std::string filename, std::string what, 
+            std::string ax, std::string ay, std::string az,
+            std::string px, std::string py, std::string pz, std::string angle);
+void dilate(int add, List_T *list, std::string filename, std::string what,
+            std::string dx, std::string dy, std::string dz, std::string df);
+void symmetry(int add, List_T *list, std::string filename, std::string what, 
+              std::string sa, std::string sb, std::string sc, std::string sd);
+void extrude(List_T *list, std::string filename, std::string what, std::string tx, 
+             std::string ty, std::string tz);
+void protude(List_T *list, std::string filename, std::string what, 
+             std::string ax, std::string ay, std::string az, 
+             std::string px, std::string py, std::string pz, std::string angle);
 
 #endif
diff --git a/configure b/configure
index 7411648e18d7dfffa9b0a43268819fc21e942d5d..c129aad5a20da4b9216d681f2a445e153a6726a9 100755
--- a/configure
+++ b/configure
@@ -4369,93 +4369,6 @@ else
   FLAGS="-DHAVE_NO_VSNPRINTF ${FLAGS}"
 fi
 
-{ echo "$as_me:$LINENO: checking for snprintf" >&5
-echo $ECHO_N "checking for snprintf... $ECHO_C" >&6; }
-if test "${ac_cv_func_snprintf+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define snprintf to an innocuous variant, in case <limits.h> declares snprintf.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define snprintf innocuous_snprintf
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char snprintf (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef snprintf
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char snprintf ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_snprintf || defined __stub___snprintf
-choke me
-#endif
-
-int
-main ()
-{
-return snprintf ();
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-	 test -z "$ac_cxx_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  ac_cv_func_snprintf=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_cv_func_snprintf=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_func_snprintf" >&5
-echo "${ECHO_T}$ac_cv_func_snprintf" >&6; }
-if test $ac_cv_func_snprintf = yes; then
-  :
-else
-  FLAGS="-DHAVE_NO_SNPRINTF ${FLAGS}"
-fi
-
 
 cat >conftest.$ac_ext <<_ACEOF
 /* confdefs.h.  */
diff --git a/configure.in b/configure.in
index ca1392819ab22b48d25a0da5fab998f1b3d4f414..d65a12f6fb9506de0760f2e75727bd3c8263305f 100644
--- a/configure.in
+++ b/configure.in
@@ -378,7 +378,6 @@ AC_CHECK_LIB(m,main)
 
 dnl Check for various functions
 AC_CHECK_FUNC(vsnprintf,,FLAGS="-DHAVE_NO_VSNPRINTF ${FLAGS}")
-AC_CHECK_FUNC(snprintf,,FLAGS="-DHAVE_NO_SNPRINTF ${FLAGS}")
 
 dnl Check if Unix98 socklen_t type is available
 AC_TRY_COMPILE(
diff --git a/utils/misc/variables.msvc b/utils/misc/variables.msvc
index 83b89f0174da9deadb7c66bc117a07b0a38bef82..133aa07e156e2f886d7b6140e91562be51e4c9cb 100644
--- a/utils/misc/variables.msvc
+++ b/utils/misc/variables.msvc
@@ -45,7 +45,7 @@ endif
 LINKER=cl /F16777216
 
 # All compiler flags except optimization flags
-FLAGS=/DWIN32 /D_USE_MATH_DEFINES /DHAVE_NO_DLL /DHAVE_NO_VSNPRINTF /DHAVE_NO_SNPRINTF /DHAVE_NO_SOCKLEN_T /DHAVE_ANN /DHAVE_MATH_EVAL
+FLAGS=/DWIN32 /D_USE_MATH_DEFINES /DHAVE_NO_DLL /DHAVE_NO_VSNPRINTF /DHAVE_NO_SOCKLEN_T /DHAVE_ANN /DHAVE_MATH_EVAL
 
 # Additional system includes ($INCLUDE is automatically defined by MSVC when
 # you launch the MSVC command prompt)