On 2014-02-24, Fabian Raetz <fabian.ra...@gmail.com> wrote: > Hi misc@, > > while calculating my phys. memory (mb) with the > folllowing shellsript i get as a result -424. > > sysctl -n hw.physmem returns 3849830400 > > ------------ > #!/bin/sh > > phys_mem_bytes=`sysctl -n hw.physmem` > phys_mem_mb=`expr $phys_mem_bytes / 1024 / 1024` > echo $phys_mem_mb > ---------- > > so i tried > expr 2147483647 / 2 which returns 1073741824 while > expr 2147483648 / 2 returns -1073741824 > > > ksh(1) states that expr does Integer arithmetic. > So is this the expected behaviour or a bug?
I don't see this discussed in ksh(1) - it's expr(1), /bin/expr on OpenBSD. This uses 32-bit signed integer types, which are limited to 2^31-1, above which it wraps around. It may be possible to change this after we're done with release, but for now here's a quick workaround: phys_mem_mb=`perl -e "print int($phys_mem_bytes / 1024 / 1024);"`