Return-Path: X-Original-To: apmail-incubator-celix-commits-archive@minotaur.apache.org Delivered-To: apmail-incubator-celix-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id E23EB113B1 for ; Fri, 6 Jun 2014 09:44:20 +0000 (UTC) Received: (qmail 99206 invoked by uid 500); 6 Jun 2014 09:44:20 -0000 Delivered-To: apmail-incubator-celix-commits-archive@incubator.apache.org Received: (qmail 99181 invoked by uid 500); 6 Jun 2014 09:44:20 -0000 Mailing-List: contact celix-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: celix-dev@incubator.apache.org Delivered-To: mailing list celix-commits@incubator.apache.org Received: (qmail 99174 invoked by uid 99); 6 Jun 2014 09:44:20 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 06 Jun 2014 09:44:20 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 06 Jun 2014 09:44:14 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id AC82A238889B; Fri, 6 Jun 2014 09:43:48 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1600834 - in /incubator/celix/trunk: framework/private/include/ framework/private/src/ framework/public/include/ utils/private/src/ utils/public/include/ Date: Fri, 06 Jun 2014 09:43:48 -0000 To: celix-commits@incubator.apache.org From: abroekhuis@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20140606094348.AC82A238889B@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: abroekhuis Date: Fri Jun 6 09:43:47 2014 New Revision: 1600834 URL: http://svn.apache.org/r1600834 Log: CELIX-119: Removed APR usage from the bundle cache, archive and revisions. Modified: incubator/celix/trunk/framework/private/include/bundle_cache.h incubator/celix/trunk/framework/private/include/bundle_cache_private.h incubator/celix/trunk/framework/private/src/bundle.c incubator/celix/trunk/framework/private/src/bundle_archive.c incubator/celix/trunk/framework/private/src/bundle_cache.c incubator/celix/trunk/framework/private/src/bundle_revision.c incubator/celix/trunk/framework/private/src/framework.c incubator/celix/trunk/framework/private/src/manifest.c incubator/celix/trunk/framework/public/include/bundle_archive.h incubator/celix/trunk/framework/public/include/bundle_revision.h incubator/celix/trunk/framework/public/include/manifest.h incubator/celix/trunk/utils/private/src/celix_threads.c incubator/celix/trunk/utils/public/include/celix_threads.h Modified: incubator/celix/trunk/framework/private/include/bundle_cache.h URL: http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/include/bundle_cache.h?rev=1600834&r1=1600833&r2=1600834&view=diff ============================================================================== --- incubator/celix/trunk/framework/private/include/bundle_cache.h (original) +++ incubator/celix/trunk/framework/private/include/bundle_cache.h Fri Jun 6 09:43:47 2014 @@ -54,7 +54,7 @@ typedef struct bundleCache *bundle_cache * - CELIX_ILLEGAL_ARGUMENT If bundle_cache not is null. * - CELIX_ENOMEM If allocating memory for bundle_cache failed. */ -celix_status_t bundleCache_create(properties_pt configurationMap, apr_pool_t *mp, framework_logger_pt logger, bundle_cache_pt *bundle_cache); +celix_status_t bundleCache_create(properties_pt configurationMap, framework_logger_pt logger, bundle_cache_pt *bundle_cache); /** * Recreates and retrieves the list of archives for the given bundle cache. @@ -69,7 +69,7 @@ celix_status_t bundleCache_create(proper * - CELIX_ENOMEM If allocating memory for archives failed. * - CELIX_FILE_IO_EXCEPTION If the cache cannot be opened or read. */ -celix_status_t bundleCache_getArchives(bundle_cache_pt cache, apr_pool_t *pool, array_list_pt *archives); +celix_status_t bundleCache_getArchives(bundle_cache_pt cache, array_list_pt *archives); /** * Creates a new archive for the given bundle (using the id and location). The archive is created on the supplied bundlePool. @@ -86,7 +86,7 @@ celix_status_t bundleCache_getArchives(b * - CELIX_ILLEGAL_ARGUMENT If bundle_archive not is null. * - CELIX_ENOMEM If allocating memory for bundle_archive failed. */ -celix_status_t bundleCache_createArchive(bundle_cache_pt cache, apr_pool_t *bundlePool, long id, char * location, char *inputFile, bundle_archive_pt *archive); +celix_status_t bundleCache_createArchive(bundle_cache_pt cache, long id, char * location, char *inputFile, bundle_archive_pt *archive); /** * Deletes the entire bundle cache. Modified: incubator/celix/trunk/framework/private/include/bundle_cache_private.h URL: http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/include/bundle_cache_private.h?rev=1600834&r1=1600833&r2=1600834&view=diff ============================================================================== --- incubator/celix/trunk/framework/private/include/bundle_cache_private.h (original) +++ incubator/celix/trunk/framework/private/include/bundle_cache_private.h Fri Jun 6 09:43:47 2014 @@ -33,7 +33,6 @@ struct bundleCache { properties_pt configurationMap; char * cacheDir; - apr_pool_t *mp; framework_logger_pt logger; }; Modified: incubator/celix/trunk/framework/private/src/bundle.c URL: http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/src/bundle.c?rev=1600834&r1=1600833&r2=1600834&view=diff ============================================================================== --- incubator/celix/trunk/framework/private/src/bundle.c (original) +++ incubator/celix/trunk/framework/private/src/bundle.c Fri Jun 6 09:43:47 2014 @@ -50,7 +50,7 @@ celix_status_t bundle_create(bundle_pt * if (*bundle == NULL) { return CELIX_ENOMEM; } - status = bundleArchive_createSystemBundleArchive(mp, logger, &archive); + status = bundleArchive_createSystemBundleArchive(logger, &archive); if (status == CELIX_SUCCESS) { module_pt module; apr_status_t apr_status; Modified: incubator/celix/trunk/framework/private/src/bundle_archive.c URL: http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/src/bundle_archive.c?rev=1600834&r1=1600833&r2=1600834&view=diff ============================================================================== --- incubator/celix/trunk/framework/private/src/bundle_archive.c (original) +++ incubator/celix/trunk/framework/private/src/bundle_archive.c Fri Jun 6 09:43:47 2014 @@ -27,9 +27,9 @@ #include #include #include - -#include -#include +#include +#include +#include #include "bundle_archive.h" #include "bundle_revision.h" @@ -40,7 +40,7 @@ struct bundleArchive { long id; char * location; - apr_dir_t * archiveRootDir; + DIR *archiveRootDir; char * archiveRoot; linked_list_pt revisions; long refreshCount; @@ -48,18 +48,14 @@ struct bundleArchive { framework_logger_pt logger; bundle_state_e persistentState; - - apr_pool_t *mp; }; -static apr_status_t bundleArchive_destroy(void *archiveP); - static celix_status_t bundleArchive_getRevisionLocation(bundle_archive_pt archive, long revNr, char **revision_location); static celix_status_t bundleArchive_setRevisionLocation(bundle_archive_pt archive, char * location, long revNr); static celix_status_t bundleArchive_initialize(bundle_archive_pt archive); -static celix_status_t bundleArchive_deleteTree(bundle_archive_pt archive, char * directory, apr_pool_t *mp); +static celix_status_t bundleArchive_deleteTree(bundle_archive_pt archive, char * directory); static celix_status_t bundleArchive_createRevisionFromLocation(bundle_archive_pt archive, char *location, char *inputFile, long revNr, bundle_revision_pt *bundle_revision); static celix_status_t bundleArchive_reviseInternal(bundle_archive_pt archive, bool isReload, long revNr, char * location, char *inputFile); @@ -67,25 +63,23 @@ static celix_status_t bundleArchive_revi static celix_status_t bundleArchive_readLastModified(bundle_archive_pt archive, time_t *time); static celix_status_t bundleArchive_writeLastModified(bundle_archive_pt archive); -celix_status_t bundleArchive_createSystemBundleArchive(apr_pool_t *mp, framework_logger_pt logger, bundle_archive_pt *bundle_archive) { +celix_status_t bundleArchive_createSystemBundleArchive(framework_logger_pt logger, bundle_archive_pt *bundle_archive) { celix_status_t status = CELIX_SUCCESS; char *error = NULL; bundle_archive_pt archive; - if (mp == NULL || *bundle_archive != NULL) { + if (*bundle_archive != NULL) { status = CELIX_ILLEGAL_ARGUMENT; error = "Missing required arguments and/or incorrect values"; } else { - archive = (bundle_archive_pt) apr_palloc(mp, sizeof(*archive)); + archive = (bundle_archive_pt) malloc(sizeof(*archive)); if (archive == NULL) { status = CELIX_ENOMEM; } else { - apr_pool_pre_cleanup_register(mp, archive, bundleArchive_destroy); status = linkedList_create(&archive->revisions); if (status == CELIX_SUCCESS) { archive->id = 0l; archive->location = "System Bundle"; - archive->mp = mp; archive->archiveRoot = NULL; archive->archiveRootDir = NULL; archive->refreshCount = -1; @@ -103,21 +97,19 @@ celix_status_t bundleArchive_createSyste return status; } -celix_status_t bundleArchive_create(framework_logger_pt logger, char * archiveRoot, long id, char * location, char *inputFile, apr_pool_t *mp, bundle_archive_pt *bundle_archive) { +celix_status_t bundleArchive_create(framework_logger_pt logger, char * archiveRoot, long id, char * location, char *inputFile, bundle_archive_pt *bundle_archive) { celix_status_t status = CELIX_SUCCESS; char *error = NULL; - apr_pool_t *revisions_pool; bundle_archive_pt archive; if (*bundle_archive != NULL) { status = CELIX_ILLEGAL_ARGUMENT; error = "bundle_archive_pt must be NULL"; } else { - archive = (bundle_archive_pt) apr_pcalloc(mp, sizeof(*archive)); + archive = (bundle_archive_pt) malloc(sizeof(*archive)); if (archive == NULL) { status = CELIX_ENOMEM; } else { - apr_pool_pre_cleanup_register(mp, archive, bundleArchive_destroy); status = linkedList_create(&archive->revisions); if (status == CELIX_SUCCESS) { archive->id = id; @@ -128,8 +120,6 @@ celix_status_t bundleArchive_create(fram archive->logger = logger; time(&archive->lastModified); - archive->mp = mp; - bundleArchive_initialize(archive); bundleArchive_revise(archive, location, inputFile); @@ -144,9 +134,8 @@ celix_status_t bundleArchive_create(fram return status; } -static apr_status_t bundleArchive_destroy(void *archiveP) { - apr_status_t status = APR_SUCCESS; - bundle_archive_pt archive = archiveP; +celix_status_t bundleArchive_destroy(bundle_archive_pt archive) { + celix_status_t status = CELIX_SUCCESS; if (archive->revisions != NULL) { linkedList_destroy(archive->revisions); @@ -158,39 +147,38 @@ static apr_status_t bundleArchive_destro return status; } -celix_status_t bundleArchive_recreate(char * archiveRoot, apr_pool_t *mp, bundle_archive_pt *bundle_archive) { +celix_status_t bundleArchive_recreate(char * archiveRoot, bundle_archive_pt *bundle_archive) { celix_status_t status = CELIX_SUCCESS; char *errpr = NULL; bundle_archive_pt archive; - archive = (bundle_archive_pt) apr_pcalloc(mp, sizeof(*archive)); + archive = (bundle_archive_pt) malloc(sizeof(*archive)); if (archive == NULL) { status = CELIX_ENOMEM; } else { - apr_dir_t *dir; - apr_pool_pre_cleanup_register(mp, archive, bundleArchive_destroy); status = linkedList_create(&archive->revisions); if (status == CELIX_SUCCESS) { archive->archiveRoot = archiveRoot; - apr_dir_open(&archive->archiveRootDir, archiveRoot, mp); + archive->archiveRootDir = NULL; archive->id = -1; archive->persistentState = -1; archive->location = NULL; - archive->mp = mp; archive->refreshCount = -1; archive->lastModified = (time_t) NULL; } - status = CELIX_DO_IF(status, apr_dir_open(&dir, archiveRoot, mp)); - if (status == CELIX_SUCCESS) { - apr_finfo_t dp; + archive->archiveRootDir = opendir(archiveRoot); + if (archive->archiveRootDir == NULL) { + status = CELIX_FRAMEWORK_EXCEPTION; + } else { + struct dirent *dent; long idx = 0; char *location; - while ((apr_dir_read(&dp, APR_FINFO_DIRENT|APR_FINFO_TYPE, dir)) == APR_SUCCESS) { - if (dp.filetype == APR_DIR && (strncmp(dp.name, "version", 7) == 0)) { - sscanf(dp.name, "version%*d.%ld", &idx); + while ((dent = readdir(archive->archiveRootDir)) != NULL) { + if (dent->d_type == DT_DIR && (strncmp(dent->d_name, "version", 7) == 0)) { + sscanf(dent->d_name, "version%*d.%ld", &idx); } } @@ -202,7 +190,7 @@ celix_status_t bundleArchive_recreate(ch } } - framework_logIfError(archive->logger, status, NULL, "Could not create archive"); + framework_logIfError(logger, status, NULL, "Could not create archive"); return status; } @@ -211,36 +199,22 @@ celix_status_t bundleArchive_getId(bundl celix_status_t status = CELIX_SUCCESS; if (archive->id < 0) { - apr_file_t *bundleIdFile; - char * bundleId = NULL; + FILE *bundleIdFile; char id[256]; - apr_pool_t *subpool = NULL; - status = CELIX_DO_IF(status, apr_pool_create(&subpool, archive->mp)); - if (status == CELIX_SUCCESS) { - bundleId = (char *)apr_palloc(subpool, strlen(archive->archiveRoot) + 11); - if (bundleId == NULL) { - status = CELIX_ENOMEM; - } - } - if (status == CELIX_SUCCESS) { - strcpy(bundleId, archive->archiveRoot); - strcat(bundleId, "/bundle.id"); - } - status = CELIX_DO_IF(status, apr_file_open(&bundleIdFile, bundleId, APR_FOPEN_READ, APR_OS_DEFAULT, archive->mp)); - status = CELIX_DO_IF(status, apr_file_gets(id, sizeof(id), bundleIdFile)); - status = CELIX_DO_IF(status, apr_file_close(bundleIdFile)); - if (status == CELIX_SUCCESS) { - sscanf(id, "%ld", &archive->id); - } + char bundleId[512]; + snprintf(bundleId, sizeof(bundleId), "%s/bundle.id", archive->archiveRoot); - apr_pool_destroy(subpool); + bundleIdFile = fopen(bundleId, "r"); + fgets(id, sizeof(id), bundleIdFile); + fclose(bundleIdFile); + sscanf(id, "%ld", &archive->id); } if (status == CELIX_SUCCESS) { *id = archive->id; } - framework_logIfError(archive->logger, status, NULL, "Could not get archive id"); + framework_logIfError(logger, status, NULL, "Could not get archive id"); return status; } @@ -248,36 +222,23 @@ celix_status_t bundleArchive_getId(bundl celix_status_t bundleArchive_getLocation(bundle_archive_pt archive, char **location) { celix_status_t status = CELIX_SUCCESS; if (archive->location == NULL) { - apr_file_t *bundleLocationFile; - apr_status_t rv; - char * bundleLocation = NULL; - apr_pool_t *subpool = NULL; - status = CELIX_DO_IF(status, apr_pool_create(&subpool, archive->mp)); - if (status == CELIX_SUCCESS) { - char location[256]; - bundleLocation = (char *)apr_palloc(subpool, strlen(archive->archiveRoot) + 17); - if (bundleLocation == NULL) { - status = CELIX_ENOMEM; - } - - strcpy(bundleLocation,archive->archiveRoot); - strcat(bundleLocation, "/bundle.location"); - - status = CELIX_DO_IF(status, apr_file_open(&bundleLocationFile, bundleLocation, APR_FOPEN_READ, APR_OS_DEFAULT, archive->mp)); - status = CELIX_DO_IF(status, apr_file_gets (location , sizeof(location) , bundleLocationFile)); - status = CELIX_DO_IF(status, apr_file_close(bundleLocationFile)); - if (status == CELIX_SUCCESS) { - archive->location = apr_pstrdup(archive->mp, location); - } - apr_pool_destroy(subpool); - } + FILE *bundleLocationFile; + char bundleLocation[512]; + char location[256]; + + snprintf(bundleLocation, sizeof(bundleLocation), "%s/bundle.location", archive->archiveRoot); + + bundleLocationFile = fopen(bundleLocation, "r"); + fgets(location, sizeof(location), bundleLocationFile); + fclose(bundleLocationFile); + archive->location = strdup(location); } if (status == CELIX_SUCCESS) { *location = archive->location; } - framework_logIfError(archive->logger, status, NULL, "Could not get archive location"); + framework_logIfError(logger, status, NULL, "Could not get archive location"); return status; } @@ -295,7 +256,7 @@ celix_status_t bundleArchive_getCurrentR status = CELIX_DO_IF(status, bundleArchive_getCurrentRevision(archive, &revision)); status = CELIX_DO_IF(status, bundleRevision_getNumber(revision, revisionNumber)); - framework_logIfError(archive->logger, status, NULL, "Could not get current revision number"); + framework_logIfError(logger, status, NULL, "Could not get current revision number"); return status; } @@ -312,94 +273,78 @@ celix_status_t bundleArchive_getRevision celix_status_t bundleArchive_getPersistentState(bundle_archive_pt archive, bundle_state_e *state) { celix_status_t status = CELIX_SUCCESS; - apr_status_t apr_status; if (archive->persistentState != OSGI_FRAMEWORK_BUNDLE_UNKNOWN) { *state = archive->persistentState; } else { - apr_file_t *persistentStateLocationFile; - char * persistentStateLocation = NULL; - apr_pool_t *subpool; - status = CELIX_DO_IF(status, apr_pool_create(&subpool, archive->mp)); - if (status == CELIX_SUCCESS) { - persistentStateLocation = apr_palloc(subpool, strlen(archive->archiveRoot) + 14); - if (persistentStateLocation == NULL) { - status = CELIX_ENOMEM; - } else { - char stateString[256]; - strcpy(persistentStateLocation, archive->archiveRoot); - strcat(persistentStateLocation, "/bundle.state"); - - status = CELIX_DO_IF(status, apr_file_open(&persistentStateLocationFile, persistentStateLocation, APR_FOPEN_READ, APR_OS_DEFAULT, archive->mp)); - status = CELIX_DO_IF(status, apr_file_gets(stateString , sizeof(stateString) , persistentStateLocationFile)); - status = CELIX_DO_IF(status, apr_file_close(persistentStateLocationFile)); - - if (status == CELIX_SUCCESS) { - if (stateString != NULL && (strcmp(stateString, "active") == 0)) { - archive->persistentState = OSGI_FRAMEWORK_BUNDLE_ACTIVE; - } else if (stateString != NULL && (strcmp(stateString, "starting") == 0)) { - archive->persistentState = OSGI_FRAMEWORK_BUNDLE_STARTING; - } else if (stateString != NULL && (strcmp(stateString, "uninstalled") == 0)) { - archive->persistentState = OSGI_FRAMEWORK_BUNDLE_UNINSTALLED; - } else { - archive->persistentState = OSGI_FRAMEWORK_BUNDLE_INSTALLED; - } + FILE *persistentStateLocationFile; + char persistentStateLocation[512]; + char stateString[256]; + snprintf(persistentStateLocation, sizeof(persistentStateLocation), "%s/bundle.state", archive->archiveRoot); + + persistentStateLocationFile = fopen(persistentStateLocation, "r"); + if (persistentStateLocationFile == NULL) { + status = CELIX_FILE_IO_EXCEPTION; + } else { + if (fgets(stateString, sizeof(stateString), persistentStateLocationFile) == NULL) { + status = CELIX_FILE_IO_EXCEPTION; + } + fclose(persistentStateLocationFile); + } - *state = archive->persistentState; - } - } - apr_pool_destroy(subpool); + if (status == CELIX_SUCCESS) { + if (stateString != NULL && (strcmp(stateString, "active") == 0)) { + archive->persistentState = OSGI_FRAMEWORK_BUNDLE_ACTIVE; + } else if (stateString != NULL && (strcmp(stateString, "starting") == 0)) { + archive->persistentState = OSGI_FRAMEWORK_BUNDLE_STARTING; + } else if (stateString != NULL && (strcmp(stateString, "uninstalled") == 0)) { + archive->persistentState = OSGI_FRAMEWORK_BUNDLE_UNINSTALLED; + } else { + archive->persistentState = OSGI_FRAMEWORK_BUNDLE_INSTALLED; + } + + *state = archive->persistentState; } } - framework_logIfError(archive->logger, status, NULL, "Could not get persistent state"); + framework_logIfError(logger, status, NULL, "Could not get persistent state"); return status; } celix_status_t bundleArchive_setPersistentState(bundle_archive_pt archive, bundle_state_e state) { celix_status_t status = CELIX_SUCCESS; - char * persistentStateLocation = NULL; - apr_file_t *persistentStateLocationFile; - apr_pool_t *subpool = NULL; + char persistentStateLocation[512]; + FILE *persistentStateLocationFile; - status = CELIX_DO_IF(status, apr_pool_create(&subpool, archive->mp)); - if (status == CELIX_SUCCESS) { - persistentStateLocation = (char *)apr_palloc(subpool, strlen(archive->archiveRoot) + 14); - if (persistentStateLocation == NULL) { - status = CELIX_ENOMEM; - } else { - strcpy(persistentStateLocation, archive->archiveRoot); - strcat(persistentStateLocation, "/bundle.state"); + snprintf(persistentStateLocation, sizeof(persistentStateLocation), "%s/bundle.state", archive->archiveRoot); - status = CELIX_DO_IF(status, apr_file_open(&persistentStateLocationFile, persistentStateLocation, APR_FOPEN_CREATE|APR_FOPEN_WRITE, APR_OS_DEFAULT, archive->mp)); - if (status == CELIX_SUCCESS) { - char * s; - switch (state) { - case OSGI_FRAMEWORK_BUNDLE_ACTIVE: - s = "active"; - break; - case OSGI_FRAMEWORK_BUNDLE_STARTING: - s = "starting"; - break; - case OSGI_FRAMEWORK_BUNDLE_UNINSTALLED: - s = "uninstalled"; - break; - default: - s = "installed"; - break; - } - apr_file_printf(persistentStateLocationFile, "%s", s); - status = CELIX_DO_IF(status, apr_file_close(persistentStateLocationFile)); - if (status == CELIX_SUCCESS) { - archive->persistentState = state; - } - } - } - apr_pool_destroy(subpool); + persistentStateLocationFile = fopen(persistentStateLocation, "w"); + if (persistentStateLocationFile == NULL) { + status = CELIX_FILE_IO_EXCEPTION; + } else { + char * s; + switch (state) { + case OSGI_FRAMEWORK_BUNDLE_ACTIVE: + s = "active"; + break; + case OSGI_FRAMEWORK_BUNDLE_STARTING: + s = "starting"; + break; + case OSGI_FRAMEWORK_BUNDLE_UNINSTALLED: + s = "uninstalled"; + break; + default: + s = "installed"; + break; + } + fprintf(persistentStateLocationFile, "%s", s); + if (fclose(persistentStateLocationFile) == 0) { + archive->persistentState = state; + } } - framework_logIfError(archive->logger, status, NULL, "Could not set persistent state"); + framework_logIfError(logger, status, NULL, "Could not set persistent state"); return status; } @@ -408,71 +353,51 @@ celix_status_t bundleArchive_getRefreshC celix_status_t status = CELIX_SUCCESS; if (archive->refreshCount == -1) { - apr_file_t * refreshCounterFile; - apr_status_t rv = APR_SUCCESS; - apr_pool_t *subpool = NULL; - char *refreshCounter = NULL; - - status = CELIX_DO_IF(status, apr_pool_create(&subpool, archive->mp)); - if (status == CELIX_SUCCESS) { - refreshCounter = (char *) apr_palloc(subpool, strlen(archive->archiveRoot) + 17); - if (refreshCounter == NULL) { - status = CELIX_ENOMEM; - } else { - strcpy(refreshCounter,archive->archiveRoot); - strcat(refreshCounter, "/refresh.counter"); - - status = CELIX_DO_IF(status, apr_file_open(&refreshCounterFile, refreshCounter, APR_FOPEN_READ, APR_OS_DEFAULT, archive->mp)); - if (status != CELIX_SUCCESS) { - archive->refreshCount = 0; - status = CELIX_SUCCESS; - } else { - char counterStr[256]; - status = CELIX_DO_IF(status, apr_file_gets(counterStr , sizeof(counterStr) , refreshCounterFile)); - status = CELIX_DO_IF(status, apr_file_close(refreshCounterFile)); - - if (status != CELIX_SUCCESS) { - sscanf(counterStr, "%ld", &archive->refreshCount); - } - } + FILE *refreshCounterFile; + char refreshCounter[512]; + snprintf(refreshCounter, sizeof(refreshCounter), "%s/refresh.counter", archive->archiveRoot); + + refreshCounterFile = fopen(refreshCounter, "r"); + if (refreshCounterFile == NULL) { + archive->refreshCount = 0; + } else { + char counterStr[256]; + if (fgets(counterStr, sizeof(counterStr), refreshCounterFile) == NULL) { + status = CELIX_FILE_IO_EXCEPTION; } - apr_pool_destroy(subpool); - } + fclose(refreshCounterFile); + if (status == CELIX_SUCCESS) { + sscanf(counterStr, "%ld", &archive->refreshCount); + } + } } if (status == CELIX_SUCCESS) { *refreshCount = archive->refreshCount; } - framework_logIfError(archive->logger, status, NULL, "Could not get refresh count"); + framework_logIfError(logger, status, NULL, "Could not get refresh count"); return status; } celix_status_t bundleArchive_setRefreshCount(bundle_archive_pt archive) { - apr_file_t * refreshCounterFile; - apr_status_t apr_status; + FILE *refreshCounterFile; celix_status_t status = CELIX_SUCCESS; - apr_pool_t *subpool; - char * refreshCounter = NULL; + char refreshCounter[512]; - status = CELIX_DO_IF(status, apr_pool_create(&subpool, archive->mp)); - if (status == CELIX_SUCCESS) { - refreshCounter = (char *) apr_palloc(subpool, strlen(archive->archiveRoot) + 17); - if (refreshCounter == NULL) { - status = CELIX_ENOMEM; - } else { - strcpy(refreshCounter, archive->archiveRoot); - strcat(refreshCounter, "/refresh.counter"); - - status = CELIX_DO_IF(status, apr_file_open(&refreshCounterFile, refreshCounter, APR_FOPEN_CREATE|APR_FOPEN_WRITE, APR_OS_DEFAULT, archive->mp)); - apr_file_printf(refreshCounterFile, "%ld", archive->refreshCount); - status = CELIX_DO_IF(status, apr_file_close(refreshCounterFile)); - } - apr_pool_destroy(subpool); - } + snprintf(refreshCounter, sizeof(refreshCounter), "%s/bundle.state", archive->archiveRoot); + + refreshCounterFile = fopen(refreshCounter, "w"); + if (refreshCounterFile == NULL) { + status = CELIX_FILE_IO_EXCEPTION; + } else { + fprintf(refreshCounterFile, "%ld", archive->refreshCount); + if (fclose(refreshCounterFile) == 0) { + } + } - framework_logIfError(archive->logger, status, NULL, "Could not set refresh count"); + framework_logIfError(logger, status, NULL, "Could not set refresh count"); return status; } @@ -488,7 +413,7 @@ celix_status_t bundleArchive_getLastModi *lastModified = archive->lastModified; } - framework_logIfError(archive->logger, status, NULL, "Could not get last modified"); + framework_logIfError(logger, status, NULL, "Could not get last modified"); return status; } @@ -499,82 +424,66 @@ celix_status_t bundleArchive_setLastModi archive->lastModified = lastModifiedTime; status = CELIX_DO_IF(status, bundleArchive_writeLastModified(archive)); - framework_logIfError(archive->logger, status, NULL, "Could not set last modified"); + framework_logIfError(logger, status, NULL, "Could not set last modified"); return status; } static celix_status_t bundleArchive_readLastModified(bundle_archive_pt archive, time_t *time) { - char timeStr[20]; - apr_file_t *lastModifiedFile; - char *lastModified = NULL; + FILE *lastModifiedFile; + char lastModified[512]; celix_status_t status = CELIX_SUCCESS; - apr_pool_t *subpool = NULL; - status = CELIX_DO_IF(status, apr_pool_create(&subpool, archive->mp)); + snprintf(lastModified, sizeof(lastModified), "%s/bundle.lastmodified", archive->archiveRoot); - lastModified = (char *)apr_palloc(subpool, strlen(archive->archiveRoot) + 21); - if (lastModified == NULL) { - status = CELIX_ENOMEM; - } else { - sprintf(lastModified, "%s/bundle.lastmodified", archive->archiveRoot); - - status = CELIX_DO_IF(status, apr_file_open(&lastModifiedFile, lastModified, APR_FOPEN_READ, APR_OS_DEFAULT, archive->mp)); - if (status == APR_SUCCESS) { - int year, month, day, hours, minutes, seconds; - struct tm tm_time; - - status = CELIX_DO_IF(status, apr_file_gets(timeStr, sizeof(timeStr), lastModifiedFile)); - status = CELIX_DO_IF(status, apr_file_close(lastModifiedFile)); - - if (status == CELIX_SUCCESS) { - sscanf(timeStr, "%d %d %d %d:%d:%d", &year, &month, &day, &hours, &minutes, &seconds); - tm_time.tm_year = year - 1900; - tm_time.tm_mon = month - 1; - tm_time.tm_mday = day; - tm_time.tm_hour = hours; - tm_time.tm_min = minutes; - tm_time.tm_sec = seconds; + lastModifiedFile = fopen(lastModified, "r"); + if (lastModifiedFile == NULL) { + status = CELIX_FILE_IO_EXCEPTION; + } else { + char timeStr[20]; + int year, month, day, hours, minutes, seconds; + struct tm tm_time; - *time = mktime(&tm_time); - } + if (fgets(timeStr, sizeof(timeStr), lastModifiedFile) == NULL) { + status = CELIX_FILE_IO_EXCEPTION; } + fclose(lastModifiedFile); + if (status == CELIX_SUCCESS) { + sscanf(timeStr, "%d %d %d %d:%d:%d", &year, &month, &day, &hours, &minutes, &seconds); + tm_time.tm_year = year - 1900; + tm_time.tm_mon = month - 1; + tm_time.tm_mday = day; + tm_time.tm_hour = hours; + tm_time.tm_min = minutes; + tm_time.tm_sec = seconds; - apr_pool_destroy(subpool); - } + *time = mktime(&tm_time); + } + } - framework_logIfError(archive->logger, status, NULL, "Could not read last modified"); + framework_logIfError(logger, status, NULL, "Could not read last modified"); return status; } static celix_status_t bundleArchive_writeLastModified(bundle_archive_pt archive) { celix_status_t status = CELIX_SUCCESS; - apr_file_t *lastModifiedFile; - char timeStr[20]; - char * lastModified = NULL; - apr_pool_t *subpool = NULL; - apr_status_t apr_status; - - apr_pool_create(&subpool, archive->mp); + FILE *lastModifiedFile; + char lastModified[512]; - lastModified = (char *)apr_palloc(subpool, strlen(archive->archiveRoot) + 21); - - - sprintf(lastModified, "%s/bundle.lastmodified", archive->archiveRoot); - strftime(timeStr, 20, "%Y %m %d %H:%M:%S", localtime(&archive->lastModified)); + snprintf(lastModified, sizeof(lastModified), "%s/bundle.lastmodified", archive->archiveRoot); + lastModifiedFile = fopen(lastModified, "w"); + if (lastModifiedFile == NULL) { + status = CELIX_FILE_IO_EXCEPTION; + } else { + char timeStr[20]; + strftime(timeStr, 20, "%Y %m %d %H:%M:%S", localtime(&archive->lastModified)); + fprintf(lastModifiedFile, "%s", timeStr); + fclose(lastModifiedFile); + } - apr_status = apr_file_open(&lastModifiedFile, lastModified, APR_FOPEN_CREATE|APR_FOPEN_WRITE, APR_OS_DEFAULT, archive->mp); - apr_pool_destroy(subpool); - if (apr_status != APR_SUCCESS) { - status = CELIX_FILE_IO_EXCEPTION; - } else { - apr_file_printf(lastModifiedFile, "%s", timeStr); - apr_file_close(lastModifiedFile); - } - - framework_logIfError(archive->logger, status, NULL, "Could not write last modified"); + framework_logIfError(logger, status, NULL, "Could not write last modified"); return status; } @@ -591,7 +500,7 @@ celix_status_t bundleArchive_revise(bund status = bundleArchive_reviseInternal(archive, false, revNr, location, inputFile); } - framework_logIfError(archive->logger, status, NULL, "Could not revise bundle archive"); + framework_logIfError(logger, status, NULL, "Could not revise bundle archive"); return status; } @@ -614,7 +523,7 @@ static celix_status_t bundleArchive_revi linkedList_addElement(archive->revisions, revision); } - framework_logIfError(archive->logger, status, NULL, "Could not revise bundle archive"); + framework_logIfError(logger, status, NULL, "Could not revise bundle archive"); return status; } @@ -632,25 +541,16 @@ static celix_status_t bundleArchive_crea status = bundleArchive_getRefreshCount(archive, &refreshCount); if (status == CELIX_SUCCESS) { bundle_revision_pt revision = NULL; - apr_pool_t *pool = NULL; sprintf(root, "%s/version%ld.%ld", archive->archiveRoot, refreshCount, revNr); - if (apr_pool_create(&pool, archive->mp) == APR_SUCCESS) { - status = bundleRevision_create(pool, archive->logger, root, location, revNr, inputFile, &revision); - - if (status != CELIX_SUCCESS) { - apr_pool_destroy(pool); - } - } else { - status = CELIX_ENOMEM; - } + status = bundleRevision_create(logger, root, location, revNr, inputFile, &revision); if (status == CELIX_SUCCESS) { *bundle_revision = revision; } } - framework_logIfError(archive->logger, status, NULL, "Could not create revision [location=%s,inputFile=%s]", location, inputFile); + framework_logIfError(logger, status, NULL, "Could not create revision [location=%s,inputFile=%s]", location, inputFile); return status; } @@ -662,16 +562,17 @@ static celix_status_t bundleArchive_getR status = bundleArchive_getRefreshCount(archive, &refreshCount); if (status == CELIX_SUCCESS) { - apr_file_t * revisionLocationFile; + FILE *revisionLocationFile; - sprintf(revisionLocation, "%s/version%ld.%ld/revision.location", archive->archiveRoot, refreshCount, revNr); + snprintf(revisionLocation, sizeof(revisionLocation), "%s/version%ld.%ld/revision.location", archive->archiveRoot, refreshCount, revNr); - if (apr_file_open(&revisionLocationFile, revisionLocation, APR_FOPEN_READ, APR_OS_DEFAULT, archive->mp) == APR_SUCCESS) { + revisionLocationFile = fopen(revisionLocation, "r"); + if (revisionLocationFile != NULL) { char location[256]; - apr_file_gets (location , sizeof(location) , revisionLocationFile); - apr_file_close(revisionLocationFile); + fgets(location , sizeof(location) , revisionLocationFile); + fclose(revisionLocationFile); - *revision_location = apr_pstrdup(archive->mp, location); + *revision_location = strdup(location); status = CELIX_SUCCESS; } else { // revision file not found @@ -681,7 +582,7 @@ static celix_status_t bundleArchive_getR } - framework_logIfError(archive->logger, status, NULL, "Failed to get revision location"); + framework_logIfError(logger, status, NULL, "Failed to get revision location"); return status; } @@ -694,19 +595,20 @@ static celix_status_t bundleArchive_setR status = bundleArchive_getRefreshCount(archive, &refreshCount); if (status == CELIX_SUCCESS) { - apr_file_t * revisionLocationFile; + FILE * revisionLocationFile; - sprintf(revisionLocation, "%s/version%ld.%ld/revision.location", archive->archiveRoot, refreshCount, revNr); + snprintf(revisionLocation, sizeof(revisionLocation), "%s/version%ld.%ld/revision.location", archive->archiveRoot, refreshCount, revNr); - if (apr_file_open(&revisionLocationFile, revisionLocation, APR_FOPEN_CREATE|APR_FOPEN_WRITE, APR_OS_DEFAULT, archive->mp) != APR_SUCCESS) { + revisionLocationFile = fopen(revisionLocation, "w"); + if (revisionLocationFile == NULL) { status = CELIX_FILE_IO_EXCEPTION; } else { - apr_file_printf(revisionLocationFile, "%s", location); - apr_file_close(revisionLocationFile); + fprintf(revisionLocationFile, "%s", location); + fclose(revisionLocationFile); } } - framework_logIfError(archive->logger, status, NULL, "Failed to set revision location"); + framework_logIfError(logger, status, NULL, "Failed to set revision location"); return status; } @@ -722,10 +624,10 @@ celix_status_t bundleArchive_closeAndDel status = bundleArchive_close(archive); if (status == CELIX_SUCCESS) { - status = bundleArchive_deleteTree(archive, archive->archiveRoot, archive->mp); + status = bundleArchive_deleteTree(archive, archive->archiveRoot); } - framework_logIfError(archive->logger, status, NULL, "Failed to close and delete archive"); + framework_logIfError(logger, status, NULL, "Failed to close and delete archive"); return status; } @@ -734,108 +636,88 @@ static celix_status_t bundleArchive_init celix_status_t status = CELIX_SUCCESS; if (archive->archiveRootDir == NULL) { - if (apr_dir_make(archive->archiveRoot, APR_UREAD|APR_UWRITE|APR_UEXECUTE, archive->mp) != APR_SUCCESS) { + if (mkdir(archive->archiveRoot, S_IRWXU) != 0) { status = CELIX_FILE_IO_EXCEPTION; } else { - apr_pool_t *spool = NULL; - - apr_pool_create(&spool, archive->mp); - apr_status_t apr_status = apr_dir_open(&archive->archiveRootDir, archive->archiveRoot, spool); - if (apr_status != APR_SUCCESS) { + archive->archiveRootDir = opendir(archive->archiveRoot); + if (archive->archiveRootDir == NULL) { status = CELIX_FILE_IO_EXCEPTION; } else { - apr_file_t *bundleIdFile; - apr_status_t apr_status; - char *bundleId = NULL; + FILE *bundleIdFile; + char bundleId[512]; - bundleId = (char *)apr_palloc(spool, sizeof(*bundleId) * (strlen(archive->archiveRoot) + 11)); - bundleId = apr_pstrcat(spool, archive->archiveRoot, "/bundle.id", NULL); + snprintf(bundleId, sizeof(bundleId), "%s/bundle.id", archive->archiveRoot); + bundleIdFile = fopen(bundleId, "w"); - apr_status = apr_file_open(&bundleIdFile, bundleId, APR_FOPEN_CREATE|APR_FOPEN_WRITE, APR_OS_DEFAULT, spool); - if (apr_status != APR_SUCCESS) { + if (bundleIdFile == NULL) { status = CELIX_FILE_IO_EXCEPTION; } else { - char * bundleLocation; - apr_file_t *bundleLocationFile; + FILE *bundleLocationFile; + char bundleLocation[512]; - apr_file_printf(bundleIdFile, "%ld", archive->id); + fprintf(bundleIdFile, "%ld", archive->id); // Ignore close status, let it fail if needed again - apr_file_close(bundleIdFile); + fclose(bundleIdFile); - bundleLocation = (char *) apr_palloc(spool, strlen(archive->archiveRoot) + 17); - bundleLocation = apr_pstrcat(spool, archive->archiveRoot, "/bundle.location", NULL); + snprintf(bundleLocation, sizeof(bundleLocation), "%s/bundle.location", archive->archiveRoot); + bundleLocationFile = fopen(bundleLocation, "w"); - apr_status = apr_file_open(&bundleLocationFile, bundleLocation, APR_FOPEN_CREATE|APR_FOPEN_WRITE, APR_OS_DEFAULT, spool); - if (apr_status != APR_SUCCESS) { + if (bundleLocationFile == NULL) { status = CELIX_FILE_IO_EXCEPTION; } else { - apr_file_printf(bundleLocationFile, "%s", archive->location); + fprintf(bundleLocationFile, "%s", archive->location); // Ignore close status, let it fail if needed again - apr_file_close(bundleLocationFile); + fclose(bundleLocationFile); status = bundleArchive_writeLastModified(archive); } } - status = apr_dir_close(archive->archiveRootDir); + closedir(archive->archiveRootDir); } - apr_pool_destroy(spool); } } - framework_logIfError(archive->logger, status, NULL, "Failed to initialize archive"); + framework_logIfError(logger, status, NULL, "Failed to initialize archive"); return status; } -static celix_status_t bundleArchive_deleteTree(bundle_archive_pt archive, char * directory, apr_pool_t *mp) { - apr_dir_t *dir; +static celix_status_t bundleArchive_deleteTree(bundle_archive_pt archive, char * directory) { + DIR *dir; celix_status_t status = CELIX_SUCCESS; - apr_status_t stat = apr_dir_open(&dir, directory, mp); - if (stat != APR_SUCCESS) { + dir = opendir(directory); + if (dir == NULL) { status = CELIX_FILE_IO_EXCEPTION; } else { - apr_finfo_t dp; - apr_status_t apr_status; - while ((apr_status = apr_dir_read(&dp, APR_FINFO_DIRENT|APR_FINFO_TYPE, dir)) == APR_SUCCESS) { - if ((strcmp((dp.name), ".") != 0) && (strcmp((dp.name), "..") != 0)) { - apr_pool_t *subpool; - char * subdir = NULL; - - apr_pool_create(&subpool, mp); - - subdir = (char *) apr_palloc(subpool, strlen(directory) + strlen(dp.name) + 2); - - strcpy(subdir, directory); - strcat(subdir, "/"); - strcat(subdir, dp.name); + struct dirent *dp; + while ((dp = readdir(dir)) != NULL) { + if ((strcmp((dp->d_name), ".") != 0) && (strcmp((dp->d_name), "..") != 0)) { + apr_pool_t *subpool; + char subdir[512]; + snprintf(subdir, sizeof(subdir), "%s/%s", directory, dp->d_name); - if (dp.filetype == APR_DIR) { - status = bundleArchive_deleteTree(archive, subdir, mp); - } else { - if (apr_file_remove(subdir, mp) != APR_SUCCESS) { - status = CELIX_FILE_IO_EXCEPTION; - free(subdir); - break; - } - } - apr_pool_destroy(subpool); - } - } - if (apr_status != APR_SUCCESS && apr_status != APR_ENOENT) { - status = CELIX_FILE_IO_EXCEPTION; + if (dp->d_type == DT_DIR) { + status = bundleArchive_deleteTree(archive, subdir); + } else { + if (rmdir(subdir) != 0) { + status = CELIX_FILE_IO_EXCEPTION; + break; + } + } + } } - apr_status = apr_dir_close(dir); - if (apr_status != APR_SUCCESS) { + + if (closedir(dir) != 0) { status = CELIX_FILE_IO_EXCEPTION; } if (status == CELIX_SUCCESS) { - if (apr_dir_remove(directory, mp) != APR_SUCCESS) { + if (rmdir(directory) != 0) { status = CELIX_FILE_IO_EXCEPTION; } } } - framework_logIfError(archive->logger, status, NULL, "Failed to delete tree"); + framework_logIfError(logger, status, NULL, "Failed to delete tree"); return status; } Modified: incubator/celix/trunk/framework/private/src/bundle_cache.c URL: http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/src/bundle_cache.c?rev=1600834&r1=1600833&r2=1600834&view=diff ============================================================================== --- incubator/celix/trunk/framework/private/src/bundle_cache.c (original) +++ incubator/celix/trunk/framework/private/src/bundle_cache.c Fri Jun 6 09:43:47 2014 @@ -23,42 +23,35 @@ * \author Apache Celix Project Team * \copyright Apache License, Version 2.0 */ -#ifndef _WIN32 -#include -#endif #include #include #include - -#include -#include +#include +#include +#include #include "bundle_cache_private.h" #include "bundle_archive.h" #include "constants.h" #include "celix_log.h" -static celix_status_t bundleCache_deleteTree(bundle_cache_pt cache, char * directory, apr_pool_t *mp); -static apr_status_t bundleCache_destroy(void *cacheP); +static celix_status_t bundleCache_deleteTree(bundle_cache_pt cache, char * directory); -celix_status_t bundleCache_create(properties_pt configurationMap, apr_pool_t *mp, framework_logger_pt logger, bundle_cache_pt *bundle_cache) { +celix_status_t bundleCache_create(properties_pt configurationMap, framework_logger_pt logger, bundle_cache_pt *bundle_cache) { celix_status_t status; bundle_cache_pt cache; - cache = (bundle_cache_pt) apr_palloc(mp, (sizeof(*cache))); + cache = (bundle_cache_pt) malloc((sizeof(*cache))); if (cache == NULL) { status = CELIX_ENOMEM; } else { - apr_pool_pre_cleanup_register(mp, cache, bundleCache_destroy); - - if (configurationMap != NULL && mp != NULL && *bundle_cache == NULL) { + if (configurationMap != NULL && *bundle_cache == NULL) { char * cacheDir = properties_get(configurationMap, (char *) OSGI_FRAMEWORK_FRAMEWORK_STORAGE); cache->configurationMap = configurationMap; if (cacheDir == NULL) { cacheDir = ".cache"; } cache->cacheDir = cacheDir; - cache->mp = mp; cache->logger = logger; *bundle_cache = cache; @@ -73,58 +66,50 @@ celix_status_t bundleCache_create(proper return status; } -apr_status_t bundleCache_destroy(void *cacheP) { - bundle_cache_pt cache = (bundle_cache_pt) cacheP; +celix_status_t bundleCache_destroy(bundle_cache_pt *cache) { return CELIX_SUCCESS; } celix_status_t bundleCache_delete(bundle_cache_pt cache) { - return bundleCache_deleteTree(cache, cache->cacheDir, cache->mp); + return bundleCache_deleteTree(cache, cache->cacheDir); } -celix_status_t bundleCache_getArchives(bundle_cache_pt cache, apr_pool_t *pool, array_list_pt *archives) { +celix_status_t bundleCache_getArchives(bundle_cache_pt cache, array_list_pt *archives) { celix_status_t status = CELIX_SUCCESS; - apr_dir_t *dir; - apr_status_t aprStatus = apr_dir_open(&dir, cache->cacheDir, pool); + DIR *dir; + dir = opendir(cache->cacheDir); - if (APR_STATUS_IS_ENOENT(aprStatus)) { - apr_dir_make(cache->cacheDir, APR_UREAD|APR_UWRITE|APR_UEXECUTE, cache->mp); - aprStatus = apr_dir_open(&dir, cache->cacheDir, pool); + if (dir == NULL && errno == ENOENT) { + mkdir(cache->cacheDir, S_IRWXU); + dir = opendir(cache->cacheDir); } - if (aprStatus == APR_SUCCESS) { + if (dir != NULL) { array_list_pt list = NULL; - apr_finfo_t dp; + struct dirent *dp; arrayList_create(&list); - while ((apr_dir_read(&dp, APR_FINFO_DIRENT|APR_FINFO_TYPE, dir)) == APR_SUCCESS) { - apr_pool_t *subpool = NULL; - char *archiveRoot = NULL; - - apr_pool_create(&subpool, pool); - archiveRoot = (char *)apr_palloc(subpool, strlen(cache->cacheDir) + strlen(dp.name) + 2); - - strcpy(archiveRoot, cache->cacheDir); - strcat(archiveRoot, "/"); - strcat(archiveRoot, dp.name); - - if (dp.filetype == APR_DIR - && (strcmp((dp.name), ".") != 0) - && (strcmp((dp.name), "..") != 0) - && (strncmp(dp.name, "bundle", 6) == 0) - && (strcmp(dp.name, "bundle0") != 0)) { + while ((dp = readdir(dir)) != NULL) { + char archiveRoot[512]; + + snprintf(archiveRoot, sizeof(archiveRoot), "%s/%s", cache->cacheDir, dp->d_name); + + if (dp->d_type == DT_DIR + && (strcmp((dp->d_name), ".") != 0) + && (strcmp((dp->d_name), "..") != 0) + && (strncmp(dp->d_name, "bundle", 6) == 0) + && (strcmp(dp->d_name, "bundle0") != 0)) { bundle_archive_pt archive = NULL; - status = bundleArchive_recreate(apr_pstrdup(cache->mp, archiveRoot), cache->mp, &archive); + status = bundleArchive_recreate(strdup(archiveRoot), &archive); if (status == CELIX_SUCCESS) { arrayList_add(list, archive); } } - apr_pool_destroy(subpool); } - apr_dir_close(dir); + closedir(dir); *archives = list; @@ -138,13 +123,13 @@ celix_status_t bundleCache_getArchives(b return status; } -celix_status_t bundleCache_createArchive(bundle_cache_pt cache, apr_pool_t *bundlePool, long id, char * location, char *inputFile, bundle_archive_pt *bundle_archive) { +celix_status_t bundleCache_createArchive(bundle_cache_pt cache, long id, char * location, char *inputFile, bundle_archive_pt *bundle_archive) { celix_status_t status = CELIX_SUCCESS; - char *archiveRoot = NULL; + char archiveRoot[512]; - if (cache && location && bundlePool) { - archiveRoot = apr_psprintf(bundlePool, "%s/bundle%ld", cache->cacheDir, id); - status = bundleArchive_create(cache->logger, archiveRoot, id, location, inputFile, bundlePool, bundle_archive); + if (cache && location) { + snprintf(archiveRoot, sizeof(archiveRoot), "%s/bundle%ld", cache->cacheDir, id); + status = bundleArchive_create(cache->logger, strdup(archiveRoot), id, location, inputFile, bundle_archive); } framework_logIfError(cache->logger, status, NULL, "Failed to create archive"); @@ -152,37 +137,42 @@ celix_status_t bundleCache_createArchive return status; } -static celix_status_t bundleCache_deleteTree(bundle_cache_pt cache, char * directory, apr_pool_t *mp) { +static celix_status_t bundleCache_deleteTree(bundle_cache_pt cache, char * directory) { + DIR *dir; celix_status_t status = CELIX_SUCCESS; - apr_dir_t *dir; - - if (directory && mp) { - if (apr_dir_open(&dir, directory, mp) == APR_SUCCESS) { - apr_finfo_t dp; - while ((apr_dir_read(&dp, APR_FINFO_DIRENT|APR_FINFO_TYPE, dir)) == APR_SUCCESS) { - if ((strcmp((dp.name), ".") != 0) && (strcmp((dp.name), "..") != 0)) { - char *subdir = (char *) apr_palloc(mp, sizeof(*subdir) * (strlen(directory) + strlen(dp.name) + 2)); - strcpy(subdir, directory); - strcat(subdir, "/"); - strcat(subdir, dp.name); - - if (dp.filetype == APR_DIR) { - bundleCache_deleteTree(cache, subdir, mp); - } else { - apr_file_remove(subdir, mp); + dir = opendir(directory); + if (dir == NULL) { + status = CELIX_FILE_IO_EXCEPTION; + } else { + struct dirent *dp; + while ((dp = readdir(dir)) != NULL) { + if ((strcmp((dp->d_name), ".") != 0) && (strcmp((dp->d_name), "..") != 0)) { + apr_pool_t *subpool; + char subdir[512]; + snprintf(subdir, sizeof(subdir), "%s/%s", directory, dp->d_name); + + if (dp->d_type == DT_DIR) { + status = bundleCache_deleteTree(cache, subdir); + } else { + if (rmdir(subdir) != 0) { + status = CELIX_FILE_IO_EXCEPTION; + break; } } } - apr_dir_close(dir); - apr_dir_remove(directory, mp); - } else { + } + + if (closedir(dir) != 0) { status = CELIX_FILE_IO_EXCEPTION; } - } else { - status = CELIX_ILLEGAL_ARGUMENT; - } + if (status == CELIX_SUCCESS) { + if (rmdir(directory) != 0) { + status = CELIX_FILE_IO_EXCEPTION; + } + } + } - framework_logIfError(cache->logger, status, NULL, "Failed to delete tree"); + framework_logIfError(logger, status, NULL, "Failed to delete tree"); - return status; + return status; } Modified: incubator/celix/trunk/framework/private/src/bundle_revision.c URL: http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/src/bundle_revision.c?rev=1600834&r1=1600833&r2=1600834&view=diff ============================================================================== --- incubator/celix/trunk/framework/private/src/bundle_revision.c (original) +++ incubator/celix/trunk/framework/private/src/bundle_revision.c Fri Jun 6 09:43:47 2014 @@ -26,28 +26,25 @@ #include #include #include -#include -#include +#include +#include +#include #include "bundle_revision_private.h" #include "archive.h" #include "celix_log.h" -static apr_status_t bundleRevision_destroy(void *revisionP); - -celix_status_t bundleRevision_create(apr_pool_t *pool, framework_logger_pt loggera, char *root, char *location, long revisionNr, char *inputFile, bundle_revision_pt *bundle_revision) { +celix_status_t bundleRevision_create(framework_logger_pt loggera, char *root, char *location, long revisionNr, char *inputFile, bundle_revision_pt *bundle_revision) { celix_status_t status = CELIX_SUCCESS; bundle_revision_pt revision = NULL; - revision = (bundle_revision_pt) apr_pcalloc(pool, sizeof(*revision)); + revision = (bundle_revision_pt) malloc(sizeof(*revision)); if (!revision) { status = CELIX_ENOMEM; } else { - apr_status_t apr_status; - apr_pool_pre_cleanup_register(pool, revision, bundleRevision_destroy); // TODO: This overwrites an existing revision, is this supposed to happen? - apr_status = apr_dir_make(root, APR_UREAD|APR_UWRITE|APR_UEXECUTE, pool); - if ((apr_status != APR_SUCCESS) && (!APR_STATUS_IS_EEXIST(apr_status))) { + int state = mkdir(root, S_IRWXU); + if ((state != 0) && (errno != EEXIST)) { status = CELIX_FILE_IO_EXCEPTION; } else { if (inputFile != NULL) { @@ -61,16 +58,17 @@ celix_status_t bundleRevision_create(apr status = CELIX_DO_IF(status, arrayList_create(&(revision->libraryHandles))); if (status == CELIX_SUCCESS) { revision->revisionNr = revisionNr; - revision->root = apr_pstrdup(pool, root); - revision->location = apr_pstrdup(pool, location); + revision->root = strdup(root); + revision->location = strdup(location); revision->logger = loggera; arrayList_create(&(revision->libraryHandles)); *bundle_revision = revision; - char *manifest = apr_pstrcat(pool, revision->root, "/META-INF/MANIFEST.MF", NULL); - status = manifest_createFromFile(pool, manifest, &revision->manifest); + char manifest[512]; + snprintf(manifest, sizeof(manifest), "%s/META-INF/MANIFEST.MF", revision->root); + status = manifest_createFromFile(manifest, &revision->manifest); } } } @@ -80,8 +78,7 @@ celix_status_t bundleRevision_create(apr return status; } -apr_status_t bundleRevision_destroy(void *revisionP) { - bundle_revision_pt revision = revisionP; +celix_status_t bundleRevision_destroy(celix_status_t *revision) { return CELIX_SUCCESS; } Modified: incubator/celix/trunk/framework/private/src/framework.c URL: http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/src/framework.c?rev=1600834&r1=1600833&r2=1600834&view=diff ============================================================================== --- incubator/celix/trunk/framework/private/src/framework.c (original) +++ incubator/celix/trunk/framework/private/src/framework.c Fri Jun 6 09:43:47 2014 @@ -31,7 +31,7 @@ #include "celixbool.h" #include #include -#include +//#include #include #ifdef _WIN32 #include @@ -175,15 +175,14 @@ celix_status_t framework_create(framewor *framework = (framework_pt) apr_palloc(memoryPool, sizeof(**framework)); if (*framework != NULL) { - apr_status_t apr_status = APR_SUCCESS; - apr_status = CELIX_DO_IF(apr_status, apr_pool_create(&(*framework)->mp, memoryPool)); - apr_status = CELIX_DO_IF(apr_status, celixThreadCondition_init(&(*framework)->condition, NULL)); - apr_status = CELIX_DO_IF(apr_status, celixThreadMutex_create(&(*framework)->mutex, NULL)); - apr_status = CELIX_DO_IF(apr_status, celixThreadMutex_create(&(*framework)->bundleLock, NULL)); - apr_status = CELIX_DO_IF(apr_status, celixThreadMutex_create(&(*framework)->installRequestLock, NULL)); - apr_status = CELIX_DO_IF(apr_status, celixThreadMutex_create(&(*framework)->dispatcherLock, NULL)); - apr_status = CELIX_DO_IF(apr_status, celixThreadCondition_init(&(*framework)->dispatcher, NULL)); - if (apr_status == APR_SUCCESS) { + status = CELIX_DO_IF(status, apr_pool_create(&(*framework)->mp, memoryPool)); + status = CELIX_DO_IF(status, celixThreadCondition_init(&(*framework)->condition, NULL)); + status = CELIX_DO_IF(status, celixThreadMutex_create(&(*framework)->mutex, NULL)); + status = CELIX_DO_IF(status, celixThreadMutex_create(&(*framework)->bundleLock, NULL)); + status = CELIX_DO_IF(status, celixThreadMutex_create(&(*framework)->installRequestLock, NULL)); + status = CELIX_DO_IF(status, celixThreadMutex_create(&(*framework)->dispatcherLock, NULL)); + status = CELIX_DO_IF(status, celixThreadCondition_init(&(*framework)->dispatcher, NULL)); + if (status == CELIX_SUCCESS) { (*framework)->bundle = NULL; (*framework)->installedBundleMap = NULL; (*framework)->registry = NULL; @@ -320,7 +319,7 @@ celix_status_t fw_init(framework_pt fram if (status == CELIX_SUCCESS) { if ((state == OSGI_FRAMEWORK_BUNDLE_INSTALLED) || (state == OSGI_FRAMEWORK_BUNDLE_RESOLVED)) { bundle_state_e state; - status = CELIX_DO_IF(status, bundleCache_create(framework->configurationMap, framework->mp, framework->logger, &framework->cache)); + status = CELIX_DO_IF(status, bundleCache_create(framework->configurationMap, framework->logger, &framework->cache)); status = CELIX_DO_IF(status, bundle_getState(framework->bundle, &state)); if (status == CELIX_SUCCESS) { if (state == OSGI_FRAMEWORK_BUNDLE_INSTALLED) { @@ -359,7 +358,7 @@ celix_status_t fw_init(framework_pt fram } } - status = CELIX_DO_IF(status, bundleCache_getArchives(framework->cache, framework->mp, &archives)); + status = CELIX_DO_IF(status, bundleCache_getArchives(framework->cache, &archives)); if (status == CELIX_SUCCESS) { unsigned int arcIdx; for (arcIdx = 0; arcIdx < arrayList_size(archives); arcIdx++) { @@ -401,7 +400,7 @@ celix_status_t fw_init(framework_pt fram status = CELIX_DO_IF(status, bundle_setContext(framework->bundle, context)); if (status == CELIX_SUCCESS) { activator_pt activator = NULL; - activator = (activator_pt) apr_palloc(framework->mp, (sizeof(*activator))); + activator = (activator_pt) malloc((sizeof(*activator))); if (activator != NULL) { bundle_context_pt context = NULL; void * userData = NULL; @@ -527,7 +526,7 @@ celix_status_t fw_installBundle2(framewo apr_pool_create(&bundlePool, framework->mp); if (archive == NULL) { id = framework_getNextBundleId(framework); - status = CELIX_DO_IF(status, bundleCache_createArchive(framework->cache, bundlePool, id, location, inputFile, &archive)); + status = CELIX_DO_IF(status, bundleCache_createArchive(framework->cache, id, location, inputFile, &archive)); } else { // purge revision // multiple revisions not yet implemented @@ -573,18 +572,20 @@ celix_status_t framework_getBundleEntry( status = CELIX_DO_IF(status, bundleArchive_getCurrentRevision(archive, &revision)); status = CELIX_DO_IF(status, bundleRevision_getRoot(revision, &root)); if (status == CELIX_SUCCESS) { - char *e = NULL; - apr_status_t ret; - apr_finfo_t info; if ((strlen(name) > 0) && (name[0] == '/')) { name++; } - apr_filepath_merge(&e, root, name, APR_FILEPATH_NOTABOVEROOT, framework->mp); - ret = apr_stat(&info, e, APR_FINFO_DIRENT|APR_FINFO_TYPE, framework->mp); - if (ret == APR_ENOENT) { + char e[strlen(name) + strlen(root) + 2]; + strcpy(e, root); + strcat(e, "/"); + strcat(e, name); + + struct stat info; + + if (stat(e, &info) == 0) { + (*entry) = strdup(e); + } else { (*entry) = NULL; - } else if (ret == APR_SUCCESS || ret == APR_INCOMPLETE) { - (*entry) = apr_pstrdup(pool, e); } } @@ -599,7 +600,6 @@ celix_status_t fw_startBundle(framework_ bundle_state_e state; module_pt module = NULL; activator_pt activator = NULL; - apr_pool_t *bundlePool = NULL; char *error = NULL; char *name = NULL; @@ -646,10 +646,9 @@ celix_status_t fw_startBundle(framework_ module_getSymbolicName(module, &name); status = CELIX_DO_IF(status, bundleContext_create(framework, framework->logger, bundle, &context)); status = CELIX_DO_IF(status, bundle_setContext(bundle, context)); - status = CELIX_DO_IF(status, bundle_getMemoryPool(bundle, &bundlePool)); if (status == CELIX_SUCCESS) { - activator = (activator_pt) apr_palloc(bundlePool, (sizeof(*activator))); + activator = (activator_pt) malloc((sizeof(*activator))); if (activator == NULL) { status = CELIX_ENOMEM; } else { @@ -1181,27 +1180,22 @@ celix_status_t fw_registerService(framew if (strcmp(serviceName, OSGI_FRAMEWORK_LISTENER_HOOK_SERVICE_NAME) == 0) { unsigned int i; array_list_pt infos = NULL; - apr_pool_t *subpool; service_reference_pt ref = NULL; listener_hook_service_pt hook; - apr_pool_t *pool = NULL; - status = CELIX_DO_IF(status, bundle_getMemoryPool(bundle, &pool)); status = CELIX_DO_IF(status, arrayList_create(&infos)); if (status == CELIX_SUCCESS) { celix_status_t subs = CELIX_SUCCESS; for (i = 0; i < arrayList_size(framework->serviceListeners); i++) { fw_service_listener_pt listener =(fw_service_listener_pt) arrayList_get(framework->serviceListeners, i); - apr_pool_t *pool = NULL; bundle_context_pt context = NULL; listener_hook_info_pt info = NULL; bundle_context_pt lContext = NULL; subs = CELIX_DO_IF(subs, bundle_getContext(bundle, &context)); - subs = CELIX_DO_IF(subs, bundleContext_getMemoryPool(context, &pool)); if (subs == CELIX_SUCCESS) { - info = (listener_hook_info_pt) apr_palloc(pool, sizeof(*info)); + info = (listener_hook_info_pt) malloc(sizeof(*info)); if (info == NULL) { subs = CELIX_ENOMEM; } @@ -1224,8 +1218,6 @@ celix_status_t fw_registerService(framew bool ungetResult = false; - status = CELIX_DO_IF(status, apr_pool_create(&subpool, pool)); - status = CELIX_DO_IF(status, serviceRegistry_createServiceReference(framework->registry, *registration, &ref)); status = CELIX_DO_IF(status, fw_getService(framework,framework->bundle, ref, (void **) &hook)); if (status == CELIX_SUCCESS) { @@ -1234,7 +1226,12 @@ celix_status_t fw_registerService(framew status = CELIX_DO_IF(status, serviceRegistry_ungetService(framework->registry, framework->bundle, ref, &ungetResult)); status = CELIX_DO_IF(status, serviceRegistry_removeReference(ref)); //NOTE: should this not be done in the serviceRegistry_ungetService?? - apr_pool_destroy(subpool); + int i = 0; + for (i = 0; i < arrayList_size(infos); i++) { + listener_hook_info_pt info = arrayList_get(infos, i); + free(info); + } + arrayList_destroy(infos); } } } @@ -1269,13 +1266,9 @@ celix_status_t fw_getServiceReferences(f filter_pt filter = NULL; unsigned int refIdx = 0; - apr_pool_t *pool = NULL; - status = CELIX_DO_IF(status, bundle_getMemoryPool(bundle, &pool)); - if (status == CELIX_SUCCESS) { - if (sfilter != NULL) { - filter = filter_create(sfilter); - } + if (sfilter != NULL) { + filter = filter_create(sfilter); } status = CELIX_DO_IF(status, serviceRegistry_getServiceReferences(framework->registry, serviceName, filter, references)); @@ -1326,24 +1319,13 @@ celix_status_t framework_ungetService(fr } void fw_addServiceListener(framework_pt framework, bundle_pt bundle, service_listener_pt listener, char * sfilter) { -// apr_pool_t *pool; -// apr_pool_t *bpool; -// bundle_context_pt context; -// bundle_getContext(bundle, &context); -// bundleContext_getMemoryPool(context, &bpool); -// apr_pool_create(&pool, bpool); array_list_pt listenerHooks = NULL; - apr_pool_t *subpool; listener_hook_info_pt info; unsigned int i; fw_service_listener_pt fwListener = (fw_service_listener_pt) malloc(sizeof(*fwListener)); - apr_pool_t *pool = NULL; - bundle_context_pt context = NULL; - bundle_getMemoryPool(bundle, &pool); - fwListener->bundle = bundle; if (sfilter != NULL) { filter_pt filter = filter_create(sfilter); @@ -1354,16 +1336,15 @@ void fw_addServiceListener(framework_pt fwListener->listener = listener; arrayList_add(framework->serviceListeners, fwListener); - apr_pool_create(&subpool, listener->pool); serviceRegistry_getListenerHooks(framework->registry, &listenerHooks); - info = (listener_hook_info_pt) apr_palloc(subpool, sizeof(*info)); + info = (listener_hook_info_pt) malloc(sizeof(*info)); bundle_getContext(bundle, &context); info->context = context; info->removed = false; - info->filter = sfilter == NULL ? NULL : apr_pstrdup(subpool, sfilter); + info->filter = sfilter == NULL ? NULL : strdup(sfilter); for (i = 0; i < arrayList_size(listenerHooks); i++) { service_reference_pt ref = (service_reference_pt) arrayList_get(listenerHooks, i); @@ -1379,26 +1360,25 @@ void fw_addServiceListener(framework_pt serviceRegistry_ungetService(framework->registry, framework->bundle, ref, &ungetResult); } + free(info); + arrayList_destroy(listenerHooks); - apr_pool_destroy(subpool); } void fw_removeServiceListener(framework_pt framework, bundle_pt bundle, service_listener_pt listener) { listener_hook_info_pt info = NULL; - apr_pool_t *pool; unsigned int i; fw_service_listener_pt element; bundle_context_pt context; bundle_getContext(bundle, &context); - bundleContext_getMemoryPool(context, &pool); for (i = 0; i < arrayList_size(framework->serviceListeners); i++) { element = (fw_service_listener_pt) arrayList_get(framework->serviceListeners, i); if (element->listener == listener && element->bundle == bundle) { bundle_context_pt lContext = NULL; - info = (listener_hook_info_pt) apr_palloc(pool, sizeof(*info)); + info = (listener_hook_info_pt) malloc(sizeof(*info)); bundle_getContext(element->bundle, &context); info->context = lContext; @@ -1444,12 +1424,9 @@ void fw_removeServiceListener(framework_ celix_status_t fw_addBundleListener(framework_pt framework, bundle_pt bundle, bundle_listener_pt listener) { celix_status_t status = CELIX_SUCCESS; - - apr_pool_t *pool = NULL; fw_bundle_listener_pt bundleListener = NULL; - apr_pool_create(&pool, framework->mp); - bundleListener = (fw_bundle_listener_pt) apr_palloc(pool, sizeof(*bundleListener)); + bundleListener = (fw_bundle_listener_pt) malloc(sizeof(*bundleListener)); if (!bundleListener) { status = CELIX_ENOMEM; } else { @@ -1474,6 +1451,10 @@ celix_status_t fw_removeBundleListener(f bundleListener = (fw_bundle_listener_pt) arrayList_get(framework->bundleListeners, i); if (bundleListener->listener == listener && bundleListener->bundle == bundle) { arrayList_remove(framework->bundleListeners, i); + + bundleListener->bundle = NULL; + bundleListener->listener = NULL; + free(bundleListener); } } @@ -1484,12 +1465,9 @@ celix_status_t fw_removeBundleListener(f celix_status_t fw_addFrameworkListener(framework_pt framework, bundle_pt bundle, framework_listener_pt listener) { celix_status_t status = CELIX_SUCCESS; - - apr_pool_t *pool = NULL; fw_framework_listener_pt frameworkListener = NULL; - apr_pool_create(&pool, framework->mp); - frameworkListener = (fw_framework_listener_pt) apr_palloc(pool, sizeof(*frameworkListener)); + frameworkListener = (fw_framework_listener_pt) malloc(sizeof(*frameworkListener)); if (!frameworkListener) { status = CELIX_ENOMEM; } else { @@ -1514,6 +1492,10 @@ celix_status_t fw_removeFrameworkListene frameworkListener = (fw_framework_listener_pt) arrayList_get(framework->frameworkListeners, i); if (frameworkListener->listener == listener && frameworkListener->bundle == bundle) { arrayList_remove(framework->frameworkListeners, i); + + frameworkListener->bundle = NULL; + frameworkListener->listener = NULL; + free(frameworkListener); } } @@ -1540,10 +1522,8 @@ void fw_serviceChanged(framework_pt fram if (matched) { service_reference_pt reference = NULL; service_event_pt event; - apr_pool_t *spool = NULL; - apr_pool_create(&spool, element->listener->pool); - event = (service_event_pt) apr_palloc(spool, sizeof(*event)); + event = (service_event_pt) malloc(sizeof(*event)); serviceRegistry_createServiceReference(framework->registry, registration, &reference); @@ -2292,15 +2272,15 @@ static celix_status_t framework_loadLibr celix_status_t status = CELIX_SUCCESS; char *last; - char *token = apr_strtok(libraries, ",", &last); + char *token = strtok_r(libraries, ",", &last); while (token != NULL) { void *handle = NULL; char lib[strlen(token)]; char *path; - char *pathToken = apr_strtok(token, ";", &path); + char *pathToken = strtok_r(token, ";", &path); strcpy(lib, pathToken); - pathToken = apr_strtok(NULL, ";", &path); + pathToken = strtok_r(NULL, ";", &path); while (pathToken != NULL) { if (strncmp(pathToken, "version", 7) == 0) { @@ -2312,7 +2292,7 @@ static celix_status_t framework_loadLibr strcat(lib, "-"); strcat(lib, version); } - pathToken = apr_strtok(NULL, ";", &path); + pathToken = strtok_r(NULL, ";", &path); } status = framework_loadLibrary(framework, lib, archive, &handle); @@ -2325,7 +2305,7 @@ static celix_status_t framework_loadLibr } } - token = apr_strtok(NULL, ",", &last); + token = strtok_r(NULL, ",", &last); } framework_logIfError(framework->logger, status, NULL, "Could not load all libraries"); Modified: incubator/celix/trunk/framework/private/src/manifest.c URL: http://svn.apache.org/viewvc/incubator/celix/trunk/framework/private/src/manifest.c?rev=1600834&r1=1600833&r2=1600834&view=diff ============================================================================== --- incubator/celix/trunk/framework/private/src/manifest.c (original) +++ incubator/celix/trunk/framework/private/src/manifest.c Fri Jun 6 09:43:47 2014 @@ -34,17 +34,14 @@ int fpeek(FILE *stream); celix_status_t manifest_readAttributes(manifest_pt manifest, properties_pt properties, FILE *file); -apr_status_t manifest_destroy(void *manifestP); -celix_status_t manifest_create(apr_pool_t *pool, manifest_pt *manifest) { +celix_status_t manifest_create(manifest_pt *manifest) { celix_status_t status = CELIX_SUCCESS; - *manifest = apr_palloc(pool, sizeof(**manifest)); + *manifest = malloc(sizeof(**manifest)); if (!*manifest) { status = CELIX_ENOMEM; } else { - apr_pool_pre_cleanup_register(pool, *manifest, manifest_destroy); - (*manifest)->pool = pool; (*manifest)->mainAttributes = properties_create(); (*manifest)->attributes = hashMap_create(utils_stringHash, NULL, utils_stringEquals, NULL); } @@ -54,8 +51,7 @@ celix_status_t manifest_create(apr_pool_ return status; } -apr_status_t manifest_destroy(void *manifestP) { - manifest_pt manifest = manifestP; +celix_status_t manifest_destroy(manifest_pt manifest) { if (manifest != NULL) { properties_destroy(manifest->mainAttributes); hashMap_destroy(manifest->attributes, false, false); @@ -66,10 +62,10 @@ apr_status_t manifest_destroy(void *mani return APR_SUCCESS; } -celix_status_t manifest_createFromFile(apr_pool_t *pool, char *filename, manifest_pt *manifest) { +celix_status_t manifest_createFromFile(char *filename, manifest_pt *manifest) { celix_status_t status = CELIX_SUCCESS; - status = manifest_create(pool, manifest); + status = manifest_create(manifest); if (status == CELIX_SUCCESS) { manifest_read(*manifest, filename); } @@ -99,14 +95,12 @@ celix_status_t manifest_read(manifest_pt if (file != NULL) { char lbuf[512]; int len; - char * name = NULL; + char name[512]; bool skipEmptyLines = true; - char * lastline = NULL; - apr_pool_t *subpool; + char lastline[512]; manifest_readAttributes(manifest, manifest->mainAttributes, file); - apr_pool_create(&subpool, manifest->pool); while (fgets(lbuf, sizeof(lbuf), file) != NULL ) { properties_pt attributes; @@ -123,14 +117,13 @@ celix_status_t manifest_read(manifest_pt } skipEmptyLines = false; - if (name == NULL) { + if (strlen(name) == 0) { if ((tolower(lbuf[0]) == 'n') && (tolower(lbuf[1]) == 'a') && (tolower(lbuf[2]) == 'm') && (tolower(lbuf[3]) == 'e') && (lbuf[4] == ':') && (lbuf[5] == ' ')) { - name = (char *) apr_palloc(subpool, (len + 1) - 6); name[0] = '\0'; - name = strncpy(name, lbuf+6, len - 6); + strncpy(name, lbuf+6, len - 6); name[len - 6] = '\0'; } else { printf("MANIFEST: Invalid manifest format\n"); @@ -139,15 +132,14 @@ celix_status_t manifest_read(manifest_pt if (fpeek(file) == ' ') { int newlen = len - 6; - lastline = (char *) apr_palloc(subpool, newlen + 1); lastline[0] = '\0'; - lastline = strncpy(lastline, lbuf+6, len - 6); + strncpy(lastline, lbuf+6, len - 6); lastline[newlen] = '\0'; continue; } } else { int newlen = strlen(lastline) + len; - char * buf = (char *) apr_palloc(subpool, newlen); + char buf[512]; buf[0] = '\0'; strcpy(buf, lastline); strncat(buf, lbuf+1, len - 1); @@ -155,16 +147,13 @@ celix_status_t manifest_read(manifest_pt if (fpeek(file) == ' ') { // lastline = realloc(lastline, strlen(buf) + 1); - lastline = (char *) apr_palloc(subpool, strlen(buf) + 1); lastline[0] = '\0'; - lastline = strcpy(lastline, buf); + strcpy(lastline, buf); continue; } - name = (char *) apr_palloc(subpool, strlen(buf) + 1); name[0] = '\0'; - name = strcpy(name, buf); + strcpy(name, buf); name[strlen(buf)] = '\0'; - lastline = NULL; } attributes = hashMap_get(manifest->attributes, name); @@ -174,10 +163,8 @@ celix_status_t manifest_read(manifest_pt } manifest_readAttributes(manifest, attributes, file); - name = NULL; skipEmptyLines = true; } - apr_pool_destroy(subpool); fclose(file); } else { status = CELIX_FILE_IO_EXCEPTION; @@ -205,14 +192,12 @@ int fpeek(FILE *stream) { } celix_status_t manifest_readAttributes(manifest_pt manifest, properties_pt properties, FILE *file) { - char *name = NULL; - char *value = NULL; - char *lastLine = NULL; + char name[512]; + char value[512]; + char lastLine[512]; char lbuf[512]; int len; - apr_pool_t *subpool; - apr_pool_create(&subpool, manifest->pool); while (fgets(lbuf, sizeof(lbuf), file ) != NULL ) { bool lineContinued = false; @@ -231,7 +216,7 @@ celix_status_t manifest_readAttributes(m if (lbuf[0] == ' ') { int newlen = strlen(lastLine) + len; - char * buf = (char *) apr_palloc(subpool, newlen); + char buf[512]; buf[0] = '\0'; // Line continued @@ -246,15 +231,12 @@ celix_status_t manifest_readAttributes(m if (fpeek(file) == ' ') { // lastLine = realloc(lastLine, strlen(buf) + 1); - lastLine = (char *) apr_palloc(subpool, strlen(buf) + 1); lastLine[0] = '\0'; - lastLine = strcpy(lastLine, buf); + strcpy(lastLine, buf); continue; } - value = (char *) apr_palloc(subpool, strlen(buf) + 1); value[0] = '\0'; - value = strcpy(value, buf); - lastLine = NULL; + strcpy(value, buf); } else { while (lbuf[i++] != ':') { if (i >= len) { @@ -266,29 +248,25 @@ celix_status_t manifest_readAttributes(m printf("MANIFEST: Invalid header\n"); return CELIX_FILE_IO_EXCEPTION; } - name = (char *) apr_palloc(subpool, (i + 1) - 2); name[0] = '\0'; - name = strncpy(name, lbuf, i - 2); + strncpy(name, lbuf, i - 2); name[i - 2] = '\0'; if (fpeek(file) == ' ') { int newlen = len - i; - lastLine = (char *) apr_palloc(subpool, newlen + 1); lastLine[0] = '\0'; - lastLine = strncpy(lastLine, lbuf+i, len -i); + strncpy(lastLine, lbuf+i, len -i); lastLine[newlen] = '\0'; continue; } - value = (char *) apr_palloc(subpool, (len + 1) - i); value[0] = '\0'; - value = strncpy(value, lbuf+i, len - i); + strncpy(value, lbuf+i, len - i); value[len - i] = '\0'; } - if ((properties_set(properties, name, value) != NULL) && (!lineContinued)) { + if ((properties_set(properties, strdup(name), strdup(value)) != NULL) && (!lineContinued)) { printf("Duplicate entry: %s", name); } } - apr_pool_destroy(subpool); return CELIX_SUCCESS; } Modified: incubator/celix/trunk/framework/public/include/bundle_archive.h URL: http://svn.apache.org/viewvc/incubator/celix/trunk/framework/public/include/bundle_archive.h?rev=1600834&r1=1600833&r2=1600834&view=diff ============================================================================== --- incubator/celix/trunk/framework/public/include/bundle_archive.h (original) +++ incubator/celix/trunk/framework/public/include/bundle_archive.h Fri Jun 6 09:43:47 2014 @@ -27,8 +27,6 @@ #ifndef BUNDLE_ARCHIVE_H_ #define BUNDLE_ARCHIVE_H_ -#include - #include "bundle_revision.h" #include "bundle_state.h" #include "celix_errno.h" @@ -38,9 +36,11 @@ typedef struct bundleArchive * bundle_archive_pt; -celix_status_t bundleArchive_create(framework_logger_pt logger, char * archiveRoot, long id, char * location, char *inputFile, apr_pool_t *mp, bundle_archive_pt *bundle_archive); -celix_status_t bundleArchive_createSystemBundleArchive(apr_pool_t *mp, framework_logger_pt logger, bundle_archive_pt *bundle_archive); -celix_status_t bundleArchive_recreate(char * archiveRoot, apr_pool_t *mp, bundle_archive_pt *bundle_archive); +celix_status_t bundleArchive_create(framework_logger_pt logger, char * archiveRoot, long id, char * location, char *inputFile, bundle_archive_pt *bundle_archive); +celix_status_t bundleArchive_createSystemBundleArchive(framework_logger_pt logger, bundle_archive_pt *bundle_archive); +celix_status_t bundleArchive_recreate(char * archiveRoot, bundle_archive_pt *bundle_archive); + +celix_status_t bundleArchive_destroy(bundle_archive_pt archive); FRAMEWORK_EXPORT celix_status_t bundleArchive_getId(bundle_archive_pt archive, long *id); FRAMEWORK_EXPORT celix_status_t bundleArchive_getLocation(bundle_archive_pt archive, char **location); Modified: incubator/celix/trunk/framework/public/include/bundle_revision.h URL: http://svn.apache.org/viewvc/incubator/celix/trunk/framework/public/include/bundle_revision.h?rev=1600834&r1=1600833&r2=1600834&view=diff ============================================================================== --- incubator/celix/trunk/framework/public/include/bundle_revision.h (original) +++ incubator/celix/trunk/framework/public/include/bundle_revision.h Fri Jun 6 09:43:47 2014 @@ -63,7 +63,7 @@ typedef struct bundleRevision * bundle_r * - CELIX_SUCCESS when no errors are encountered. * - CELIX_ENOMEM If allocating memory for bundle_revision failed. */ -celix_status_t bundleRevision_create(apr_pool_t *pool, framework_logger_pt logger, char *root, char *location, long revisionNr, char *inputFile, bundle_revision_pt *bundle_revision); +celix_status_t bundleRevision_create(framework_logger_pt logger, char *root, char *location, long revisionNr, char *inputFile, bundle_revision_pt *bundle_revision); /** * Retrieves the revision number of the given revision. Modified: incubator/celix/trunk/framework/public/include/manifest.h URL: http://svn.apache.org/viewvc/incubator/celix/trunk/framework/public/include/manifest.h?rev=1600834&r1=1600833&r2=1600834&view=diff ============================================================================== --- incubator/celix/trunk/framework/public/include/manifest.h (original) +++ incubator/celix/trunk/framework/public/include/manifest.h Fri Jun 6 09:43:47 2014 @@ -34,15 +34,14 @@ #include "framework_exports.h" struct manifest { - apr_pool_t *pool; properties_pt mainAttributes; hash_map_pt attributes; }; typedef struct manifest * manifest_pt; -FRAMEWORK_EXPORT celix_status_t manifest_create(apr_pool_t *pool, manifest_pt *manifest); -FRAMEWORK_EXPORT celix_status_t manifest_createFromFile(apr_pool_t *pool, char *filename, manifest_pt *manifest); +FRAMEWORK_EXPORT celix_status_t manifest_create(manifest_pt *manifest); +FRAMEWORK_EXPORT celix_status_t manifest_createFromFile(char *filename, manifest_pt *manifest); FRAMEWORK_EXPORT void manifest_clear(manifest_pt manifest); FRAMEWORK_EXPORT properties_pt manifest_getMainAttributes(manifest_pt manifest); Modified: incubator/celix/trunk/utils/private/src/celix_threads.c URL: http://svn.apache.org/viewvc/incubator/celix/trunk/utils/private/src/celix_threads.c?rev=1600834&r1=1600833&r2=1600834&view=diff ============================================================================== --- incubator/celix/trunk/utils/private/src/celix_threads.c (original) +++ incubator/celix/trunk/utils/private/src/celix_threads.c Fri Jun 6 09:43:47 2014 @@ -80,10 +80,10 @@ celix_status_t celixThreadMutexAttr_sett celix_status_t status = CELIX_SUCCESS; switch(type) { case CELIX_THREAD_MUTEX_NORMAL : - status =pthread_mutexattr_settype(attr, PTHREAD_MUTEX_NORMAL); + status = pthread_mutexattr_settype(attr, PTHREAD_MUTEX_NORMAL); break; case CELIX_THREAD_MUTEX_RECURSIVE : - status= pthread_mutexattr_settype(attr, PTHREAD_MUTEX_RECURSIVE); + status = pthread_mutexattr_settype(attr, PTHREAD_MUTEX_RECURSIVE); break; case CELIX_THREAD_MUTEX_ERRORCHECK : status = pthread_mutexattr_settype(attr, PTHREAD_MUTEX_ERRORCHECK); @@ -93,7 +93,9 @@ celix_status_t celixThreadMutexAttr_sett break; default: status = pthread_mutexattr_settype(attr, PTHREAD_MUTEX_DEFAULT); - } + break; + } + return status; } celix_status_t celixThreadCondition_init(celix_thread_cond_t *condition, celix_thread_condattr_t *attr) { Modified: incubator/celix/trunk/utils/public/include/celix_threads.h URL: http://svn.apache.org/viewvc/incubator/celix/trunk/utils/public/include/celix_threads.h?rev=1600834&r1=1600833&r2=1600834&view=diff ============================================================================== --- incubator/celix/trunk/utils/public/include/celix_threads.h (original) +++ incubator/celix/trunk/utils/public/include/celix_threads.h Fri Jun 6 09:43:47 2014 @@ -64,7 +64,6 @@ celix_status_t celixThreadMutexAttr_crea celix_status_t celixThreadMutexAttr_destroy(celix_thread_mutexattr_t *attr); celix_status_t celixThreadMutexAttr_settype(celix_thread_mutexattr_t *attr, int type); - typedef pthread_cond_t celix_thread_cond_t; typedef pthread_condattr_t celix_thread_condattr_t;