negative mfs size at large memory

  • ڡ: LiveCD/4.5/BTS
  • Ƽ: kaw?
  • ͥ:
  • : λ
  • ƥ꡼: malfunction
  • : 2009-02-26 () 09:03:35
  • С:

å

more than 2^31 bytes are displayed as negative value.
Because ksh can handle integer range of -2^31 ... 2^31-1

On ksh, this is like this;

$ echo $((2147483647))     # 2^31-1
2147483647
$ echo $((2147483647+1))   # 2^31
-2147483648

Here's a concept code to check two strings representing big non-negative integer values.

#!/bin/ksh

function isgreater {
    # check presence of arguments
    #
    [ $# -lt 2 ] && return -- -1

    x=$1
    y=$2

    # Are arguments both form of positive integer?
    #
    case "$x" in
        0|[1-9]*([0-9])) :            ;; # ok, do nothing
                      *) return -- -2 ;; # ng, string is not positive integer 
    esac
    case "$y" in
        0|[1-9]*([0-9])) :            ;; # ok, do nothing
                      *) return -- -2 ;; # ng, string is not positive integer 
    esac

    # Compare it
    #
    if [ ${#x} -gt ${#y} ]; then
        return 0
    elif [ ${#x} -eq ${#y} ]; then
        if [ $x \> $y ]; then # string compare (not documented in ksh(1))
            return 0
        else
            return 1
        fi
    else
        return 1
    fi
}

isgreater $1 $2
case $? in
    0) echo $1 is greater than $2. ;;
    1) echo $1 is NOT greater than $2. ;;
    *) echo argument format error ;;
esac

Note

  • This is needed by very early stage of boot time, so only ksh built-ins can be used.
  • This is ksh-specific code.

  • FIXED: above coding were introduced to /boottmp/rc at FuguIta-4.5-200905101 - 2009-05-10 () 17:14:55
  • ENBUG: -gt must be replaced with > in function isgreater
  • FIXED - 2009-05-19 () 12:00:30

Reload  New Edit Freeze Diff Attach Copy Rename  Top Index Search Recent Backups  Help  RSS
Last-modified: 2009-05-19 (Tue) 12:00:30 (3594d)