int s3FileStat (rsComm_t *rsComm, char *filename, struct stat *statbuf) { int status; char key[MAX_NAME_LEN], myBucket[MAX_NAME_LEN]; s3Stat_t s3Stat; int len; len = strlen (filename); bzero (statbuf, sizeof (struct stat)); if (filename[len - 1] == '/') { /* a directory */ statbuf->st_mode = S_IFDIR; return 0; } if ((status = parseS3Path (filename, myBucket, key)) < 0) return status; status = list_bucket (myBucket, key, NULL, NULL, 1, 1, &s3Stat); if (status == 0) { statbuf->st_mode = S_IFREG; statbuf->st_nlink = 1; statbuf->st_uid = getuid (); statbuf->st_gid = getgid (); statbuf->st_atime = statbuf->st_mtime = statbuf->st_ctime = s3Stat.lastModified; statbuf->st_size = s3Stat.size; } return (status); }
void cb_get_metadata(void *handle) { dpl_async_task_t *atask = (dpl_async_task_t *) handle; dpl_dict_var_t *metadatum = NULL; if (DPL_SUCCESS != atask->ret) { fprintf(stderr, "error getting metadata: %s (%d)\n", dpl_status_str(atask->ret), atask->ret); exit(1); } fprintf(stderr, "checking metadata\n"); metadatum = dpl_dict_get(atask->u.head.metadata, "foo"); if (NULL == metadatum) { fprintf(stderr, "missing metadatum\n"); exit(1); } assert(metadatum->val->type == DPL_VALUE_STRING); if (strcmp(dpl_sbuf_get_str(metadatum->val->string), "bar2")) { fprintf(stderr, "bad value in metadatum\n"); exit(1); } metadatum = dpl_dict_get(atask->u.head.metadata, "foo2"); if (NULL == metadatum) { fprintf(stderr, "missing metadatum\n"); exit(1); } assert(metadatum->val->type == DPL_VALUE_STRING); if (strcmp(dpl_sbuf_get_str(metadatum->val->string), "qux")) { fprintf(stderr, "bad value in metadatum\n"); exit(1); } dpl_async_task_free(atask); list_bucket(); }