18ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/*
28ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * $Id: lock.c,v 1.1 2004/11/14 07:26:26 paulus Exp $
38ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *
48ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Copyright (C) 1997 Lars Fenneberg
58ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *
68ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * See the file COPYRIGHT for the respective terms and conditions.
78ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * If the file is missing contact me at lf@elemental.net
88ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * and I'll send you a copy.
98ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *
108ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */
118ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project
128ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#include "includes.h"
138ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#include <unistd.h>
148ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#include <fcntl.h>
158ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project
168ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectint do_lock_exclusive(int fd)
178ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project{
188ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project	struct flock fl;
198ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project	int res;
208ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project
218ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project	memset((void *)&fl, 0, sizeof(fl));
228ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project
238ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project	fl.l_type = F_WRLCK;
248ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project	fl.l_whence = fl.l_start = 0;
258ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project	fl.l_len = 0; /* 0 means "to end of file" */
268ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project
278ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project	res = fcntl(fd, F_SETLK, &fl);
288ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project
298ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project	if ((res == -1) && (errno == EAGAIN))
308ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project		errno = EWOULDBLOCK;
318ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project
328ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project	return res;
338ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project}
348ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project
358ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectint do_unlock(int fd)
368ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project{
378ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project	struct flock fl;
388ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project
398ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project	memset((void *)&fl, 0, sizeof(fl));
408ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project
418ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project	fl.l_type = F_UNLCK;
428ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project	fl.l_whence = fl.l_start = 0;
438ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project	fl.l_len = 0; /* 0 means "to end of file" */
448ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project
458ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project	return fcntl(fd, F_SETLK, &fl);
468ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project}
47