/*
 * Simple test of fcntl
 */

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
  int fd = open(argv[0], O_RDONLY);
  struct flock l;
  long flags;

  (void)argc;

  if ( fd < 0 ) {
    perror("open");
    exit(1);
  }

  /* Get the flags on this FD */

  if ( (flags = fcntl(fd, F_GETFL)) == -1 ) {
    perror("F_GETFL");
    exit(1);
  }

  if ( flags != (O_RDONLY|O_LARGEFILE) )
    fprintf(stderr, "flags = %#lx\n", flags);

  /* Set a lock on this FD */
  memset(&l, 0, sizeof l);
  l.l_type   = F_RDLCK;
  l.l_whence = SEEK_SET;
  l.l_start  = 123;
  l.l_len    = 456;

  if ( fcntl(fd, F_SETLK, &l) == -1 ) {
    perror("F_SETLK");
    exit(1);
  }

  /* Eventually, fork and try to conflict with this lock... */

  return 0;
}
