On Tue, 2019-11-05 at 09:17 +0100, Jan Beich wrote: > Jeremie Courreges-Anglas <[email protected]> writes: > > > > > ++#elif defined(HAVE_BSD_SYSCTL) && (defined(HW_MEMSIZE) || > > defined(HW_PHYSMEM64)) > > + int64_t physical_memory; > HW_MEMSIZE and HW_PHYSMEM64 return uint64_t, not int64_t. > > > > > ++#elif defined(HAVE_BSD_SYSCTL) && defined(HW_PHYSMEM)) > > ++ int physical_memory; > HW_PHYSMEM returns u_long (unsigned long) on DragonFly and FreeBSD. > int or signed long may upset -fsanitize=integer on 32-bit archs. > > Note, the code can be simplified via sysconf(3). > > --- builtin/gc.c 2019-11-04 05:07:07 UTC > +++ builtin/gc.c > @@ -243,20 +243,27 @@ static uint64_t total_ram(void) > > if (!sysinfo(&si)) > return si.totalram; > -#elif defined(HAVE_BSD_SYSCTL) && (defined(HW_MEMSIZE) || > defined(HW_PHYSMEM)) > - int64_t physical_memory; > - int mib[2]; > - size_t length; > - > - mib[0] = CTL_HW; > +#elif defined(HAVE_BSD_SYSCTL) && (defined(HW_MEMSIZE) || > defined(HW_PHYSMEM64) || defined(HW_PHYSMEM)) > +# if defined(HW_MEMSIZE) || defined(HW_PHYSMEM64) > + uint64_t physical_memory; > +# else > + u_long physical_memory; > +# endif > + int mib[2] = { > + CTL_HW, > # if defined(HW_MEMSIZE) > - mib[1] = HW_MEMSIZE; > + HW_MEMSIZE, > +# elif defined(HW_PHYSMEM64) > + HW_PHYSMEM64, > # else > - mib[1] = HW_PHYSMEM; > + HW_PHYSMEM, > # endif > - length = sizeof(int64_t); > + }; > + size_t length = sizeof(mib);
size_t length = sizeof(physical_memory); > if (!sysctl(mib, 2, &physical_memory, &length, NULL, 0)) > return physical_memory; > +#elif defined(_SC_PHYS_PAGES) && defined(_SC_PAGESIZE) > + return (uint64_t)sysconf(_SC_PHYS_PAGES) * sysconf(_SC_PAGESIZE); > #elif defined(GIT_WINDOWS_NATIVE) > MEMORYSTATUSEX memInfo; > >
