static void AppendPrefixToMap(PrefixStringMap& prefixes, nsDependentCSubstring& prefix) { if (!prefix.Length()) { return; } nsCString* prefixString = prefixes.LookupOrAdd(prefix.Length()); prefixString->Append(prefix.BeginReading(), prefix.Length()); }
void VolumeManager::OnLineRead(int aFd, nsDependentCSubstring& aMessage) { MOZ_ASSERT(aFd == mSocket.get()); char* endPtr; int responseCode = strtol(aMessage.Data(), &endPtr, 10); if (*endPtr == ' ') { endPtr++; } // Now fish out the rest of the line after the response code nsDependentCString responseLine(endPtr, aMessage.Length() - (endPtr - aMessage.Data())); DBG("Rcvd: %d '%s'", responseCode, responseLine.Data()); if (responseCode >= ::ResponseCode::UnsolicitedInformational) { // These are unsolicited broadcasts. We intercept these and process // them ourselves HandleBroadcast(responseCode, responseLine); } else { // Everything else is considered to be part of the command response. if (mCommands.size() > 0) { VolumeCommand* cmd = mCommands.front(); cmd->HandleResponse(responseCode, responseLine); if (responseCode >= ::ResponseCode::CommandOkay) { // That's a terminating response. We can remove the command. mCommands.pop(); mCommandPending = false; // Start the next command, if there is one. WriteCommandData(); } } else { ERR("Response with no command"); } } }
void NetdClient::OnLineRead(int aFd, nsDependentCSubstring& aMessage) { // Set errno to 0 first. For preventing to use the stale version of errno. errno = 0; // We found a line terminator. Each line is formatted as an // integer response code followed by the rest of the line. // Fish out the response code. int responseCode = strtol(aMessage.Data(), nullptr, 10); if (!errno) { NetdCommand* response = new NetdCommand(); // Passing all the response message, including the line terminator. response->mSize = aMessage.Length(); memcpy(response->mData, aMessage.Data(), aMessage.Length()); gNetdConsumer->MessageReceived(response); } if (!responseCode) { LOG("Can't parse netd's response"); } }