#!/bin/sh
# filelock - Un mcanisme souple de verrouillage de fichiers.

retries="10"         # nombre de tentatives par dfaut
action="lock"        # action par dfaut
nullcmd="/bin/true"  # commande sans effet pour le verrou

while getopts "lur:" opt; do
  case $opt in
    l ) action="lock"    ;;
    u ) action="unlock"  ;;
    r ) retries="$OPTARG"  ;;
  esac 
done 
shift $(($OPTIND - 1))

if [ $# -eq 0 ] ; then
  cat << EOF >&2 
Syntaxe: $0 [-l|-u] [-r essais] fichier_verrou
o -l demande un verrou (action par dfaut), -u demande de lever un
verrou, -r X spcifie un nombre maximum de tentatives avant chec
(valeur par dfaut: $retries). 
EOF
  exit 1 
fi

# S'assure qu'on dispose des application systme lockf ou lockfile

if [ -z "$(which lockfile | grep -v '^no ')" ] ; then 
  echo "$0: chec: utilitaire 'lockfile' pas trouv dans le PATH." >&2 
  exit 1
fi

if [ "$action" = "lock" ] ; then
  if ! lockfile -1 -r $retries "$1" 2> /dev/null; then
    echo "$0: chec: je n'ai pu crer le verrou  temps" >&2
    exit 1
  fi 
else # action = unlock
  if [ ! -f "$1" ] ; then
    echo "$0: avertissement: le verrou  lever $1 n'existe pas" >&2
    exit 1
  fi 
  rm -f "$1" 
fi

exit 0
