Fossil SCM
Add fossil_strndup() function to duplicate a string that is not necessarily NUL-terminated
Commit
b98776679e613d1a85dd2150e4b991f4ab654c7d
Parent
90057326f4ea86c…
1 file changed
+10
-2
+10
-2
| --- src/import.c | ||
| +++ src/import.c | ||
| @@ -76,18 +76,26 @@ | ||
| 76 | 76 | } gg; |
| 77 | 77 | |
| 78 | 78 | /* |
| 79 | 79 | ** Duplicate a string. |
| 80 | 80 | */ |
| 81 | -char *fossil_strdup(const char *zOrig){ | |
| 81 | +char *fossil_strndup(const char *zOrig, int len){ | |
| 82 | 82 | char *z = 0; |
| 83 | 83 | if( zOrig ){ |
| 84 | - int n = strlen(zOrig); | |
| 84 | + int n; | |
| 85 | + if( len<0 ){ | |
| 86 | + n = strlen(zOrig); | |
| 87 | + }else{ | |
| 88 | + for( n=0; zOrig[n] && n<len; ++n ); | |
| 89 | + } | |
| 85 | 90 | z = fossil_malloc( n+1 ); |
| 86 | 91 | memcpy(z, zOrig, n+1); |
| 87 | 92 | } |
| 88 | 93 | return z; |
| 94 | +} | |
| 95 | +char *fossil_strdup(const char *zOrig){ | |
| 96 | + return fossil_strndup(zOrig, -1); | |
| 89 | 97 | } |
| 90 | 98 | |
| 91 | 99 | /* |
| 92 | 100 | ** A no-op "xFinish" method |
| 93 | 101 | */ |
| 94 | 102 |
| --- src/import.c | |
| +++ src/import.c | |
| @@ -76,18 +76,26 @@ | |
| 76 | } gg; |
| 77 | |
| 78 | /* |
| 79 | ** Duplicate a string. |
| 80 | */ |
| 81 | char *fossil_strdup(const char *zOrig){ |
| 82 | char *z = 0; |
| 83 | if( zOrig ){ |
| 84 | int n = strlen(zOrig); |
| 85 | z = fossil_malloc( n+1 ); |
| 86 | memcpy(z, zOrig, n+1); |
| 87 | } |
| 88 | return z; |
| 89 | } |
| 90 | |
| 91 | /* |
| 92 | ** A no-op "xFinish" method |
| 93 | */ |
| 94 |
| --- src/import.c | |
| +++ src/import.c | |
| @@ -76,18 +76,26 @@ | |
| 76 | } gg; |
| 77 | |
| 78 | /* |
| 79 | ** Duplicate a string. |
| 80 | */ |
| 81 | char *fossil_strndup(const char *zOrig, int len){ |
| 82 | char *z = 0; |
| 83 | if( zOrig ){ |
| 84 | int n; |
| 85 | if( len<0 ){ |
| 86 | n = strlen(zOrig); |
| 87 | }else{ |
| 88 | for( n=0; zOrig[n] && n<len; ++n ); |
| 89 | } |
| 90 | z = fossil_malloc( n+1 ); |
| 91 | memcpy(z, zOrig, n+1); |
| 92 | } |
| 93 | return z; |
| 94 | } |
| 95 | char *fossil_strdup(const char *zOrig){ |
| 96 | return fossil_strndup(zOrig, -1); |
| 97 | } |
| 98 | |
| 99 | /* |
| 100 | ** A no-op "xFinish" method |
| 101 | */ |
| 102 |