From acb2de0554f379e2bf4af9fa291b28f214bf66d0 Mon Sep 17 00:00:00 2001
From: Seth Hillbrand <seth@kipro-pcb.com>
Date: Wed, 13 Sep 2023 07:27:53 -0700
Subject: [PATCH] Fix issue with clang and older gcc

Not all compilers support c++17 yet so we can't use the floating point
version of from_chars

Fixes https://gitlab.com/kicad/code/kicad/-/issues/15633
---
 gerbview/excellon_read_drill_file.cpp | 18 +++---------------
 1 file changed, 3 insertions(+), 15 deletions(-)

diff --git a/gerbview/excellon_read_drill_file.cpp b/gerbview/excellon_read_drill_file.cpp
index bc214b3b0f..3ba97272b3 100644
--- a/gerbview/excellon_read_drill_file.cpp
+++ b/gerbview/excellon_read_drill_file.cpp
@@ -409,12 +409,8 @@ bool EXCELLON_IMAGE::TestFileIsExcellon( const wxString& aFullFileName )
                 else
                 {
                     double x_val;
-                    char* start = letter + 1;
-                    char* end = letter + strlen( letter );
 
-                    std::from_chars_result res = std::from_chars( start, end, x_val );
-
-                    if( res.ec != std::errc::invalid_argument )
+                    if( wxString( letter + 1 ).ToCDouble( &x_val ) )
                         foundT = true;
                 }
             }
@@ -423,24 +419,16 @@ bool EXCELLON_IMAGE::TestFileIsExcellon( const wxString& aFullFileName )
             if( ( letter = strstr( line, "X" ) ) != nullptr )
             {
                 double x_val;
-                char* start = letter + 1;
-                char* end = letter + strlen( letter );
 
-                std::from_chars_result res = std::from_chars( start, end, x_val );
-
-                if( res.ec != std::errc::invalid_argument )
+                if( wxString( letter + 1 ).ToCDouble( &x_val ) )
                     foundX = true;
             }
 
             if( ( letter = strstr( line, "Y" ) ) != nullptr )
             {
                 double x_val;
-                char* start = letter + 1;
-                char* end = letter + strlen( letter );
 
-                std::from_chars_result res = std::from_chars( start, end, x_val );
-
-                if( res.ec != std::errc::invalid_argument )
+                if( wxString( letter + 1 ).ToCDouble( &x_val ) )
                     foundY = true;
             }
         }