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