Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!samsung!uunet!comp.vuw.ac.nz!mark From: mark@comp.vuw.ac.nz (Mark Davies) Newsgroups: comp.unix.programmer Subject: Re: need #defines to make flock use lockf Message-ID: <1990Oct03.023438.4393@comp.vuw.ac.nz> Date: 3 Oct 90 02:34:38 GMT References: <1990Oct2.213652.20025@ux1.cso.uiuc.edu> Sender: news@comp.vuw.ac.nz (News Admin) Organization: Dept. of Comp. Sci., Victoria Uni. of Wellington, New Zealand. Lines: 136 Nntp-Posting-Host: the-taj.comp.vuw.ac.nz In article <1990Oct2.213652.20025@ux1.cso.uiuc.edu> paul@uxc.cso.uiuc.edu (Paul Pomes - UofIllinois CSO) writes: >I have a program that makes use of flock() scattered around several files. >Rather than cluttering the code with #ifdefs for both flock() and lockf(), >I'd like to redefine the flock calls in a common include file to use lockf >instead when #ifndef BSD is true. Has anyone already created such a beast? This is the flock() emulation we use for sendmail and a few other programs on our hpux boxes and I think its now also been run on a SysV box. cheers mark #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh 'flock.c' <<'END_OF_FILE' X/* X * Copyright (c) 1989 Mark Davies X * Copyright (c) 1990 Andy Linton X * Copyright (c) 1990 Victoria University of Wellington. X * All rights reserved. X * X * Redistribution and use in source and binary forms are permitted provided X * that: (1) source distributions retain this entire copyright notice and X * comment, and (2) distributions including binaries display the following X * acknowledgement: ``This product includes software developed by the X * Victoria University of Wellington, New Zealand and its contributors'' X * in the documentation or other materials provided with the distribution X * and in all advertising materials mentioning features or use of this X * software. X * Neither the name of the University nor the names of its contributors may X * be used to endorse or promote products derived from this software without X * specific prior written permission. X * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED X * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF X * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. X */ X X#include X#include X#include X#include X#include "flock.h" /* defines normally in */ X X X#if defined(F_SETLK) && defined(F_SETLKW) X Xflock(fd, operation) Xint fd, operation; X{ X int op, ret; X struct flock arg; X extern int errno; X X op = (LOCK_NB & operation) ? F_SETLK : F_SETLKW; X X arg.l_type = (LOCK_EX & operation) ? F_WRLCK : X (LOCK_SH & operation) ? F_RDLCK : F_UNLCK; X arg.l_whence = 0; X arg.l_start = 0; X arg.l_len = 0; X arg.l_pid = 0; X X if ((ret = fcntl(fd, op, &arg)) == -1) { X if (errno == EACCES || errno == EAGAIN) X errno = EWOULDBLOCK; X } X return (ret); X} X X#else X Xflock(fd, operation) Xint fd, operation; X{ X int op, ret; X extern int errno; X X op = (LOCK_UN & operation) ? F_ULOCK : X (LOCK_NB & operation) ? F_TLOCK : F_LOCK; X X if ((ret = lockf(fd, op, 0)) == -1) { X if (errno == EACCES || errno == EAGAIN) X errno = EWOULDBLOCK; X } X X return (ret); X} X X#endif /* F_SETLK && F_SETLKW */ X END_OF_FILE if test 2049 -ne `wc -c <'flock.c'`; then echo shar: \"'flock.c'\" unpacked with wrong size! fi # end of 'flock.c' fi if test -f 'flock.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'flock.h'\" else echo shar: Extracting \"'flock.h'\" \(413 characters\) sed "s/^X//" >'flock.h' <<'END_OF_FILE' X/* These definitions are in on BSD 4.3 */ X X#if defined(F_SETLK) && defined(F_SETLKW) X# define FCNTL_FLOCK X#else X# define LOCKF_FLOCK X#endif /* F_SETLK && F_SETLKW */ X/* X * Flock call. X */ X#define LOCK_SH 1 /* shared lock */ X#define LOCK_EX 2 /* exclusive lock */ X#define LOCK_NB 4 /* don't block when locking */ X#define LOCK_UN 8 /* unlock */ END_OF_FILE if test 413 -ne `wc -c <'flock.h'`; then echo shar: \"'flock.h'\" unpacked with wrong size! fi chmod +x 'flock.h' # end of 'flock.h' fi echo shar: End of shell archive. exit 0