int main() { TString *s1 = string_createCString("This is String #1's Data."); TString *s2 = string_createCString("This is String #2's Data."); TString *foo = string_createCString("foo"); TString *bar = string_createCString("bar"); TString *foobar = string_createCString("foo.bar"); if (string_startsWith(foobar, foo)) { printf("%s starts with %s\n", string_asCString(foobar), string_asCString(foo)); } if (string_startsWith(foobar, bar)) { printf("%s starts with %s\n", string_asCString(foobar), string_asCString(foo)); } return 0; }
char* loadExternalFileToString(const char* filename) { if (isURIPath(filename) != 0) { // local file return loadFileToString(filename); } else if (string_startsWith(filename, "file://") == 0) { char* localPath = uriToLocalPath(filename); char* result = NULL; if (!localPath) { return NULL; } result = loadFileToString(localPath); free(localPath); return result; } else { return curlGetURLInMemory(filename); } }
void* TrampolineMgr::printInfo(uint32_t index, CallStack* stack) { const AddrEntry& e = m_pInstance->m_entries[index]; FunctionInfo* info = 0; std::map<std::string, FunctionInfo>::iterator it; std::ostream* out; ReturnInfo retInfo; ArgumentWalker w(stack); std::string searchable = e.name; out = m_pInstance->getLogger(); if (!g_returnInfo) g_returnInfo = new std::stack<TrampolineMgr::ReturnInfo>; std::string stamp = timeStamp(); (*out) << std::string(20 - stamp.size(), ' '); (*out) << '[' << timeStamp() << "] "; (*out) << std::string(g_returnInfo->size(), ' '); // Special handling for Objective-C if (string_startsWith(e.name, "objc_msgSend")) { if (!objc_helper) { if (!loadObjCHelper()) goto no_objc; } if (string_endsWith(e.name, "ret")) w.nextPointer(); // skip the fpret/stret argument (*out) << objc_helper(e.name, w.nextPointer(), w.nextPointer(), searchable); } else no_objc: (*out) << e.printName; (*out) << '('; // std::cout << "Looking for " << searchable << std::endl; it = m_functionInfo.find(searchable); if (it != m_functionInfo.end()) { bool first = true; for (char c : it->second.arguments) { if (!first) (*out) << ", "; else first = false; (*out) << w.next(c); } (*out) << ") "; } else (*out) << "?) "; (*out) << "ret_ip=" << stack->retAddr << std::endl << std::flush; retInfo.retAddr = stack->retAddr; retInfo.it = it; gettimeofday(&retInfo.callTime, 0); g_returnInfo->push(retInfo); return m_pInstance->m_entries[index].addr; }
static void smtp_conn_readcb(struct bufferevent *bev, void* args) { struct evbuffer* buffer = bufferevent_get_input(bev); struct email* email = (struct email*) args; size_t len; char* line = evbuffer_readln(buffer, &len, EVBUFFER_EOL_CRLF); while (line) { if (email->mode != DATA) { if (string_equals(line, "QUIT")) bufferevent_write(bev, _221_BYE, strlen(_221_BYE)); else if (string_equals(line, "RSET")) bufferevent_write(bev, _502_NOT_SUPPORTED, strlen(_502_NOT_SUPPORTED)); } switch (email->mode) { case HEADERS: if (len >= 4 && !email->ehlo) { /* Could be an EHLO or HELO */ if (string_startsWith(line, "EHLO") || string_startsWith(line, "HELO")) { email->ehlo = 1; bufferevent_write(bev, _250_OK, strlen(_250_OK)); } } else if (email->ehlo) { if (!forEachCharacter(line, isEmailCharacters)) { if (string_startsWith(line, "MAIL FROM:<")) { char* addr = stripOutEmailAddress(line); if (addr) { char* query = create_check_email_from_query(addr); if (query) databaseQuery(query, check_email_from_callback, email); else bufferevent_write(bev, _550_NOT_ALLOWED, strlen(_550_NOT_ALLOWED)); SAFEFREE(addr); } else bufferevent_write(bev, _550_NOT_ALLOWED, strlen(_550_NOT_ALLOWED)); } else if (string_startsWith(line, "RCPT TO:<")) { char* addr = stripOutEmailAddress(line); if (addr) { char* query = create_check_email_to_query(addr); if (query) databaseQuery(query, check_email_to_callback, email); else bufferevent_write(bev, _550_NOT_ALLOWED, strlen(_550_NOT_ALLOWED)); SAFEFREE(addr); } else bufferevent_write(bev, _550_NOT_ALLOWED, strlen(_550_NOT_ALLOWED)); } else if (string_equals(line, "DATA")) { if (email_has_recipients(email)) { bufferevent_write(bev, _354_GO_AHEAD, strlen(_354_GO_AHEAD)); email->mode = DATA_HEADERS; } else bufferevent_write(bev, _503_BAD_SEQUENCE, strlen(_503_BAD_SEQUENCE)); } else bufferevent_write(bev, _550_NOT_ALLOWED, strlen(_550_NOT_ALLOWED)); } else bufferevent_write(bev, _502_NOT_SUPPORTED, strlen(_502_NOT_SUPPORTED)); } break; case DATA_HEADERS: if (strlen(line) == 0) email->mode = DATA; else if (!string_contains(line, ':')) { email->mode = DATA; email_append_data(email, line); } else if (string_startsWith(line, "Subject: ")) email_set_subject(email, line); break; case DATA: if (strlen(line) > 0) { if (string_equals(line, ".")) { bufferevent_write(bev, _250_OK, strlen(_250_OK)); email->mode = DATA_DONE; email_for_each_recipient(email, bufferevent_get_base(bev), launch_push_queries); } else email_append_data(email, line); } break; default: break; } #ifdef DEV printf("I got the following line: %s\n", line); #endif SAFEFREE(line); line = evbuffer_readln(buffer, &len, EVBUFFER_EOL_CRLF); } }
ReturnCode saveExternalFiles(xmlNodePtr aNodePtr, TixiDocument* aTixiDocument) { TixiDocumentHandle handle = aTixiDocument->handle; xmlNodePtr cur_node = NULL; xmlNodePtr copiedNode = NULL; char* externalDataDirectory = NULL; char* externalFileName = NULL; char* fullExternalFileName = NULL; char* externalDataNodePath = NULL; char* fullExternalDataNodePath = NULL; xmlDocPtr xmlDocument = NULL; /* find external data nodes */ for (cur_node = aNodePtr; cur_node; cur_node = cur_node->next) { /* recurse down with the next element */ saveExternalFiles(cur_node->children, aTixiDocument); if( checkExternalNode( cur_node ) != SUCCESS) { continue; } if ( cur_node->type == XML_ELEMENT_NODE ) { char* dirResolved = NULL; char* includetNodeName = (char*) xmlGetNodePath(cur_node); /* collect node information - externalFileName */ tixiGetTextAttribute(handle, includetNodeName, EXTERNAL_DATA_XML_ATTR_FILENAME, &externalFileName); /* collect node information - externalDataDirectory */ tixiGetTextAttribute(handle, includetNodeName, EXTERNAL_DATA_XML_ATTR_DIRECTORY, &externalDataDirectory); /* collect node information - externalDataNodePath */ tixiGetTextAttribute(handle, includetNodeName, EXTERNAL_DATA_XML_ATTR_NODEPATH, &externalDataNodePath); free(includetNodeName); /* remove attributes */ xmlUnsetProp(cur_node, (xmlChar*) EXTERNAL_DATA_XML_ATTR_FILENAME); xmlUnsetProp(cur_node, (xmlChar*) EXTERNAL_DATA_XML_ATTR_DIRECTORY); xmlUnsetProp(cur_node, (xmlChar*) EXTERNAL_DATA_XML_ATTR_NODEPATH); /* create new document */ xmlDocument = xmlNewDoc((xmlChar*) "1.0"); if (!xmlDocument) { printMsg(MESSAGETYPE_ERROR, "Error in TIXI::saveExternalFiles ==> Could not create new document.\n"); return FAILED; } /* deep copy of nodes from external files */ copiedNode = xmlDocCopyNode(cur_node, xmlDocument, 1); xmlDocSetRootElement(xmlDocument, copiedNode); dirResolved = resolveDirectory(aTixiDocument->dirname, externalDataDirectory); /* only save to local paths */ if(string_startsWith(dirResolved, "file://") == 0) { char* externalDataDirectoryNotUrl = uriToLocalPath(dirResolved); assert(externalDataDirectoryNotUrl); fullExternalFileName = buildString("%s%s", externalDataDirectoryNotUrl, externalFileName); xmlSaveFormatFileEnc(fullExternalFileName, xmlDocument, "utf-8", 1); free(fullExternalFileName); free(externalDataDirectoryNotUrl); } free(dirResolved); xmlFreeDoc(xmlDocument); /* create external data node structure */ fullExternalDataNodePath = buildString("%s/%s", externalDataNodePath, EXTERNAL_DATA_NODE_NAME); /* add parent node if not exists */ if(tixiCheckElement(handle, fullExternalDataNodePath) != SUCCESS) { tixiAddTextElement(handle, externalDataNodePath, EXTERNAL_DATA_NODE_NAME, ""); tixiAddTextElement(handle, fullExternalDataNodePath, EXTERNAL_DATA_NODE_NAME_PATH, externalDataDirectory); } /* add node for external reference */ tixiAddTextElement(handle, fullExternalDataNodePath, EXTERNAL_DATA_NODE_NAME_FILENAME, externalFileName); /* remove the copied nodes from document*/ copiedNode = cur_node->prev; xmlUnlinkNode(cur_node); xmlFreeNode(cur_node); free(fullExternalDataNodePath); cur_node = copiedNode; } } return SUCCESS; }