@@ -931,7 +931,16 @@ static int git_parse_int64(const char *value, int64_t *ret)
931
931
int git_parse_ulong (const char * value , unsigned long * ret )
932
932
{
933
933
uintmax_t tmp ;
934
- if (!git_parse_unsigned (value , & tmp , maximum_unsigned_value_of_type (long )))
934
+ if (!git_parse_unsigned (value , & tmp , maximum_unsigned_value_of_type (unsigned long )))
935
+ return 0 ;
936
+ * ret = tmp ;
937
+ return 1 ;
938
+ }
939
+
940
+ int git_parse_size_t (const char * value , size_t * ret )
941
+ {
942
+ uintmax_t tmp ;
943
+ if (!git_parse_unsigned (value , & tmp , maximum_unsigned_value_of_type (size_t )))
935
944
return 0 ;
936
945
* ret = tmp ;
937
946
return 1 ;
@@ -1004,6 +1013,15 @@ unsigned long git_config_ulong(const char *name, const char *value)
1004
1013
return ret ;
1005
1014
}
1006
1015
1016
+ /* on Windows we require size_t to cover the 64-bit range */
1017
+ size_t git_config_size_t (const char * name , const char * value )
1018
+ {
1019
+ size_t ret ;
1020
+ if (!git_parse_size_t (value , & ret ))
1021
+ die_bad_number (name , value );
1022
+ return ret ;
1023
+ }
1024
+
1007
1025
ssize_t git_config_ssize_t (const char * name , const char * value )
1008
1026
{
1009
1027
ssize_t ret ;
@@ -1218,12 +1236,12 @@ static int git_default_core_config(const char *var, const char *value, void *cb)
1218
1236
}
1219
1237
1220
1238
if (!strcmp (var , "core.bigfilethreshold" )) {
1221
- big_file_threshold = git_config_ulong (var , value );
1239
+ big_file_threshold = git_config_size_t (var , value );
1222
1240
return 0 ;
1223
1241
}
1224
1242
1225
1243
if (!strcmp (var , "core.packedgitlimit" )) {
1226
- packed_git_limit = git_config_ulong (var , value );
1244
+ packed_git_limit = git_config_size_t (var , value );
1227
1245
return 0 ;
1228
1246
}
1229
1247
@@ -1471,7 +1489,7 @@ int git_default_config(const char *var, const char *value, void *cb)
1471
1489
}
1472
1490
1473
1491
if (!strcmp (var , "pack.packsizelimit" )) {
1474
- pack_size_limit_cfg = git_config_ulong (var , value );
1492
+ pack_size_limit_cfg = git_config_size_t (var , value );
1475
1493
return 0 ;
1476
1494
}
1477
1495
@@ -1655,6 +1673,18 @@ unsigned long git_env_ulong(const char *k, unsigned long val)
1655
1673
return val ;
1656
1674
}
1657
1675
1676
+ /*
1677
+ * Parse environment variable 'k' as ulong with possibly a unit
1678
+ * suffix; if missing, use the default value 'val'.
1679
+ */
1680
+ size_t git_env_size_t (const char * k , size_t val )
1681
+ {
1682
+ const char * v = getenv (k );
1683
+ if (v && !git_parse_size_t (v , & val ))
1684
+ die (_ ("failed to parse %s" ), k );
1685
+ return val ;
1686
+ }
1687
+
1658
1688
int git_config_system (void )
1659
1689
{
1660
1690
return !git_env_bool ("GIT_CONFIG_NOSYSTEM" , 0 );
0 commit comments