From d6998ae7a48171ea78d4c60c22818672f36750de Mon Sep 17 00:00:00 2001 From: Bryan Ischo Date: Tue, 22 Jul 2008 03:36:29 +0000 Subject: * Minor updates, and complete documentation for libs3.h in progress --- src/acl.c | 4 ++-- src/bucket.c | 17 ++------------ src/error_parser.c | 7 ++---- src/general.c | 51 ++++++++++++++++++++---------------------- src/object.c | 13 ++++------- src/request.c | 5 +++-- src/request_context.c | 2 +- src/response_headers_handler.c | 8 ++++--- src/s3.c | 8 +++---- src/service.c | 9 +------- src/simplexml.c | 6 ++--- src/testsimplexml.c | 9 ++------ 12 files changed, 52 insertions(+), 87 deletions(-) (limited to 'src') diff --git a/src/acl.c b/src/acl.c index c276c63..f4dbf14 100644 --- a/src/acl.c +++ b/src/acl.c @@ -199,8 +199,8 @@ static S3Status generateAclXmlDocument(const char *ownerId, append("%s", ((grant->permission == S3PermissionRead) ? "READ" : (grant->permission == S3PermissionWrite) ? "WRITE" : - (grant->permission == S3PermissionReadAcp) ? "READ_ACP" : - (grant->permission == S3PermissionWriteAcp) ? "WRITE_ACP" : + (grant->permission == S3PermissionReadACP) ? "READ_ACP" : + (grant->permission == S3PermissionWriteACP) ? "WRITE_ACP" : "FULL_CONTROL")); } diff --git a/src/bucket.c b/src/bucket.c index cca60e0..3473fe8 100644 --- a/src/bucket.c +++ b/src/bucket.c @@ -115,13 +115,7 @@ void S3_test_bucket(S3Protocol protocol, S3UriStyle uriStyle, return; } - S3Status status = simplexml_initialize - (&(tbData->simpleXml), &testBucketXmlCallback, tbData); - if (status != S3StatusOK) { - free(tbData); - (*(handler->completeCallback))(status, 0, callbackData); - return; - } + simplexml_initialize(&(tbData->simpleXml), &testBucketXmlCallback, tbData); tbData->responsePropertiesCallback = handler->propertiesCallback; tbData->responseCompleteCallback = handler->completeCallback; @@ -686,14 +680,7 @@ void S3_list_bucket(const S3BucketContext *bucketContext, const char *prefix, return; } - S3Status status = simplexml_initialize - (&(lbData->simpleXml), &listBucketXmlCallback, lbData); - if (status != S3StatusOK) { - free(lbData); - (*(handler->responseHandler.completeCallback)) - (status, 0, callbackData); - return; - } + simplexml_initialize(&(lbData->simpleXml), &listBucketXmlCallback, lbData); lbData->responsePropertiesCallback = handler->responseHandler.propertiesCallback; diff --git a/src/error_parser.c b/src/error_parser.c index 825c1df..6281492 100644 --- a/src/error_parser.c +++ b/src/error_parser.c @@ -133,11 +133,8 @@ S3Status error_parser_add(ErrorParser *errorParser, char *buffer, int bufferSize) { if (!errorParser->errorXmlParserInitialized) { - S3Status status = simplexml_initialize - (&(errorParser->errorXmlParser), &errorXmlCallback, errorParser); - if (status != S3StatusOK) { - return status; - } + simplexml_initialize(&(errorParser->errorXmlParser), &errorXmlCallback, + errorParser); errorParser->errorXmlParserInitialized = 1; } diff --git a/src/general.c b/src/general.c index 39e5cd8..f7aa034 100644 --- a/src/general.c +++ b/src/general.c @@ -81,6 +81,23 @@ static void dynlock_destroy(struct CRYPTO_dynlock_value *pLock, } +static void deinitialize_locks() +{ + CRYPTO_set_dynlock_destroy_callback(NULL); + CRYPTO_set_dynlock_lock_callback(NULL); + CRYPTO_set_dynlock_create_callback(NULL); + CRYPTO_set_locking_callback(NULL); + CRYPTO_set_id_callback(NULL); + + int count = CRYPTO_num_locks(); + for (int i = 0; i < count; i++) { + (*mutexDestroyCallbackG)(pLocksG[i]); + } + + free(pLocksG); +} + + struct S3Mutex *mutex_create() { return (*mutexCreateCallbackG)(); @@ -138,7 +155,7 @@ S3Status S3_initialize(const char *userAgentInfo, S3Status status = request_api_initialize(userAgentInfo); if (status != S3StatusOK) { - S3_deinitialize(); + deinitialize_locks(); return status; } @@ -150,21 +167,9 @@ void S3_deinitialize() { request_api_deinitialize(); - CRYPTO_set_dynlock_destroy_callback(NULL); - CRYPTO_set_dynlock_lock_callback(NULL); - CRYPTO_set_dynlock_create_callback(NULL); - CRYPTO_set_locking_callback(NULL); - CRYPTO_set_id_callback(NULL); - - int count = CRYPTO_num_locks(); - for (int i = 0; i < count; i++) { - (*mutexDestroyCallbackG)(pLocksG[i]); - } - - free(pLocksG); + deinitialize_locks(); } - const char *S3_get_status_name(S3Status status) { switch (status) { @@ -184,9 +189,7 @@ const char *S3_get_status_name(S3Status status) handlecase(InvalidBucketNameTooShort); handlecase(InvalidBucketNameDotQuadNotation); handlecase(QueryParamsTooLong); - handlecase(FailedToCreateRequest); handlecase(FailedToInitializeRequest); - handlecase(FailedToCreateRequestContext); handlecase(MetaDataHeadersTooLong); handlecase(BadMetaData); handlecase(BadContentType); @@ -504,10 +507,10 @@ static S3Status convertAclXmlCallback(const char *elementPath, grant->permission = S3PermissionWrite; } else if (!strcmp(caData->permission, "READ_ACP")) { - grant->permission = S3PermissionReadAcp; + grant->permission = S3PermissionReadACP; } else if (!strcmp(caData->permission, "WRITE_ACP")) { - grant->permission = S3PermissionWriteAcp; + grant->permission = S3PermissionWriteACP; } else if (!strcmp(caData->permission, "FULL_CONTROL")) { grant->permission = S3PermissionFullControl; @@ -552,19 +555,13 @@ S3Status S3_convert_acl(char *aclXml, char *ownerId, char *ownerDisplayName, // Use a simplexml parser SimpleXml simpleXml; + simplexml_initialize(&simpleXml, &convertAclXmlCallback, &data); - S3Status status; - - if (((status = simplexml_initialize - (&simpleXml, &convertAclXmlCallback, &data)) != S3StatusOK) || - ((status = simplexml_add - (&simpleXml, aclXml, strlen(aclXml))) != S3StatusOK)) { - return status; - } + S3Status status = simplexml_add(&simpleXml, aclXml, strlen(aclXml)); simplexml_deinitialize(&simpleXml); - return S3StatusOK; + return status; } diff --git a/src/object.c b/src/object.c index 41bd373..3302810 100644 --- a/src/object.c +++ b/src/object.c @@ -175,13 +175,7 @@ void S3_copy_object(const S3BucketContext *bucketContext, const char *key, return; } - S3Status status = simplexml_initialize - (&(data->simpleXml), ©ObjectXmlCallback, data); - if (status != S3StatusOK) { - free(data); - (*(handler->completeCallback))(status, 0, callbackData); - return; - } + simplexml_initialize(&(data->simpleXml), ©ObjectXmlCallback, data); data->responsePropertiesCallback = handler->propertiesCallback; data->responseCompleteCallback = handler->completeCallback; @@ -202,8 +196,9 @@ void S3_copy_object(const S3BucketContext *bucketContext, const char *key, HttpRequestTypeCOPY, // httpRequestType bucketContext->protocol, // protocol bucketContext->uriStyle, // uriStyle - destinationBucket, // bucketName - destinationKey, // key + destinationBucket ? destinationBucket : + bucketContext->bucketName, // bucketName + destinationKey ? destinationKey : key, // key 0, // queryParams 0, // subResource bucketContext->accessKeyId, // accessKeyId diff --git a/src/request.c b/src/request.c index 1ca6122..6cf7050 100644 --- a/src/request.c +++ b/src/request.c @@ -279,7 +279,8 @@ static S3Status compose_amz_headers(const RequestParams *params, const S3NameValue *property = &(properties->metaData[i]); char headerName[S3_MAX_METADATA_SIZE - sizeof(": v")]; int l = snprintf(headerName, sizeof(headerName), - "x-amz-meta-%s", property->name); + S3_METADATA_HEADER_NAME_PREFIX "%s", + property->name); char *hn = headerName; header_name_tolower_copy(hn, l); // Copy in the value @@ -925,7 +926,7 @@ static S3Status request_get(const RequestParams *params, // Else there wasn't one available in the request stack, so create one else { if (!(request = (Request *) malloc(sizeof(Request)))) { - return S3StatusFailedToCreateRequest; + return S3StatusOutOfMemory; } if (!(request->curl = curl_easy_init())) { free(request); diff --git a/src/request_context.c b/src/request_context.c index aced7a7..e482ad4 100644 --- a/src/request_context.c +++ b/src/request_context.c @@ -35,7 +35,7 @@ S3Status S3_create_request_context(S3RequestContext **requestContextReturn) (S3RequestContext *) malloc(sizeof(S3RequestContext)); if (!*requestContextReturn) { - return S3StatusFailedToCreateRequestContext; + return S3StatusOutOfMemory; } if (!((*requestContextReturn)->curlm = curl_multi_init())) { diff --git a/src/response_headers_handler.c b/src/response_headers_handler.c index 5051123..67ae08f 100644 --- a/src/response_headers_handler.c +++ b/src/response_headers_handler.c @@ -147,15 +147,17 @@ void response_headers_handler_add(ResponseHeadersHandler *handler, string_multibuffer_add(handler->responsePropertyStrings, c, valuelen, fit); } - else if (!strncmp(header, "x-amz-meta-", sizeof("x-amz-meta-") - 1)) { + else if (!strncmp(header, S3_METADATA_HEADER_NAME_PREFIX, + sizeof(S3_METADATA_HEADER_NAME_PREFIX) - 1)) { // Make sure there is room for another x-amz-meta header if (handler->responseProperties.metaDataCount == sizeof(handler->responseMetaData)) { return; } // Copy the name in - char *metaName = &(header[sizeof("x-amz-meta-") - 1]); - int metaNameLen = (namelen - (sizeof("x-amz-meta-") - 1)); + char *metaName = &(header[sizeof(S3_METADATA_HEADER_NAME_PREFIX) - 1]); + int metaNameLen = + (namelen - (sizeof(S3_METADATA_HEADER_NAME_PREFIX) - 1)); char *copiedName = string_multibuffer_current(handler->responseMetaDataStrings); string_multibuffer_add(handler->responseMetaDataStrings, metaName, diff --git a/src/s3.c b/src/s3.c index 958511a..e58c789 100644 --- a/src/s3.c +++ b/src/s3.c @@ -547,7 +547,7 @@ static int convert_simple_acl(char *aclXml, char *ownerId, SKIP_SPACE(1); if (!strncmp(aclXml, "READ_ACP", sizeof("READ_ACP") - 1)) { - grant->permission = S3PermissionReadAcp; + grant->permission = S3PermissionReadACP; aclXml += (sizeof("READ_ACP") - 1); } else if (!strncmp(aclXml, "READ", sizeof("READ") - 1)) { @@ -555,7 +555,7 @@ static int convert_simple_acl(char *aclXml, char *ownerId, aclXml += (sizeof("READ") - 1); } else if (!strncmp(aclXml, "WRITE_ACP", sizeof("WRITE_ACP") - 1)) { - grant->permission = S3PermissionWriteAcp; + grant->permission = S3PermissionWriteACP; aclXml += (sizeof("WRITE_ACP") - 1); } else if (!strncmp(aclXml, "WRITE", sizeof("WRITE") - 1)) { @@ -2028,10 +2028,10 @@ void get_acl(int argc, char **argv, int optind) case S3PermissionWrite: perm = "WRITE"; break; - case S3PermissionReadAcp: + case S3PermissionReadACP: perm = "READ_ACP"; break; - case S3PermissionWriteAcp: + case S3PermissionWriteACP: perm = "WRITE_ACP"; break; default: diff --git a/src/service.c b/src/service.c index 1e97d96..d539c75 100644 --- a/src/service.c +++ b/src/service.c @@ -139,14 +139,7 @@ void S3_list_service(S3Protocol protocol, const char *accessKeyId, return; } - S3Status status = simplexml_initialize - (&(data->simpleXml), &xmlCallback, data); - if (status != S3StatusOK) { - free(data); - (*(handler->responseHandler.completeCallback)) - (status, 0, callbackData); - return; - } + simplexml_initialize(&(data->simpleXml), &xmlCallback, data); data->responsePropertiesCallback = handler->responseHandler.propertiesCallback; diff --git a/src/simplexml.c b/src/simplexml.c index db88df6..5542d3b 100644 --- a/src/simplexml.c +++ b/src/simplexml.c @@ -161,16 +161,14 @@ static struct _xmlSAXHandler saxHandlerG = 0 // xmlStructuredErrorFunc serror; }; -S3Status simplexml_initialize(SimpleXml *simpleXml, - SimpleXmlCallback *callback, void *callbackData) +void simplexml_initialize(SimpleXml *simpleXml, + SimpleXmlCallback *callback, void *callbackData) { simpleXml->callback = callback; simpleXml->callbackData = callbackData; simpleXml->elementPathLen = 0; simpleXml->status = S3StatusOK; simpleXml->xmlParser = 0; - - return S3StatusOK; } diff --git a/src/testsimplexml.c b/src/testsimplexml.c index dd779df..9cb1367 100644 --- a/src/testsimplexml.c +++ b/src/testsimplexml.c @@ -56,12 +56,7 @@ int main(int argc, char **argv) SimpleXml simpleXml; - S3Status status = simplexml_initialize(&simpleXml, &simpleXmlCallback, 0); - - if (status != S3StatusOK) { - fprintf(stderr, "ERROR: Failed to initialize: %d\n", status); - return -1; - } + simplexml_initialize(&simpleXml, &simpleXmlCallback, 0); // Read chunks of 10K from stdin, and then feed them in random chunks // to simplexml_add @@ -72,7 +67,7 @@ int main(int argc, char **argv) char *buf = inbuf; while (amt_read) { int amt = (rand() % amt_read) + 1; - status = simplexml_add(&simpleXml, buf, amt); + S3Status status = simplexml_add(&simpleXml, buf, amt); if (status != S3StatusOK) { fprintf(stderr, "ERROR: Parse failure: %d\n", status); simplexml_deinitialize(&simpleXml); -- cgit v1.2.1