File:  [DVB] / dietlibc / lib / lockf.c
Revision 1.3: download - view: text, annotated - select for diffs
Thu May 31 17:03:41 2001 UTC (23 years ago) by fefe
Branches: MAIN
CVS tags: finnland_test_200301, branch_rc14_fieldtest_finnland, branch_rc13_fieldtest_finnland, branch_rc12_fieldtest_finnland, branch_rc10_fieldtest_finnland, RELEASE_finnland_200301_1, RC12_FIELDTEST_FINNLAND, RC10_FIELDTEST_FINNLAND, HEAD
lots of errno cleanups,
lots of errno related thread-safeness cleanups in librpc (don't ask).

#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include "dietfeatures.h"

int lockf(int fd, int cmd, off_t len) {
  struct flock fl;
  fl.l_whence=SEEK_CUR;
  fl.l_start=0;
  fl.l_len=len;
  fl.l_pid=0;
  switch (cmd) {
  case F_TEST:
    if (fcntl(fd,F_GETLK,&fl)<0)
      return -1;
    if (fl.l_type == F_UNLCK || fl.l_pid == getpid ())
      return 0;
    errno=EACCES;
    return -1;
  case F_ULOCK:
    fl.l_type=F_UNLCK;
    cmd=F_SETLK;
    break;
  case F_LOCK:
    fl.l_type = F_WRLCK;
    cmd = F_SETLKW;
    break;
  case F_TLOCK:
    fl.l_type = F_WRLCK;
    cmd = F_SETLK;
    break;
  default:
    errno=EINVAL;
    return -1;
  }
  return fcntl(fd,cmd,&fl);
}

LinuxTV legacy CVS <linuxtv.org/cvs>