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