@@ -932,7 +932,16 @@ static int git_parse_int64(const char *value, int64_t *ret)
932932int git_parse_ulong (const char * value , unsigned long * ret )
933933{
934934 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 )))
936945 return 0 ;
937946 * ret = tmp ;
938947 return 1 ;
@@ -1005,6 +1014,15 @@ unsigned long git_config_ulong(const char *name, const char *value)
10051014 return ret ;
10061015}
10071016
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+
10081026ssize_t git_config_ssize_t (const char * name , const char * value )
10091027{
10101028 ssize_t ret ;
@@ -1219,12 +1237,12 @@ static int git_default_core_config(const char *var, const char *value, void *cb)
12191237 }
12201238
12211239 if (!strcmp (var , "core.bigfilethreshold" )) {
1222- big_file_threshold = git_config_ulong (var , value );
1240+ big_file_threshold = git_config_size_t (var , value );
12231241 return 0 ;
12241242 }
12251243
12261244 if (!strcmp (var , "core.packedgitlimit" )) {
1227- packed_git_limit = git_config_ulong (var , value );
1245+ packed_git_limit = git_config_size_t (var , value );
12281246 return 0 ;
12291247 }
12301248
@@ -1467,7 +1485,7 @@ int git_default_config(const char *var, const char *value, void *cb)
14671485 }
14681486
14691487 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 );
14711489 return 0 ;
14721490 }
14731491
@@ -1651,6 +1669,18 @@ unsigned long git_env_ulong(const char *k, unsigned long val)
16511669 return val ;
16521670}
16531671
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+
16541684int git_config_system (void )
16551685{
16561686 return !git_env_bool ("GIT_CONFIG_NOSYSTEM" , 0 );
0 commit comments