2929
3030#include  "semver.h" 
3131
32+ char  * semver_strdup (const  char  * str ) {
33+   size_t  n  =  strlen (str )+ 1 ;
34+   char  * d  =  malloc (n );
35+   if (d ) {
36+     strcpy (d ,str );
37+   }
38+   return  d ;
39+ }
3240
3341int  semver_cmp (const  char  * _a , const  char  * _b , int  * res ) {
3442  semver_version  a ,b ;
@@ -121,12 +129,12 @@ semver_version semver_version_from(unsigned long major, unsigned long minor,
121129  res -> minor  =  minor ;
122130  res -> patch  =  patch ;
123131  if  (prerelease  !=  NULL  &&  strlen (prerelease ) >  0 ) {
124-     res -> prerelease  =  strdup (prerelease );
132+     res -> prerelease  =  semver_strdup (prerelease );
125133  } else  {
126134    res -> prerelease  =  0 ;
127135  }
128136  if  (build  !=  NULL  &&  strlen (build ) >  0 ) {
129-     res -> build  =  strdup (build );
137+     res -> build  =  semver_strdup (build );
130138  } else  {
131139    res -> build  =  0 ;
132140  }
@@ -186,10 +194,10 @@ semver_version semver_version_from_copy(const semver_version _v) {
186194  res -> build  =  0 ;
187195
188196  if  (v -> prerelease  !=  0 ) {
189-     res -> prerelease  =  strdup (v -> prerelease );
197+     res -> prerelease  =  semver_strdup (v -> prerelease );
190198  }
191199  if  (v -> build  !=  0 ) {
192-     res -> build  =  strdup (v -> build );
200+     res -> build  =  semver_strdup (v -> build );
193201  }
194202
195203  return  (semver_version )res ;
@@ -363,11 +371,11 @@ int semver_version_from_string_impl(semver_version _self, const char *s) {
363371    memset (scratch , 0 , sizeof (scratch ));
364372    do  {
365373      if  (* p  ==  0 ) {
366-         self -> prerelease  =  strdup (scratch );
374+         self -> prerelease  =  semver_strdup (scratch );
367375        return  SEMVER_OK ; /* at end */ 
368376      }
369377      if  (* p  ==  '+' ) {
370-         self -> prerelease  =  strdup (scratch );
378+         self -> prerelease  =  semver_strdup (scratch );
371379        /* prerelease read, more to follow */ 
372380        break ;
373381      }
@@ -388,7 +396,7 @@ int semver_version_from_string_impl(semver_version _self, const char *s) {
388396    memset (scratch , 0 , sizeof (scratch ));
389397    do  {
390398      if  (* p  ==  0 ) {
391-         self -> build  =  strdup (scratch );
399+         self -> build  =  semver_strdup (scratch );
392400        return  SEMVER_OK ;
393401      }
394402      if  ((* p  >= '0'  &&  * p  <= '9' ) ||  (* p  >= 'a'  &&  * p  <= 'z' ) || 
@@ -530,7 +538,7 @@ int semver_version_prerelease_cmp(const char *a, const char *b) {
530538
531539  /* split each string by '.' */ 
532540  na  =  count_dots (a ) +  1 ;
533-   _a  =  strdup (a );
541+   _a  =  semver_strdup (a );
534542
535543  arr_a  =  (char  * * )calloc (na , sizeof (char  * ));
536544  p  =  _a ;
@@ -549,7 +557,7 @@ int semver_version_prerelease_cmp(const char *a, const char *b) {
549557  /* -- b 
550558    split each string by '.' */ 
551559  nb  =  count_dots (b ) +  1 ;
552-   _b  =  strdup (b );
560+   _b  =  semver_strdup (b );
553561
554562  arr_b  =  (char  * * )calloc (nb , sizeof (char  * ));
555563  p  =  _b ;
0 commit comments