コード例 #1
0
ファイル: nstring.c プロジェクト: gitlarryf/neon-lang
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;
}
コード例 #2
0
ファイル: tixiInternal.c プロジェクト: pombredanne/tixi
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);
  }
}
コード例 #3
0
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;
}
コード例 #4
0
ファイル: smtp.c プロジェクト: schoentoon/ventistipes
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);
  }
}
コード例 #5
0
ファイル: tixiInternal.c プロジェクト: pombredanne/tixi
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;
}