From 8c5ec3079c5916a191e1e3a4243f58927926dfb9 Mon Sep 17 00:00:00 2001 From: Manuel Reis Date: Tue, 11 Feb 2025 15:03:45 +0100 Subject: [PATCH 1/2] Fix compilation --- libnczarr/zmap_s3sdk.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libnczarr/zmap_s3sdk.c b/libnczarr/zmap_s3sdk.c index 9324b4721e..aa9c36dd89 100644 --- a/libnczarr/zmap_s3sdk.c +++ b/libnczarr/zmap_s3sdk.c @@ -348,11 +348,11 @@ zs3keyexists(NCZMAP* map, const char* key) if((stat = maketruekey(z3map->s3.rootkey,key,&truekey))) goto done; - switch (stat = NC_s3sdkinfo(z3map->s3client,z3map->s3.bucket,truekey,lenp,&z3map->errmsg)) { + switch (stat = NC_s3sdkinfo(z3map->s3client,z3map->s3.bucket,truekey,NULL,&z3map->errmsg)) { case NC_NOERR: break; case NC_EEMPTY: stat = NC_ENOOBJECT; /* fall thru */ case NC_ENOOBJECT: - if(lenp) *lenp = 0; + goto done; default: goto done; From 0b70c148a91f6aeb48919c2273b58f7ccfcbfa1f Mon Sep 17 00:00:00 2001 From: Manuel Reis Date: Tue, 11 Feb 2025 15:03:52 +0100 Subject: [PATCH 2/2] Fix build with aws sdk --- include/ncrc.h | 1 - libdispatch/ncs3sdk_aws.cpp | 62 +++++++++++++++++++++++++++---------- 2 files changed, 45 insertions(+), 18 deletions(-) diff --git a/include/ncrc.h b/include/ncrc.h index a49b06d065..bb5a095ea1 100644 --- a/include/ncrc.h +++ b/include/ncrc.h @@ -46,7 +46,6 @@ typedef struct NCRCinfo { /* Opaque structures */ struct NCS3INFO; -enum NCS3SVC; #if defined(__cplusplus) extern "C" { diff --git a/libdispatch/ncs3sdk_aws.cpp b/libdispatch/ncs3sdk_aws.cpp index e1bceb7835..4e6d8c6481 100644 --- a/libdispatch/ncs3sdk_aws.cpp +++ b/libdispatch/ncs3sdk_aws.cpp @@ -548,26 +548,12 @@ NC_s3sdkwriteobject(void* s3client0, const char* bucket, const char* pathkey, s } EXTERNL int -NC_s3sdkclose(void* s3client0, NCS3INFO* info, int deleteit, char** errmsgp) +NC_s3sdkclose(void* s3client0, char** errmsgp) { int stat = NC_NOERR; - - NCTRACE(11,"info=%s rootkey=%s deleteit=%d",dumps3info(info),deleteit); - + NCTRACE(11, ""); AWSS3CLIENT s3client = (AWSS3CLIENT)s3client0; - if(deleteit) { - /* Delete the root key; ok it if does not exist */ - switch (stat = NC_s3sdkdeletekey(s3client0,info->bucket,info->rootkey,errmsgp)) { - case NC_NOERR: break; - case NC_EEMPTY: case NC_ENOTFOUND: stat = NC_NOERR; break; - default: break; - } - } -#ifdef TRANSFER - delete s3client; -#else delete s3client; -#endif return NCUNTRACE(stat); } @@ -654,11 +640,23 @@ Return a list of full keys of legal objects immediately below a specified key. Not necessarily sorted. */ EXTERNL int -NC_s3sdkgetkeys(void* s3client0, const char* bucket, const char* prefixkey0, size_t* nkeysp, char*** keysp, char** errmsgp) +NC_s3sdklist(void* s3client0, const char* bucket, const char* prefixkey0, size_t* nkeysp, char*** keysp, char** errmsgp) { return getkeys(s3client0, bucket, prefixkey0, "/", nkeysp, keysp, errmsgp); } +/* +Return a list of full keys of legal objects below a specified key. +Not necessarily sorted. +Essentially same as getkeys, but with no delimiter. +*/ +EXTERNL int +NC_s3sdklistall(void* s3client0, const char* bucket, const char* prefixkey0, size_t* nkeysp, char*** keysp, char** errmsgp) +{ + NCTRACE(11,"bucket=%s prefixkey0=%s",bucket,prefixkey0); + return NCUNTRACE(getkeys(s3client0, bucket, prefixkey0, NULL, nkeysp, keysp, errmsgp)); +} + /* Return a list of full keys of legal objects immediately below a specified key. Not necessarily sorted. @@ -669,6 +667,36 @@ NC_s3sdksearch(void* s3client0, const char* bucket, const char* prefixkey0, size return getkeys(s3client0, bucket, prefixkey0, NULL, nkeysp, keysp, errmsgp); } +EXTERNL int +NC_s3sdktruncate(void* s3client0, const char* bucket, const char* prefix, char** errmsgp) +{ + int stat = NC_NOERR; + char* errmsg = NULL; + size_t nkeys; + char** keys = NULL; + AWSS3CLIENT* s3client = (AWSS3CLIENT*)s3client0; + + NCTRACE(11,"bucket=%s prefix=%s",bucket,prefix); + + if((stat = NC_s3sdklistall(s3client0,bucket,prefix,&nkeys,&keys,&errmsg))) goto done; + + if(nkeys > 0 && keys != NULL) { + size_t i; + /* Sort the list -- shortest first */ + NC_sortenvv(nkeys,keys); + for(i=0;i