1ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo/* Copyright (c) 2011, 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 <linux/stat.h> 30ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo#include <fcntl.h> 31ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 32ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo#include <linux/types.h> 33ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 34ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo#include "log_util.h" 35ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo#include "platform_lib_includes.h" 36ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo#include "loc_eng_dmn_conn_glue_msg.h" 37ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo#include "loc_eng_dmn_conn_handler.h" 38ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 39ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo/*=========================================================================== 40ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoFUNCTION loc_eng_dmn_conn_glue_msgget 41ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 42ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoDESCRIPTION 43ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo This function get a message queue 44ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 45ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo q_path - name path of the message queue 46ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo mode - 47ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 48ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoDEPENDENCIES 49ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo None 50ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 51ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoRETURN VALUE 52ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo message queue id 53ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 54ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoSIDE EFFECTS 55ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo N/A 56ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 57ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo===========================================================================*/ 58ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russoint loc_eng_dmn_conn_glue_msgget(const char * q_path, int mode) 59ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo{ 60ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo int msgqid; 61ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo msgqid = loc_eng_dmn_conn_glue_pipeget(q_path, mode); 62ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo return msgqid; 63ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo} 64ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 65ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo/*=========================================================================== 66ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoFUNCTION loc_eng_dmn_conn_glue_msgremove 67ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 68ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoDESCRIPTION 69ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo remove a message queue 70ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 71ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo q_path - name path of the message queue 72ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo msgqid - message queue id 73ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 74ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoDEPENDENCIES 75ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo None 76ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 77ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoRETURN VALUE 78ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 0: success or negative value for failure 79ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 80ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoSIDE EFFECTS 81ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo N/A 82ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 83ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo===========================================================================*/ 84ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russoint loc_eng_dmn_conn_glue_msgremove(const char * q_path, int msgqid) 85ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo{ 86ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo int result; 87ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo result = loc_eng_dmn_conn_glue_piperemove(q_path, msgqid); 88ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo return result; 89ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo} 90ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 91ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo/*=========================================================================== 92ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoFUNCTION loc_eng_dmn_conn_glue_msgsnd 93ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 94ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoDESCRIPTION 95ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo Send a message 96ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 97ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo msgqid - message queue id 98ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo msgp - pointer to the message to be sent 99ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo msgsz - size of the message 100ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 101ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoDEPENDENCIES 102ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo None 103ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 104ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoRETURN VALUE 105ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo number of bytes sent out or negative value for failure 106ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 107ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoSIDE EFFECTS 108ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo N/A 109ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 110ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo===========================================================================*/ 111ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russoint loc_eng_dmn_conn_glue_msgsnd(int msgqid, const void * msgp, size_t msgsz) 112ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo{ 113ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo int result; 114ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo struct ctrl_msgbuf *pmsg = (struct ctrl_msgbuf *) msgp; 115ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo pmsg->msgsz = msgsz; 116ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 117ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo result = loc_eng_dmn_conn_glue_pipewrite(msgqid, msgp, msgsz); 118ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo if (result != (int) msgsz) { 119ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo LOC_LOGE("%s:%d] pipe broken %d, msgsz = %d\n", __func__, __LINE__, result, (int) msgsz); 120ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo return -1; 121ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo } 122ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 123ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo return result; 124ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo} 125ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 126ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo/*=========================================================================== 127ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoFUNCTION loc_eng_dmn_conn_glue_msgrcv 128ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 129ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoDESCRIPTION 130ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo receive a message 131ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 132ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo msgqid - message queue id 133ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo msgp - pointer to the buffer to hold the message 134ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo msgsz - size of the buffer 135ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 136ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoDEPENDENCIES 137ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo None 138ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 139ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoRETURN VALUE 140ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo number of bytes received or negative value for failure 141ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 142ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoSIDE EFFECTS 143ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo N/A 144ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 145ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo===========================================================================*/ 146ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russoint loc_eng_dmn_conn_glue_msgrcv(int msgqid, void *msgp, size_t msgbufsz) 147ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo{ 148ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo int result; 149ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo struct ctrl_msgbuf *pmsg = (struct ctrl_msgbuf *) msgp; 150ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 151ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo result = loc_eng_dmn_conn_glue_piperead(msgqid, &(pmsg->msgsz), sizeof(pmsg->msgsz)); 152ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo if (result != sizeof(pmsg->msgsz)) { 153ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo LOC_LOGE("%s:%d] pipe broken %d\n", __func__, __LINE__, result); 154ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo return -1; 155ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo } 156ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 157ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo if (msgbufsz < pmsg->msgsz) { 158ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo LOC_LOGE("%s:%d] msgbuf is too small %d < %d\n", __func__, __LINE__, (int) msgbufsz, (int) pmsg->msgsz); 159ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo return -1; 160ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo } 161ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 162ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo result = loc_eng_dmn_conn_glue_piperead(msgqid, (uint8_t *) msgp + sizeof(pmsg->msgsz), pmsg->msgsz - sizeof(pmsg->msgsz)); 163ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo if (result != (int) (pmsg->msgsz - sizeof(pmsg->msgsz))) { 164ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo LOC_LOGE("%s:%d] pipe broken %d, msgsz = %d\n", __func__, __LINE__, result, (int) pmsg->msgsz); 165ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo return -1; 166ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo } 167ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 168ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo return pmsg->msgsz; 169ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo} 170ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 171ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo/*=========================================================================== 172ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoFUNCTION loc_eng_dmn_conn_glue_msgunblock 173ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 174ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoDESCRIPTION 175ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo unblock a message queue 176ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 177ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo msgqid - message queue id 178ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 179ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoDEPENDENCIES 180ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo None 181ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 182ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoRETURN VALUE 183ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 0: success 184ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 185ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoSIDE EFFECTS 186ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo N/A 187ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 188ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo===========================================================================*/ 189ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russoint loc_eng_dmn_conn_glue_msgunblock(int msgqid) 190ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo{ 191ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo return loc_eng_dmn_conn_glue_pipeunblock(msgqid); 192ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo} 193ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 194ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo/*=========================================================================== 195ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoFUNCTION loc_eng_dmn_conn_glue_msgflush 196ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 197ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoDESCRIPTION 198ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo flush out the message in a queue 199ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 200ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo msgqid - message queue id 201ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 202ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoDEPENDENCIES 203ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo None 204ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 205ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoRETURN VALUE 206ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo number of bytes that are flushed out. 207ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 208ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante RussoSIDE EFFECTS 209ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo N/A 210ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 211ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo===========================================================================*/ 212ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russoint loc_eng_dmn_conn_glue_msgflush(int msgqid) 213ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo{ 214ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo int length; 215ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo char buf[128]; 216ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 217ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo do { 218ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo length = loc_eng_dmn_conn_glue_piperead(msgqid, buf, 128); 219ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo LOC_LOGD("%s:%d] %s\n", __func__, __LINE__, buf); 220ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo } while(length); 221ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo return length; 222ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo} 223ec6e5d3a2597d37d5b1d98911cb06218cdf19bf1Dante Russo 224