Ruby 2.5.0 (#2143)
[termux-packages] / disabled-packages / cups / lockf.cpp.patch
1 --- /dev/null 2016-12-11 08:33:21.825618476 +0530
2 +++ ./cups/lockf.cpp 2016-12-11 09:44:20.050966252 +0530
3 @@ -0,0 +1,89 @@
4 +/*
5 + * Copyright (C) 2016 The Android Open Source Project
6 + * All rights reserved.
7 + *
8 + * Redistribution and use in source and binary forms, with or without
9 + * modification, are permitted provided that the following conditions
10 + * are met:
11 + * * Redistributions of source code must retain the above copyright
12 + * notice, this list of conditions and the following disclaimer.
13 + * * Redistributions in binary form must reproduce the above copyright
14 + * notice, this list of conditions and the following disclaimer in
15 + * the documentation and/or other materials provided with the
16 + * distribution.
17 + *
18 + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
21 + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
22 + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
23 + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
24 + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
25 + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
26 + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27 + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
28 + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29 + * SUCH DAMAGE.
30 + */
31 +#include <unistd.h>
32 +#include <errno.h>
33 +#include <fcntl.h>
34 +#include <string.h>
35 +
36 +#ifndef _BITS_LOCKF_H_
37 +#define _BITS_LOCKF_H_
38 +
39 +#include <sys/cdefs.h>
40 +
41 +#define F_ULOCK 0
42 +#define F_LOCK 1
43 +#define F_TLOCK 2
44 +#define F_TEST 3
45 +
46 +__BEGIN_DECLS
47 +
48 +#if defined(__USE_FILE_OFFSET64)
49 +int lockf(int, int, off_t) __RENAME(lockf64);
50 +#else
51 +int lockf(int, int, off_t);
52 +#endif
53 +int lockf64(int, int, off64_t);
54 +
55 +__END_DECLS
56 +
57 +#endif
58 +
59 +
60 +int lockf64(int fd, int cmd, off64_t length) {
61 + // Translate POSIX lockf into fcntl.
62 + struct flock fl;
63 + memset(&fl, 0, sizeof(fl));
64 + fl.l_whence = SEEK_CUR;
65 + fl.l_start = 0;
66 + fl.l_len = length;
67 + if (cmd == F_ULOCK) {
68 + fl.l_type = F_UNLCK;
69 + cmd = F_SETLK64;
70 + return fcntl(fd, F_SETLK64, &fl);
71 + }
72 + if (cmd == F_LOCK) {
73 + fl.l_type = F_WRLCK;
74 + return fcntl(fd, F_SETLKW64, &fl);
75 + }
76 + if (cmd == F_TLOCK) {
77 + fl.l_type = F_WRLCK;
78 + return fcntl(fd, F_SETLK64, &fl);
79 + }
80 + if (cmd == F_TEST) {
81 + fl.l_type = F_RDLCK;
82 + if (fcntl(fd, F_GETLK64, &fl) == -1) return -1;
83 + if (fl.l_type == F_UNLCK || fl.l_pid == getpid()) return 0;
84 + errno = EACCES;
85 + return -1;
86 + }
87 + errno = EINVAL;
88 + return -1;
89 +}
90 +int lockf(int fd, int cmd, off_t length) {
91 + return lockf64(fd, cmd, length);
92 +}