#/**
#         ogr CheckFs int_ndisk int_npartition
#@brief   Comprueba el estado de un sistema de archivos.
#@param   int_ndisk      nº de orden del disco o volumen
#@param   int_npartition nº de orden de la partición
#@return  (nada)
#@exception OG_ERR_FORMAT   Formato incorrecto.
#@exception OG_ERR_NOTFOUND El sistema de archivos no corresponden con un dispositivo.
#@exception OG_ERR_FILESYS  Sistema de archivos desconocido o no accesible.
#@note    Requisitos: *fsck*
#@warning No se comprueban sistemas de archivos montados o bloqueados.
#@todo    Definir salidas.
#@version 0.9 - Primera adaptación para OpenGNSys.
#@author  Ramon Gomez, ETSII Universidad de Sevilla
#@date    2009-10-07
#*/ ##
# Variables locales.
local DEV TYPE PROG PARAMS

# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
    ogr Help "$FUNCNAME" "$FUNCNAME int_ndisk int_nfilesys" \
           "$FUNCNAME 1 1"
    return
fi
# Error si no se reciben 2 parámetros.
[ $# == 2 ] || ogr RaiseError $OG_ERR_FORMAT || return $?

# Obtener tipo de sistema de archivos.
DEV="$(ogr DiskToDev $1 $2)" || return $?
TYPE=$(ogr GetFsType $1 $2)
case "$TYPE" in
    EXT[234])  PROG="e2fsck" ;;
    REISERFS)  PROG="reiserfsck"; PARAMS="<<<\"Yes\"" ;;
    JFS)       PROG="fsck.jfs" ;;
    XFS)       PROG="fsck.xfs" ;;
    NTFS)      PROG="ntfsfix" ;;
    FAT32|FAT16|FAT12)
               PROG="dosfsck"; PARAMS="-a" ;;
    *)         ogr RaiseError $OG_ERR_FILESYS "$1, $2, $TYPE"
               return $? ;;
esac
# Error si el sistema de archivos esta montado o bloqueado.
if ogr IsMounted $1 $2; then
    ogr RaiseError $OG_ERR_FILESYS "$1 $2"       # Indicar nuevo error
    return $?
fi
if ogr IsLocked $1 $2; then
    ogr RaiseError $OG_ERR_LOCKED "$1 $2"
    return $?
fi
# Comprobar en modo uso exclusivo.
ogr Lock $1 $2
eval $PROG $PARAMS $DEV
ERRCODE=$?
case $ERRCODE in
    0)    ;;
    127)  ogr RaiseError $OG_ERR_NOTEXEC "$PROG" ;;
    *)    ogr RaiseError $OG_ERR_FILESYS "$1 $2" ;;
esac
ogr Unlock $1 $2
return $ERRCODE
