This is an automated email from the ASF dual-hosted git repository.

pengzheng pushed a commit to branch feature/511-remove-resolver
in repository https://gitbox.apache.org/repos/asf/celix.git

commit 55f15fa7fa24a9aeef394ff6464ba676e3f9bac3
Author: PengZheng <[email protected]>
AuthorDate: Sat Jul 29 19:04:26 2023 +0800

    [#531] Remove buggy Export-Library/Import-Library header parsing codes.
---
 libs/framework/src/manifest_parser.c | 354 +----------------------------------
 1 file changed, 2 insertions(+), 352 deletions(-)

diff --git a/libs/framework/src/manifest_parser.c 
b/libs/framework/src/manifest_parser.c
index 074945e3..46275bed 100644
--- a/libs/framework/src/manifest_parser.c
+++ b/libs/framework/src/manifest_parser.c
@@ -50,12 +50,6 @@ struct manifestParser {
        linked_list_pt requirements;
 };
 
-static linked_list_pt manifestParser_parseImportHeader(const char* header);
-static linked_list_pt manifestParser_parseExportHeader(module_pt module, const 
char* header);
-static linked_list_pt manifestParser_parseDelimitedString(const char* value, 
const char* delim);
-static linked_list_pt manifestParser_parseStandardHeaderClause(const char* 
clauseString);
-static linked_list_pt manifestParser_parseStandardHeader(const char* header);
-
 celix_status_t manifestParser_create(module_pt owner, manifest_pt manifest, 
manifest_parser_pt *manifest_parser) {
        celix_status_t status;
        manifest_parser_pt parser;
@@ -76,8 +70,8 @@ celix_status_t manifestParser_create(module_pt owner, 
manifest_pt manifest, mani
                        version_createEmptyVersion(&parser->bundleVersion);
                }
 
-               parser->capabilities = manifestParser_parseExportHeader(owner, 
manifest_getValue(manifest, OSGI_FRAMEWORK_EXPORT_LIBRARY));
-               parser->requirements = 
manifestParser_parseImportHeader(manifest_getValue(manifest, 
OSGI_FRAMEWORK_IMPORT_LIBRARY));
+                linkedList_create(&parser->capabilities);
+                linkedList_create(&parser->requirements);
 
                *manifest_parser = parser;
 
@@ -106,350 +100,6 @@ celix_status_t manifestParser_destroy(manifest_parser_pt 
mp) {
        return CELIX_SUCCESS;
 }
 
-static linked_list_pt manifestParser_parseDelimitedString(const char * value, 
const char * delim) {
-       linked_list_pt list;
-
-       if (linkedList_create(&list) == CELIX_SUCCESS) {
-               if (value != NULL) {
-                       int CHAR = 1;
-                       int DELIMITER = 2;
-                       int STARTQUOTE = 4;
-                       int ENDQUOTE = 8;
-
-                       char buffer[512];
-                       int expecting = (CHAR | DELIMITER | STARTQUOTE);
-                       unsigned int i;
-
-                       buffer[0] = '\0';
-
-                       for (i = 0; i < strlen(value); i++) {
-                               char c = value[i];
-
-                               bool isDelimiter = (strchr(delim, c) != NULL);
-                               bool isQuote = (c == '"');
-
-                               if (isDelimiter && ((expecting & DELIMITER) > 
0)) {
-                                       linkedList_addElement(list, 
strdup(buffer));
-                                       buffer[0] = '\0';
-                                       expecting = (CHAR | DELIMITER | 
STARTQUOTE);
-                               } else if (isQuote && ((expecting & STARTQUOTE) 
> 0)) {
-                                       char tmp[2];
-                                       tmp[0] = c;
-                                       tmp[1] = '\0';
-                                       strcat(buffer, tmp);
-                                       expecting = CHAR | ENDQUOTE;
-                               } else if (isQuote && ((expecting & ENDQUOTE) > 
0)) {
-                                       char tmp[2];
-                                       tmp[0] = c;
-                                       tmp[1] = '\0';
-                                       strcat(buffer, tmp);
-                                       expecting = (CHAR | STARTQUOTE | 
DELIMITER);
-                               } else if ((expecting & CHAR) > 0) {
-                                       char tmp[2];
-                                       tmp[0] = c;
-                                       tmp[1] = '\0';
-                                       strcat(buffer, tmp);
-                               } else {
-                                       linkedList_destroy(list);
-                                       return NULL;
-                               }
-                       }
-
-                       if (strlen(buffer) > 0) {
-                               linkedList_addElement(list, 
celix_utils_trim(buffer));
-                       }
-               }
-       }
-
-       return list;
-}
-
-static linked_list_pt manifestParser_parseStandardHeaderClause(const char * 
clauseString) {
-       linked_list_pt paths = NULL;
-       linked_list_pt clause = NULL;
-       linked_list_pt pieces = NULL;
-
-       if(linkedList_create(&paths) != CELIX_SUCCESS){
-               return NULL;
-       }
-
-       pieces = manifestParser_parseDelimitedString(clauseString, ";");
-
-       if (pieces != NULL) {
-               int pathCount = 0;
-               int pieceIdx;
-               hash_map_pt dirsMap = NULL;
-               hash_map_pt attrsMap = NULL;
-               char * sep;
-
-               for (pieceIdx = 0; pieceIdx < linkedList_size(pieces); 
pieceIdx++) {
-                       char * piece = linkedList_get(pieces, pieceIdx);
-                       if (strchr(piece, '=') != NULL) {
-                               break;
-                       } else {
-                               linkedList_addElement(paths, strdup(piece));
-                               pathCount++;
-                       }
-               }
-
-               if (pathCount != 0) {
-
-                       dirsMap = hashMap_create(utils_stringHash, NULL, 
utils_stringEquals, NULL);
-                       attrsMap = hashMap_create(utils_stringHash, NULL, 
utils_stringEquals, NULL);
-
-                       bool failure = false;
-                       char *key = NULL;
-                       char *value = NULL;
-
-                       for (pieceIdx = pathCount; pieceIdx < 
linkedList_size(pieces) && !failure ; pieceIdx++) {
-                               char * sepPtr;
-                               char * DIRECTIVE_SEP = ":=";
-                               char * ATTRIBUTE_SEP = "=";
-                               char * piece = linkedList_get(pieces, pieceIdx);
-                               if ((sepPtr = strstr(piece, DIRECTIVE_SEP)) != 
NULL) {
-                                       sep = DIRECTIVE_SEP;
-                               } else if ((sepPtr = strstr(piece, 
ATTRIBUTE_SEP)) != NULL) {
-                                       sep = ATTRIBUTE_SEP;
-                               } else {
-                                       failure=true;
-                                       break;
-                               }
-
-                               if (strcmp(sep, DIRECTIVE_SEP) == 0) {
-                                       // Not implemented
-                               }
-                               else {
-
-                                       key = string_ndup(piece, sepPtr - 
piece);
-                                       value = strdup(sepPtr+strlen(sep));
-
-                                       if (value[0] == '"' && 
value[strlen(value) -1] == '"') {
-                                               char * oldV = strdup(value);
-                                               int len = strlen(oldV) - 2;
-                                               value = (char *) realloc(value, 
(sizeof(char) * len+1));
-                                               value[0] = '\0';
-                                               value = strncpy(value, oldV+1, 
strlen(oldV) - 2);
-                                               value[len] = '\0';
-                                               //check if correct
-                                               free(oldV);
-                                       }
-
-                                       attribute_pt attr = NULL;
-                                       if (hashMap_containsKey(attrsMap, key)) 
{
-                                               failure=true;
-                                               break;
-                                       }
-
-                                       if (attribute_create(key, value, &attr) 
== CELIX_SUCCESS) {
-                                               hashMap_put(attrsMap, key, 
attr);
-                                       }
-                               }
-                       }
-
-                       if(linkedList_create(&clause) != CELIX_SUCCESS){
-                               failure=true;
-                       }
-
-                       if(failure){
-                               hashMap_destroy(dirsMap,false,false);
-
-                               hash_map_iterator_pt attrIter = 
hashMapIterator_create(attrsMap);
-                               while(hashMapIterator_hasNext(attrIter)){
-                                       hash_map_entry_pt entry = 
hashMapIterator_nextEntry(attrIter);
-                                       char *mkey = 
(char*)hashMapEntry_getKey(entry);
-                                       attribute_pt mattr = 
(attribute_pt)hashMapEntry_getValue(entry);
-                                       free(mkey);
-                                       attribute_destroy(mattr);
-                               }
-                               hashMapIterator_destroy(attrIter);
-                               hashMap_destroy(attrsMap,false,false);
-
-                               if(key!=NULL){
-                                       free(key);
-                               }
-                               if(value!=NULL){
-                                       free(value);
-                               }
-
-                               linked_list_iterator_pt piter = 
linkedListIterator_create(paths,0);
-                               while(linkedListIterator_hasNext(piter)){
-                                       free(linkedListIterator_next(piter));
-                               }
-                               linkedListIterator_destroy(piter);
-                               linkedList_destroy(paths);
-
-                               if(clause!=NULL){
-                                       linkedList_destroy(clause);
-                                       clause = NULL;
-                               }
-                       }
-                       else{
-                               linkedList_addElement(clause, paths);
-                               linkedList_addElement(clause, dirsMap);
-                               linkedList_addElement(clause, attrsMap);
-                       }
-
-               }
-               else{
-                       linkedList_destroy(paths);
-               }
-
-               for(int listIdx = 0; listIdx < linkedList_size(pieces); 
listIdx++){
-                       void * element = linkedList_get(pieces, listIdx);
-                       free(element);
-               }
-               linkedList_destroy(pieces);
-       }
-       else{
-               linkedList_destroy(paths);
-       }
-
-       return clause;
-}
-
-static linked_list_pt manifestParser_parseStandardHeader(const char * header) {
-       linked_list_pt clauseStrings = NULL;
-       linked_list_pt completeList = NULL;
-
-       if(header != NULL && strlen(header)==0){
-               return NULL;
-       }
-
-       if (linkedList_create(&completeList) == CELIX_SUCCESS) {
-               if(header!=NULL){
-                       char *hdr = strdup(header);
-                       clauseStrings = 
manifestParser_parseDelimitedString(hdr, ",");
-                       free(hdr);
-                       if (clauseStrings != NULL) {
-                               int i;
-                               for (i = 0; i < linkedList_size(clauseStrings); 
i++) {
-                                       char *clauseString = (char *) 
linkedList_get(clauseStrings, i);
-                                       linkedList_addElement(completeList, 
manifestParser_parseStandardHeaderClause(clauseString));
-                                       free(clauseString);
-                               }
-                               linkedList_destroy(clauseStrings);
-                       }
-               }
-
-       }
-
-       return completeList;
-}
-
-static linked_list_pt manifestParser_parseImportHeader(const char * header) {
-       linked_list_pt clauses = NULL;
-       linked_list_pt requirements = NULL;
-       bool failure = false;
-
-       int clauseIdx;
-       linked_list_iterator_pt iter;
-       clauses = manifestParser_parseStandardHeader(header);
-       linkedList_create(&requirements);
-
-       for (clauseIdx = 0; clauseIdx < linkedList_size(clauses) && !failure ; 
clauseIdx++) {
-               linked_list_pt clause = linkedList_get(clauses, clauseIdx);
-
-               linked_list_pt paths = linkedList_get(clause, 0);
-               hash_map_pt directives = linkedList_get(clause, 1);
-               hash_map_pt attributes = linkedList_get(clause, 2);
-
-               int pathIdx;
-               for (pathIdx = 0; pathIdx < linkedList_size(paths) && !failure 
; pathIdx++) {
-                       attribute_pt name = NULL;
-                       requirement_pt req = NULL;
-                       char * path = (char *) linkedList_get(paths, pathIdx);
-                       if (strlen(path) == 0) {
-                               failure = true;
-                               break;
-                       }
-
-                       if (attribute_create(strdup("service"), path, &name) == 
CELIX_SUCCESS) {
-                               char *key = NULL;
-                               attribute_getKey(name, &key);
-                               hashMap_put(attributes, key, name);
-                       }
-
-                       requirement_create(directives, attributes, &req);
-                       linkedList_addElement(requirements, req);
-               }
-       }
-
-       if(!failure){
-               iter = linkedListIterator_create(clauses, 0);
-               while(linkedListIterator_hasNext(iter)) {
-                       linked_list_pt clause = linkedListIterator_next(iter);
-
-                       linked_list_pt paths = linkedList_get(clause, 0);
-                       linkedList_destroy(paths);
-
-                       linkedListIterator_remove(iter);
-                       linkedList_destroy(clause);
-               }
-               linkedListIterator_destroy(iter);
-       }
-
-       linkedList_destroy(clauses);
-
-       return requirements;
-}
-
-static linked_list_pt manifestParser_parseExportHeader(module_pt module, const 
char * header) {
-       linked_list_pt clauses = NULL;
-       linked_list_pt capabilities = NULL;
-       int clauseIdx;
-       linked_list_iterator_pt iter;
-       bool failure = false;
-
-       clauses = manifestParser_parseStandardHeader(header);
-       linkedList_create(&capabilities);
-
-       for (clauseIdx = 0; clauseIdx < linkedList_size(clauses) && !failure ; 
clauseIdx++) {
-               linked_list_pt clause = linkedList_get(clauses, clauseIdx);
-
-               linked_list_pt paths = linkedList_get(clause, 0);
-               hash_map_pt directives = linkedList_get(clause, 1);
-               hash_map_pt attributes = linkedList_get(clause, 2);
-
-               int pathIdx;
-               for (pathIdx = 0; pathIdx < linkedList_size(paths) && !failure 
; pathIdx++) {
-                       char * path = (char *) linkedList_get(paths, pathIdx);
-                       attribute_pt name = NULL;
-                       capability_pt cap = NULL;
-                       if (strlen(path) == 0) {
-                               failure=true;
-                               break;
-                       }
-
-                       if (attribute_create(strdup("service"), path, &name) == 
CELIX_SUCCESS) {
-                               char *key = NULL;
-                               attribute_getKey(name, &key);
-                               hashMap_put(attributes, key, name);
-                       }
-
-                       capability_create(module, directives, attributes, &cap);
-                       linkedList_addElement(capabilities, cap);
-               }
-       }
-
-       if(!failure){
-               iter = linkedListIterator_create(clauses, 0);
-               while(linkedListIterator_hasNext(iter)) {
-                       linked_list_pt clause = linkedListIterator_next(iter);
-
-                       linked_list_pt paths = linkedList_get(clause, 0);
-                       linkedList_destroy(paths);
-
-                       linkedListIterator_remove(iter);
-                       linkedList_destroy(clause);
-               }
-               linkedListIterator_destroy(iter);
-       }
-
-       linkedList_destroy(clauses);
-
-       return capabilities;
-}
-
 static celix_status_t manifestParser_getDuplicateEntry(manifest_parser_pt 
parser, const char* entryName, char **result) {
     const char *val = manifest_getValue(parser->manifest, entryName);
     if (result != NULL && val == NULL) {

Reply via email to