/** * remove a element ATTENTION: It has to be ensured, that * no other thread can access the elemnt right now (the predecessor * has to be locked) */ ConcurrentListElement *removeElement(ConcurrentListElement *element) { useElement(element); ConcurrentListElement *next = element->nextEntry; // is locked returnElement(element); // Pointer and real content log_debug("Remove payload: %p", element->payload); free(element->payload); log_debug("Remove ID: %p", element->ID); free(element->ID); log_debug("Remove element: %p", element); free(element); return next; }
void addCommentWithLine (int errorType, const char * comment, const char * filename, unsigned int lineNumber) { errorLinkToFile * newLink = new errorLinkToFile; if (! newLink) return; if (filename && filename[0] == '\0') filename = NULL; char * s = copyString(comment); char * s2, *s3; // Extract real strings... while (s2 = strstr(s, "_string")) { unsigned long i = 0; int ac = 0; s3 = s2 + 7; int looping = true; while (s3[ac] && looping) { if (s3[ac] >= '0' && s3[ac] <= '9') { i = (i * 10) + s3[ac] - '0'; if (i >= 65535) { looping = false; } } else { looping = false; } if (looping) ac ++; } s3+=ac; s2[1] = 0; s2[0] = '"'; s2 = s; s = joinStrings(s, returnElement (allSourceStrings, i), "\"", s3); delete s2; } // Extract resource file names ... while (s2 = strstr(s, "_file")) { unsigned long i = 0; int ac = 0; s3 = s2 + 7; int looping = true; while (s3[ac] && looping) { if (s3[ac] >= '0' && s3[ac] <= '9') { i = (i * 10) + s3[ac] - '0'; if (i >= 65535) { looping = false; } } else { looping = false; } if (looping) ac ++; } s3+=ac; s2[1] = 0; s2[0] = '\''; s2 = s; s = joinStrings(s, returnElement (allFileHandles, i), "'", s3); delete s2; } newLink->errorType = errorType; newLink->overview = copyString (s); newLink->filename = filename ? copyString (filename) : NULL; newLink->lineNumber = lineNumber; newLink->next = errorList; errorList = newLink; char * filenameWline; if (filename) { if (lineNumber) { filenameWline = new char[strlen(filename)+15]; sprintf(filenameWline, "%s: line %d", filename, lineNumber); } else { filenameWline = copyString(filename); } } else { filenameWline = copyString (""); } char * after = filename ? joinStrings (" (in ", filenameWline, ")") : copyString (""); newLink->fullText = joinStrings (errorTypeStrings[errorType], s, after); delete after; delete filenameWline; numErrors ++; compilerCommentsUpdated(); }