1 /* 2 Unix SMB/CIFS implementation. 3 4 some replacement functions for parts of roken that don't fit easily into 5 our build system 6 7 Copyright (C) Andrew Tridgell 2005 8 9 This program is free software; you can redistribute it and/or modify 10 it under the terms of the GNU General Public License as published by 11 the Free Software Foundation; either version 2 of the License, or 12 (at your option) any later version. 13 14 This program is distributed in the hope that it will be useful, 15 but WITHOUT ANY WARRANTY; without even the implied warranty of 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 GNU General Public License for more details. 18 19 You should have received a copy of the GNU General Public License 20 along with this program; if not, write to the Free Software 21 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 22 */ 23 24 #include "config.h" 25 #include <stdio.h> 26 #include <unistd.h> 27 #include <fcntl.h> 28 #include "err.h" 29 #include "roken.h" 30 31 #ifndef HAVE_ERR err(int eval,const char * format,...)32 void err(int eval, const char *format, ...) 33 { 34 va_list ap; 35 va_start(ap, format); 36 vfprintf(stderr, format, ap); 37 perror(""); 38 va_end(ap); 39 exit(eval); 40 } 41 #endif 42 43 #ifndef HAVE_ERRX errx(int eval,const char * format,...)44 void errx(int eval, const char *format, ...) 45 { 46 va_list ap; 47 va_start(ap, format); 48 vfprintf(stderr, format, ap); 49 va_end(ap); 50 exit(eval); 51 } 52 #endif 53 54 #ifndef HAVE_WARNX warnx(const char * format,...)55 void warnx(const char *format, ...) 56 { 57 va_list ap; 58 va_start(ap, format); 59 vfprintf(stderr, format, ap); 60 va_end(ap); 61 } 62 #endif 63 64 #ifndef HAVE_FLOCK flock(int fd,int op)65 int flock(int fd, int op) 66 { 67 struct flock lock; 68 lock.l_whence = 0; 69 lock.l_start = 0; 70 lock.l_len = 0; 71 lock.l_pid = 0; 72 73 switch (op & (LOCK_UN|LOCK_SH|LOCK_EX)) { 74 case LOCK_UN: 75 lock.l_type = F_UNLCK; 76 return fcntl(fd, F_SETLK, &lock); 77 case LOCK_SH: 78 lock.l_type = F_RDLCK; 79 return fcntl(fd, (op&LOCK_NB)?F_SETLK:F_SETLKW, &lock); 80 case LOCK_EX: 81 lock.l_type = F_WRLCK; 82 return fcntl(fd, (op&LOCK_NB)?F_SETLK:F_SETLKW, &lock); 83 } 84 errno = EINVAL; 85 return -1; 86 } 87 #endif 88