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