#ifndef __SFS_FATTR_H__
#define __SFS_FATTR_H__
/******************************************************************************/
/* */
/* X r d S f s F A t t r . h h */
/* */
/*(c) 2018 by the Board of Trustees of the Leland Stanford, Jr., University */
/*Produced by Andrew Hanushevsky for Stanford University under contract */
/* DE-AC02-76-SFO0515 with the Deprtment of Energy */
/* */
/* This file is part of the XRootD software suite. */
/* */
/* XRootD is free software: you can redistribute it and/or modify it under */
/* the terms of the GNU Lesser General Public License as published by the */
/* Free Software Foundation, either version 3 of the License, or (at your */
/* option) any later version. */
/* */
/* XRootD is distributed in the hope that it will be useful, but WITHOUT */
/* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */
/* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public */
/* License for more details. */
/* */
/* You should have received a copy of the GNU Lesser General Public License */
/* along with XRootD in a file called COPYING.LESSER (LGPL license) and file */
/* COPYING (GPL license). If not, see . */
/* */
/* The copyright holder's institutional names and contributor's names may not */
/* be used to endorse or promote products derived from this software without */
/* specific prior written permission of the institution or contributor. */
/******************************************************************************/
#include
//-----------------------------------------------------------------------------
//! This include file defines control strucres used to drive entended file
//! attribute handling via the fsctl() method.
//-----------------------------------------------------------------------------
/******************************************************************************/
/* X r d S f s F A I n f o */
/******************************************************************************/
struct XrdSfsFAInfo
{
char *Name; //!< Variable name
char *Value; //!< Variable value
int VLen; //!< Variable value length (aligned)
short NLen; //!< Length of name not including null byte
int faRC; //!< Action return code for this element
XrdSfsFAInfo() : Value(0), VLen(0), NLen(0), faRC(0) {}
~XrdSfsFAInfo() {}
};
/******************************************************************************/
/* X r d S f s F A B u f f */
/******************************************************************************/
struct XrdSfsFABuff
{
XrdSfsFABuff *next;
int dlen; //!< Data Length in subsequent buffer
char data[4]; //!< Start of data
};
/******************************************************************************/
/* X r d S f s F A C t l */
/******************************************************************************/
class XrdOucEnv;
struct XrdSfsFACtl
{
const char *path; //!< The file path to act on (logical)
const char *pcgi; //!< Opaque information (null if none)
const char *pfnP; //!< The file path to act on (physical)
XrdSfsFAInfo *info; //!< Pointer to attribute information
XrdOucEnv *envP; //!< Optional environmental information
XrdSfsFABuff *fabP; //!< -> Additional memory that was allocated
char nPfx[2]; //!< The namespace being used
unsigned short iNum; //!< Number of info entries
unsigned char rqst; //!< Type of file attribute request (see below)
unsigned char opts; //!< Request options (see below)
enum RQST:char {faDel = 0, faGet, faLst, faSet, faFence};
static const int accChk = 0x01; //!< Perform access check
static const int newAtr = 0x02; //!< For set the attribute must not exist
static const int xplode = 0x04; //!< Construct an info vec from faList
static const int retvsz = 0x0c; //!< Above plus return size of attr value
static const int retval = 0x1c; //!< Above plus return actual attr value
XrdSfsFACtl(const char *p, const char *opq, int anum)
: path(p), pcgi(opq), pfnP(0), info(0), envP(0),
fabP(0), iNum(anum), rqst(255), opts(0)
{nPfx[0] = 0; nPfx[1] = 0;}
~XrdSfsFACtl() {XrdSfsFABuff *dP, *nP = fabP;
while((dP = nP)) {nP = nP->next; free(dP);}
if (info) delete [] info;
}
};
#endif