#ifndef __XRDSYSFATTR_HH__ #define __XRDSYSFATTR_HH__ /******************************************************************************/ /* */ /* X r d S y s F A t t r . h h */ /* */ /* (c) 2010 by the Board of Trustees of the Leland Stanford, Jr., University */ /* All Rights Reserved */ /* Produced by Andrew Hanushevsky for Stanford University under contract */ /* DE-AC02-76-SFO0515 with the Department 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 "XrdSys/XrdSysXAttr.hh" //------------------------------------------------------------------------------ //! This class provides an internal interface to handle extended file attributes //! either via a default implementation or an external plugin. //------------------------------------------------------------------------------ class XrdSysFAttr : public XrdSysXAttr { public: //------------------------------------------------------------------------------ //! Xat points to the plugin to be used for all operations. The methods //! inherited from XrdSysXAttr cannot be directly invoked. Instead, //! use XrdSysFAttr::Xat->. All static //! methods here, however, can be directly invoked. //------------------------------------------------------------------------------ static XrdSysXAttr *Xat; //------------------------------------------------------------------------------ //! Establish a plugin that is to replace the builtin extended attribute //! processing methods. //! //! @param xaP -> To an instance of an XrdSysXAttr object that is to replace //! the builtin object that processes extended attributes; //------------------------------------------------------------------------------ static void SetPlugin(XrdSysXAttr *xaP); //------------------------------------------------------------------------------ //! Constructor & Destructor //------------------------------------------------------------------------------ XrdSysFAttr() {} ~XrdSysFAttr() {} //------------------------------------------------------------------------------ //! The following methods are inherited from the base class as private methods. //------------------------------------------------------------------------------ private: int Del(const char *Aname, const char *Path, int fd=-1); void Free(AList *aPL); int Get(const char *Aname, void *Aval, int Avsz, const char *Path, int fd=-1); int List(AList **aPL, const char *Path, int fd=-1, int getSz=0); int Set(const char *Aname, const void *Aval, int Avsz, const char *Path, int fd=-1, int isNew=0); int Diagnose(const char *Op, const char *Var, const char *Path, int ec); AList *getEnt(const char *Path, int fd, const char *Aname, AList *aP, int *msP); }; #endif