Loading ndb/include/mgmapi/mgmapi.h +13 −0 Original line number Diff line number Diff line Loading @@ -1091,6 +1091,19 @@ extern "C" { */ int ndb_mgm_end_session(NdbMgmHandle handle); /** * ndb_mgm_get_fd * * get the file descriptor of the handle. * INTERNAL ONLY. * USE FOR TESTING. OTHER USES ARE NOT A GOOD IDEA. * * @param handle NDB management handle * @return handle->socket * */ int ndb_mgm_get_fd(NdbMgmHandle handle); /** * Get the node id of the mgm server we're connected to */ Loading ndb/include/util/InputStream.hpp +1 −0 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ extern FileInputStream Stdin; class SocketInputStream : public InputStream { NDB_SOCKET_TYPE m_socket; unsigned m_timeout; bool m_startover; public: SocketInputStream(NDB_SOCKET_TYPE socket, unsigned readTimeout = 1000); char* gets(char * buf, int bufLen); Loading ndb/src/common/util/InputStream.cpp +24 −15 Original line number Diff line number Diff line Loading @@ -37,25 +37,34 @@ FileInputStream::gets(char * buf, int bufLen){ SocketInputStream::SocketInputStream(NDB_SOCKET_TYPE socket, unsigned readTimeout) : m_socket(socket) { m_startover= true; m_timeout = readTimeout; } char* SocketInputStream::gets(char * buf, int bufLen) { buf[0] = 77; assert(bufLen >= 2); int res = readln_socket(m_socket, m_timeout, buf, bufLen - 1); if(res == -1) return 0; if(res == 0 && buf[0] == 77){ // select return 0 int offset= 0; if(m_startover) { buf[0]= '\0'; m_startover= false; } else offset= strlen(buf); int res = readln_socket(m_socket, m_timeout, buf+offset, bufLen-offset); if(res == 0) { buf[0]=0; } else if(res == 0 && buf[0] == 0){ // only newline buf[0] = '\n'; buf[1] = 0; } else { int len = strlen(buf); buf[len + 1] = '\0'; buf[len] = '\n'; return buf; } m_startover= true; if(res == -1) return 0; return buf; } ndb/src/common/util/Parser.cpp +20 −15 Original line number Diff line number Diff line Loading @@ -158,8 +158,13 @@ ParserImpl::run(Context * ctx, const class Properties ** pDst, DBUG_RETURN(false); } if(ctx->m_currentToken[0] == 0){ int last= strlen(ctx->m_currentToken); if(last>0) last--; if(ctx->m_currentToken[last] !='\n'){ ctx->m_status = Parser<Dummy>::NoLine; ctx->m_tokenBuffer[0]= '\0'; DBUG_RETURN(false); } Loading ndb/src/common/util/socket_io.cpp +14 −14 Original line number Diff line number Diff line Loading @@ -75,7 +75,6 @@ readln_socket(NDB_SOCKET_TYPE socket, int timeout_millis, return -1; } buf[0] = 0; const int t = recv(socket, buf, buflen, MSG_PEEK); if(t < 1) Loading @@ -87,27 +86,28 @@ readln_socket(NDB_SOCKET_TYPE socket, int timeout_millis, for(int i=0; i< t;i++) { if(buf[i] == '\n'){ recv(socket, buf, i+1, 0); buf[i] = 0; int r= recv(socket, buf, i+1, 0); buf[i+1]= 0; if(r < 1) { fcntl(socket, F_SETFL, sock_flags); return -1; } if(i > 0 && buf[i-1] == '\r'){ i--; buf[i] = 0; buf[i-1] = '\n'; buf[i]= '\0'; } fcntl(socket, F_SETFL, sock_flags); return t; return r; } } if(t == (buflen - 1)){ recv(socket, buf, t, 0); buf[t] = 0; int r= recv(socket, buf, t, 0); if(r>=0) buf[r] = 0; fcntl(socket, F_SETFL, sock_flags); return buflen; } return 0; return r; } extern "C" Loading Loading
ndb/include/mgmapi/mgmapi.h +13 −0 Original line number Diff line number Diff line Loading @@ -1091,6 +1091,19 @@ extern "C" { */ int ndb_mgm_end_session(NdbMgmHandle handle); /** * ndb_mgm_get_fd * * get the file descriptor of the handle. * INTERNAL ONLY. * USE FOR TESTING. OTHER USES ARE NOT A GOOD IDEA. * * @param handle NDB management handle * @return handle->socket * */ int ndb_mgm_get_fd(NdbMgmHandle handle); /** * Get the node id of the mgm server we're connected to */ Loading
ndb/include/util/InputStream.hpp +1 −0 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ extern FileInputStream Stdin; class SocketInputStream : public InputStream { NDB_SOCKET_TYPE m_socket; unsigned m_timeout; bool m_startover; public: SocketInputStream(NDB_SOCKET_TYPE socket, unsigned readTimeout = 1000); char* gets(char * buf, int bufLen); Loading
ndb/src/common/util/InputStream.cpp +24 −15 Original line number Diff line number Diff line Loading @@ -37,25 +37,34 @@ FileInputStream::gets(char * buf, int bufLen){ SocketInputStream::SocketInputStream(NDB_SOCKET_TYPE socket, unsigned readTimeout) : m_socket(socket) { m_startover= true; m_timeout = readTimeout; } char* SocketInputStream::gets(char * buf, int bufLen) { buf[0] = 77; assert(bufLen >= 2); int res = readln_socket(m_socket, m_timeout, buf, bufLen - 1); if(res == -1) return 0; if(res == 0 && buf[0] == 77){ // select return 0 int offset= 0; if(m_startover) { buf[0]= '\0'; m_startover= false; } else offset= strlen(buf); int res = readln_socket(m_socket, m_timeout, buf+offset, bufLen-offset); if(res == 0) { buf[0]=0; } else if(res == 0 && buf[0] == 0){ // only newline buf[0] = '\n'; buf[1] = 0; } else { int len = strlen(buf); buf[len + 1] = '\0'; buf[len] = '\n'; return buf; } m_startover= true; if(res == -1) return 0; return buf; }
ndb/src/common/util/Parser.cpp +20 −15 Original line number Diff line number Diff line Loading @@ -158,8 +158,13 @@ ParserImpl::run(Context * ctx, const class Properties ** pDst, DBUG_RETURN(false); } if(ctx->m_currentToken[0] == 0){ int last= strlen(ctx->m_currentToken); if(last>0) last--; if(ctx->m_currentToken[last] !='\n'){ ctx->m_status = Parser<Dummy>::NoLine; ctx->m_tokenBuffer[0]= '\0'; DBUG_RETURN(false); } Loading
ndb/src/common/util/socket_io.cpp +14 −14 Original line number Diff line number Diff line Loading @@ -75,7 +75,6 @@ readln_socket(NDB_SOCKET_TYPE socket, int timeout_millis, return -1; } buf[0] = 0; const int t = recv(socket, buf, buflen, MSG_PEEK); if(t < 1) Loading @@ -87,27 +86,28 @@ readln_socket(NDB_SOCKET_TYPE socket, int timeout_millis, for(int i=0; i< t;i++) { if(buf[i] == '\n'){ recv(socket, buf, i+1, 0); buf[i] = 0; int r= recv(socket, buf, i+1, 0); buf[i+1]= 0; if(r < 1) { fcntl(socket, F_SETFL, sock_flags); return -1; } if(i > 0 && buf[i-1] == '\r'){ i--; buf[i] = 0; buf[i-1] = '\n'; buf[i]= '\0'; } fcntl(socket, F_SETFL, sock_flags); return t; return r; } } if(t == (buflen - 1)){ recv(socket, buf, t, 0); buf[t] = 0; int r= recv(socket, buf, t, 0); if(r>=0) buf[r] = 0; fcntl(socket, F_SETFL, sock_flags); return buflen; } return 0; return r; } extern "C" Loading