1ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo/* Copyright (c) 2011-2012, The Linux Foundation. All rights reserved.
2ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo *
3ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo * Redistribution and use in source and binary forms, with or without
4ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo * modification, are permitted provided that the following conditions are
5ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo * met:
6ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo *     * Redistributions of source code must retain the above copyright
7ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo *       notice, this list of conditions and the following disclaimer.
8ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo *     * Redistributions in binary form must reproduce the above
9ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo *       copyright notice, this list of conditions and the following
10ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo *       disclaimer in the documentation and/or other materials provided
11ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo *       with the distribution.
12ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo *     * Neither the name of The Linux Foundation, nor the names of its
13ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo *       contributors may be used to endorse or promote products derived
14ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo *       from this software without specific prior written permission.
15ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo *
16ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
17ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
19ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
20ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo *
28ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo */
29ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo#include <string.h>
30ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo#include <unistd.h>
31ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo#include <errno.h>
32ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
33ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo// #include <linux/stat.h>
34ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo#include <fcntl.h>
35ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo// #include <linux/types.h>
36ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo#include <sys/types.h>
37ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo#include <sys/stat.h>
38ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
39ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo#include "loc_eng_dmn_conn_glue_pipe.h"
40ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo#include "log_util.h"
41ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo#include "platform_lib_includes.h"
42ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo/*===========================================================================
43ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoFUNCTION    loc_eng_dmn_conn_glue_pipeget
44ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
45ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoDESCRIPTION
46ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo   create a named pipe.
47ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
48ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo   pipe_name - pipe name path
49ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo   mode - mode
50ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
51ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoDEPENDENCIES
52ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo   None
53ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
54ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoRETURN VALUE
55ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo   0: success or negative value for failure
56ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
57ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoSIDE EFFECTS
58ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo   N/A
59ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
60ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo===========================================================================*/
61ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russoint loc_eng_dmn_conn_glue_pipeget(const char * pipe_name, int mode)
62ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo{
63ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    int fd;
64ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    int result;
65ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
66ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    LOC_LOGD("%s, mode = %d\n", pipe_name, mode);
67ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    result = mkfifo(pipe_name, 0660);
68ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
69ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    if ((result == -1) && (errno != EEXIST)) {
70ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo        LOC_LOGE("failed: %s\n", strerror(errno));
71ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo        return result;
72ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    }
73ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
74ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    // The mode in mkfifo is not honoured and does not provide the
75ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    // group permissions. Doing chmod to add group permissions.
76ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    result = chmod (pipe_name, 0660);
77ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    if (result != 0){
78ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo        LOC_LOGE ("%s failed to change mode for %s, error = %s\n", __func__,
79ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo              pipe_name, strerror(errno));
80ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    }
81ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
82ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    fd = open(pipe_name, mode);
83ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    if (fd <= 0)
84ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    {
85ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo        LOC_LOGE("failed: %s\n", strerror(errno));
86ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    }
87ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    LOC_LOGD("fd = %d, %s\n", fd, pipe_name);
88ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    return fd;
89ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo}
90ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
91ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo/*===========================================================================
92ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoFUNCTION    loc_eng_dmn_conn_glue_piperemove
93ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
94ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoDESCRIPTION
95ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo   remove a pipe
96ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
97ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    pipe_name - pipe name path
98ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    fd - fd for the pipe
99ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
100ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoDEPENDENCIES
101ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo   None
102ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
103ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoRETURN VALUE
104ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo   0: success
105ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
106ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoSIDE EFFECTS
107ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo   N/A
108ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
109ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo===========================================================================*/
110ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russoint loc_eng_dmn_conn_glue_piperemove(const char * pipe_name, int fd)
111ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo{
112ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    close(fd);
113ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    if (pipe_name) unlink(pipe_name);
114ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    LOC_LOGD("fd = %d, %s\n", fd, pipe_name);
115ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    return 0;
116ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo}
117ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
118ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo/*===========================================================================
119ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoFUNCTION    loc_eng_dmn_conn_glue_pipewrite
120ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
121ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoDESCRIPTION
122ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo   write to a pipe
123ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
124ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo   fd - fd of a pipe
125ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo   buf - buffer for the data to write
126ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo   sz - size of the data in buffer
127ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
128ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoDEPENDENCIES
129ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo   None
130ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
131ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoRETURN VALUE
132ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo   number of bytes written or negative value for failure
133ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
134ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoSIDE EFFECTS
135ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo   N/A
136ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
137ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo===========================================================================*/
138ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russoint loc_eng_dmn_conn_glue_pipewrite(int fd, const void * buf, size_t sz)
139ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo{
140ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    int result;
141ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
142ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    result = write(fd, buf, sz);
143ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
144ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    /* @todo check for non EINTR & EAGAIN, shall not do select again, select_tut Law 7) */
145ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
146ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    /* LOC_LOGD("fd = %d, buf = 0x%lx, size = %d, result = %d\n", fd, (long) buf, (int) sz, (int) result); */
147ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    return result;
148ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo}
149ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
150ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo/*===========================================================================
151ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoFUNCTION    loc_eng_dmn_conn_glue_piperead
152ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
153ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoDESCRIPTION
154ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo   read from a pipe
155ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
156ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo   fd - fd for the pipe
157ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo   buf - buffer to hold the data read from pipe
158ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo   sz - size of the buffer
159ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
160ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoDEPENDENCIES
161ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo   None
162ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
163ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoRETURN VALUE
164ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo   number of bytes read from pipe or negative value for failure
165ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
166ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoSIDE EFFECTS
167ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo   N/A
168ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
169ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo===========================================================================*/
170ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russoint loc_eng_dmn_conn_glue_piperead(int fd, void * buf, size_t sz)
171ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo{
172ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    int len;
173ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
174ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    len = read(fd, buf, sz);
175ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
176ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    /* @todo check for non EINTR & EAGAIN, shall not do select again, select_tut Law 7) */
177ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
178ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    /* LOC_LOGD("fd = %d, buf = 0x%lx, size = %d, len = %d\n", fd, (long) buf, (int) sz, len); */
179ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    return len;
180ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo}
181ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
182ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo/*===========================================================================
183ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoFUNCTION    loc_eng_dmn_conn_glue_pipeunblock
184ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
185ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoDESCRIPTION
186ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo   unblock a pipe
187ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
188ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo   fd - fd for the pipe
189ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
190ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoDEPENDENCIES
191ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo   None
192ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
193ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoRETURN VALUE
194ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo   0 for success or negative value for failure
195ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
196ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoSIDE EFFECTS
197ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo   N/A
198ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
199ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo===========================================================================*/
200ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russoint loc_eng_dmn_conn_glue_pipeunblock(int fd)
201ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo{
202ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    int result;
203ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    struct flock flock_v;
204ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    LOC_LOGD("\n");
205ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo//    result = fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) | O_NDELAY);
206ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    flock_v.l_type = F_UNLCK;
207ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    flock_v.l_len = 32;
208ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    result = fcntl(fd, F_SETLK, &flock_v);
209ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    if (result < 0) {
210ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo        LOC_LOGE("fcntl failure, %s\n", strerror(errno));
211ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    }
212ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo
213ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo    return result;
214ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo}
215