@@ -215,25 +215,17 @@ pub fn resolveTargetQuery(query: Target.Query) DetectError!Target {
215215    var  os  =  query_os_tag .defaultVersionRange (query_cpu_arch , query_abi );
216216    if  (query .os_tag  ==  null ) {
217217        switch  (builtin .target .os .tag ) {
218-             .linux  = >  {
218+             .linux ,  .illumos  = >  {
219219                const  uts  =  posix .uname ();
220220                const  release  =  mem .sliceTo (& uts .release , 0 );
221221                // The release field sometimes has a weird format, 
222222                // `Version.parse` will attempt to find some meaningful interpretation. 
223223                if  (std .SemanticVersion .parse (release )) | ver |  {
224-                     os .version_range .linux .range .min  =  ver ;
225-                     os .version_range .linux .range .max  =  ver ;
226-                 } else  | err |  switch  (err ) {
227-                     error .Overflow  = >  {},
228-                     error .InvalidVersion  = >  {},
229-                 }
230-             },
231-             .illumos  = >  {
232-                 const  uts  =  posix .uname ();
233-                 const  release  =  mem .sliceTo (& uts .release , 0 );
234-                 if  (std .SemanticVersion .parse (release )) | ver |  {
235-                     os .version_range .semver .min  =  ver ;
236-                     os .version_range .semver .max  =  ver ;
224+                     var  stripped  =  ver ;
225+                     stripped .pre  =  null ;
226+                     stripped .build  =  null ;
227+                     os .version_range .linux .range .min  =  stripped ;
228+                     os .version_range .linux .range .max  =  stripped ;
237229                } else  | err |  switch  (err ) {
238230                    error .Overflow  = >  {},
239231                    error .InvalidVersion  = >  {},
@@ -307,10 +299,9 @@ pub fn resolveTargetQuery(query: Target.Query) DetectError!Target {
307299                    posix .CTL .KERN ,
308300                    posix .KERN .OSRELEASE ,
309301                };
310-                 var  buf : [64 ]u8  =  undefined ;
302+                 var  buf : [64 : 0 ]u8  =  undefined ;
311303                // consider that sysctl result includes null-termination 
312-                 // reserve 1 byte to ensure we never overflow when appending ".0" 
313-                 var  len : usize  =  buf .len  -  1 ;
304+                 var  len : usize  =  buf .len  +  1 ;
314305
315306                posix .sysctl (& mib , & buf , & len , null , 0 ) catch  | err |  switch  (err ) {
316307                    error .NameTooLong  = >  unreachable , // constant, known good value 
@@ -320,12 +311,9 @@ pub fn resolveTargetQuery(query: Target.Query) DetectError!Target {
320311                    error .Unexpected  = >  return  error .OSVersionDetectionFail ,
321312                };
322313
323-                 // append ".0" to satisfy semver 
324-                 buf [len  -  1 ] =  '.' ;
325-                 buf [len ] =  '0' ;
326-                 len  +=  1 ;
327- 
328-                 if  (std .SemanticVersion .parse (buf [0.. len ])) | ver |  {
314+                 if  (Target .Query .parseVersion (buf [0.. len  :0 ])) | ver |  {
315+                     assert (ver .build  ==  null );
316+                     assert (ver .pre  ==  null );
329317                    os .version_range .semver .min  =  ver ;
330318                    os .version_range .semver .max  =  ver ;
331319                } else  | _ |  {
0 commit comments