IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 21461


Ignore:
Timestamp:
Feb 12, 2009, 4:45:47 PM (17 years ago)
Author:
jhoblitt
Message:

add nebGetXattr(), nebListXattr(), nebRemoveXattr()

Location:
trunk/Nebulous/nebclient
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Nebulous/nebclient/src/nebclient.c

    r20988 r21461  
    44 * Copyright (C) 2005  Joshua Hoblitt
    55 *
    6  * $Id: nebclient.c,v 1.56 2008-12-14 22:48:35 eugene Exp $
     6 * $Id: nebclient.c,v 1.57 2009-02-13 02:45:47 jhoblitt Exp $
    77 */
    88
     
    336336bool nebSetXattr(nebServer *server, const char *key, const char *name, const char *value, nebCR flag)
    337337{
    338 
    339338    REQUIRE_SERVER;
    340339
     
    363362    if (!response) {
    364363        nebSetErr(server, "can not set xattr");
     364        return false;
     365    }
     366
     367    return true;
     368}
     369
     370
     371char *nebGetXattr(nebServer *server, const char *key, const char *name)
     372{
     373    REQUIRE_SERVER;
     374
     375    if (!key) {
     376        nebSetErr(server, "parameter 'key' may not be NULL");
     377        return false;
     378    }
     379    if (!name) {
     380        nebSetErr(server, "parameter 'name' may not be NULL");
     381        return false;
     382    }
     383
     384    struct ns1__getxattr_USCOREobjectResponse response;
     385    if (soap_call_ns1__getxattr_USCOREobject(server->soap, server->endpoint,
     386        NULL, (char *)key, (char *)name, (char **)&response) != SOAP_OK) {
     387        nebSetServerErr(server);
     388        return false;
     389    }
     390
     391    if (!(char *)response.result) {
     392        nebSetErr(server, "server returned no result");
     393        return NULL;
     394    }
     395
     396    char *value = xmalloc(strlen((char *)response.result) + 1);
     397    strcpy(value, (char *)response.result);
     398
     399    return value;
     400}
     401
     402
     403int nebListXattr(nebServer *server, const char *key, char ***xattrs)
     404{
     405    REQUIRE_SERVER;
     406
     407    if (!key) {
     408        nebSetErr(server, "parameter 'key' may not be NULL");
     409        return false;
     410    }
     411
     412    struct ns1__listxattr_USCOREobjectResponse response;
     413    if (soap_call_ns1__listxattr_USCOREobject(server->soap, server->endpoint,
     414        NULL, (char *)key, &response) != SOAP_OK) {
     415        nebSetServerErr(server);
     416        return false;
     417    }
     418
     419    int resultElements = response.result->__size;
     420
     421    if (xattrs) {
     422        char **resultArray = response.result->__ptr;
     423        *xattrs = xmalloc(resultElements * sizeof(char *));
     424        if (resultElements) {
     425            for (int i = 0; i < resultElements; i++) {
     426                *xattrs[i] = xmalloc(strlen(resultArray[i]) + 1);
     427                strcpy(*xattrs[i], resultArray[i]);
     428            }
     429
     430        }
     431    }
     432
     433    return resultElements;
     434}
     435
     436
     437bool nebRemoveXattr(nebServer *server, const char *key, const char *name)
     438{
     439    REQUIRE_SERVER;
     440
     441    if (!key) {
     442        nebSetErr(server, "parameter 'key' may not be NULL");
     443        return false;
     444    }
     445    if (!name) {
     446        nebSetErr(server, "parameter 'name' may not be NULL");
     447        return false;
     448    }
     449
     450    int response;
     451    if (soap_call_ns1__removexattr_USCOREobject(server->soap, server->endpoint,
     452        NULL, (char *)key, (char *)name, &response) != SOAP_OK) {
     453        nebSetServerErr(server);
     454        return false;
     455    }
     456
     457    if (!response) {
     458        nebSetErr(server, "can not remove xattr");
    365459        return false;
    366460    }
  • trunk/Nebulous/nebclient/src/nebclient.h

    r20988 r21461  
    44 * Copyright (C) 2005  Joshua Hoblitt
    55 *
    6  * $Id: nebclient.h,v 1.38 2008-12-14 22:48:35 eugene Exp $
     6 * $Id: nebclient.h,v 1.39 2009-02-13 02:45:47 jhoblitt Exp $
    77 */
    88
     
    155155);
    156156
     157/** Get an Xattr on a storage object
     158 *
     159 * @return true on success
     160 */
     161char *nebGetXattr(
     162    nebServer *server,                  ///< nebServer object
     163    const char *key,                    ///< storage object key (name)
     164    const char *name                    ///< xattr name
     165);
     166
     167/** Get an Xattr on a storage object
     168 *
     169 * @return true on success
     170 */
     171int nebListXattr(
     172    nebServer *server,                  ///< nebServer object
     173    const char *key,                    ///< storage object key (name)
     174    char ***xattrs                      ///< array of xattr names
     175);
     176
     177/** Remove an Xattr from a storage object
     178 *
     179 * @return true on success
     180 */
     181bool nebRemoveXattr(
     182    nebServer *server,                  ///< nebServer object
     183    const char *key,                    ///< storage object key (name)
     184    const char *name                    ///< xattr name
     185);
     186
    157187/** Lists all instances of a storage object
    158188 *
  • trunk/Nebulous/nebclient/tests/tests.c

    r20209 r21461  
    22#include <stdlib.h>
    33#include <unistd.h>
     4#include <string.h>
    45#include <stdbool.h>
    56
     
    1920    char            *key = "foobarbaz";
    2021
    21     plan_tests(24);
     22    plan_tests(28);
    2223
    2324    if (getenv("NEB_SERVER")) {
     
    9697    neb_ok(server, nebSetXattr(server, key, "user.copies", "2",  NEB_CREATE), "set user.copies xattr");
    9798
     99    char *copies = nebGetXattr(server, key, "user.copies");
     100    neb_ok(server, strcmp(copies, "2") == 0, "get user.copies xattr");
     101    char **xattrs = NULL;
     102    int n_xattrs = nebListXattr(server, key, &xattrs);
     103    printf("# %s\n\n", xattrs[0]);
     104    neb_ok(server, n_xattrs == 1, "count of xattrs");
     105    neb_ok(server, strcmp(xattrs[0], "user.copies") == 0, "user.copies xattr exists");
     106    neb_ok(server, nebRemoveXattr(server, key, "user.copies"), "remove user.copies xattr");
     107
    98108    {
    99109        nebObjectInstances *locations = NULL;
Note: See TracChangeset for help on using the changeset viewer.