cws_directory.c

来自「Pegasus is an open-source implementation」· C语言 代码 · 共 245 行

C
245
字号
//%2006//////////////////////////////////////////////////////////////////////////// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;// IBM Corp.; EMC Corporation, The Open Group.// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;// EMC Corporation; VERITAS Software Corporation; The Open Group.// Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;// EMC Corporation; Symantec Corporation; The Open Group.//// Permission is hereby granted, free of charge, to any person obtaining a copy// of this software and associated documentation files (the "Software"), to// deal in the Software without restriction, including without limitation the// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or// sell copies of the Software, and to permit persons to whom the Software is// furnished to do so, subject to the following conditions:// // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.////==============================================================================////%/////////////////////////////////////////////////////////////////////////////#include <stdio.h>#include <string.h>#include "CWS_FileUtils.h"#include "../CWS_Util/cwsutil.h"#include <Pegasus/Provider/CMPI/cmpidt.h>#include <Pegasus/Provider/CMPI/cmpift.h>#include <Pegasus/Provider/CMPI/cmpimacs.h>#define LOCALCLASSNAME "CWS_Directory"static const CMPIBroker * _broker;/* ------------------------------------------------------------------ * * Instance MI Cleanup * ------------------------------------------------------------------ */CMPIStatus CWS_DirectoryCleanup( CMPIInstanceMI * mi, 				 const CMPIContext * ctx, CMPIBoolean term) {  CMReturn(CMPI_RC_OK);}/* ------------------------------------------------------------------ * * Instance MI Functions * ------------------------------------------------------------------ */CMPIStatus CWS_DirectoryEnumInstanceNames( CMPIInstanceMI * mi, 					   const CMPIContext * ctx, 					   const CMPIResult * rslt, 					   const CMPIObjectPath * ref) {   CMPIObjectPath *op;  CMPIStatus      st = {CMPI_RC_OK,NULL};  void           *enumhdl;  CWS_FILE        filebuf;  if (!silentMode()) fprintf(stderr,"--- CWS_DirectoryEnumInstanceNames() \n");  enumhdl = CWS_Begin_Enum(CWS_FILEROOT,CWS_TYPE_DIR);  if (enumhdl == NULL) {    CMSetStatusWithChars(_broker, &st, CMPI_RC_ERR_FAILED,			 "Could not begin file enumeration");    return st;  } else {    while (CWS_Next_Enum(enumhdl,&filebuf)) {      /* build object path from file buffer */      op = makePath(_broker,		    LOCALCLASSNAME,		    CMGetCharPtr(CMGetNameSpace(ref,NULL)),		    &filebuf);      if (CMIsNullObject(op)) {	CMSetStatusWithChars(_broker, &st, CMPI_RC_ERR_FAILED,			     "Could not construct object path");	break;      }      CMReturnObjectPath(rslt,op);    }    CMReturnDone(rslt);    CWS_End_Enum(enumhdl);  }  return st;}CMPIStatus CWS_DirectoryEnumInstances( CMPIInstanceMI * mi, 				       const CMPIContext * ctx, 				       const CMPIResult * rslt, 				       const CMPIObjectPath * ref, 				       const char ** properties) {  CMPIInstance   *in;  CMPIStatus      st = {CMPI_RC_OK,NULL};  void           *enumhdl;  CWS_FILE        filebuf;  if (!silentMode()) fprintf(stderr,"--- CWS_DirectoryEnumInstances() \n");  enumhdl = CWS_Begin_Enum(CWS_FILEROOT,CWS_TYPE_DIR);  if (enumhdl == NULL) {    CMSetStatusWithChars(_broker, &st, CMPI_RC_ERR_FAILED,			 "Could not begin file enumeration");    return st;  } else {    while (CWS_Next_Enum(enumhdl,&filebuf)) {      /* build instance from file buffer */      in = makeInstance(_broker,			LOCALCLASSNAME,			CMGetCharPtr(CMGetNameSpace(ref,NULL)),			&filebuf);      if (CMIsNullObject(in)) {	CMSetStatusWithChars(_broker, &st, CMPI_RC_ERR_FAILED,			     "Could not construct instance");	break;      }      CMReturnInstance(rslt,in);    }    CMReturnDone(rslt);    CWS_End_Enum(enumhdl);  }  return st;}CMPIStatus CWS_DirectoryGetInstance( CMPIInstanceMI * mi, 				     const CMPIContext * ctx, 				     const CMPIResult * rslt, 				     const CMPIObjectPath * cop, 				     const char ** properties) {  CMPIInstance *in = NULL;  CMPIStatus    st = {CMPI_RC_OK,NULL};  CMPIData      nd = CMGetKey(cop,"Name",&st);  CWS_FILE      filebuf;  if (!silentMode()) fprintf(stderr,"--- CWS_DirectoryGetInstance() \n");  if (st.rc == CMPI_RC_OK &&      nd.type == CMPI_string &&      CWS_Get_File(CMGetCharPtr(nd.value.string),&filebuf))    in = makeInstance(_broker,		      LOCALCLASSNAME,		      CMGetCharPtr(CMGetNameSpace(cop,NULL)),		      &filebuf);  if (CMIsNullObject(in)) {    CMSetStatusWithChars(_broker, &st, CMPI_RC_ERR_FAILED,			 "Could not find or construct instance");  } else {    CMReturnInstance(rslt,in);    CMReturnDone(rslt);  }  return st;}CMPIStatus CWS_DirectoryCreateInstance( CMPIInstanceMI * mi, 					const CMPIContext * ctx, 					const CMPIResult * rslt, 					const CMPIObjectPath * cop, 					const CMPIInstance * ci) {  CMPIStatus st = {CMPI_RC_OK,NULL};  CWS_FILE   filebuf;  CMPIData   data;  if (!silentMode()) fprintf(stderr,"--- CWS_DirectoryCreateInstance() \n");  data = CMGetProperty(ci,"Name",NULL);  if (!CMGetCharPtr(data.value.string) ||      strncmp(CMGetCharPtr(data.value.string),CWS_FILEROOT,	      strlen(CWS_FILEROOT))) {    CMSetStatusWithChars(_broker,&st,CMPI_RC_ERR_FAILED,			 "Invalid path name");  } else if (!makeFileBuf(ci,&filebuf) || !CWS_Create_Directory(&filebuf)) {    CMSetStatusWithChars(_broker,&st,CMPI_RC_ERR_FAILED,			 "Could not create instance");  }  return st;}CMPIStatus CWS_DirectoryModifyInstance( CMPIInstanceMI * mi, 				     const CMPIContext * ctx, 				     const CMPIResult * rslt, 				     const CMPIObjectPath * cop,				     const CMPIInstance * ci, 				     const char **properties) {  CMPIStatus st = {CMPI_RC_OK,NULL};  CWS_FILE   filebuf;  if (!silentMode()) fprintf(stderr,"--- CWS_DirectorySetInstance() \n");  if (!makeFileBuf(ci,&filebuf) || !CWS_Update_File(&filebuf))    CMSetStatusWithChars(_broker,&st,CMPI_RC_ERR_FAILED,			 "Could not update instance");  return st;}CMPIStatus CWS_DirectoryDeleteInstance( CMPIInstanceMI * mi, 					const CMPIContext * ctx, 					const CMPIResult * rslt, 					const CMPIObjectPath * cop) {  CMReturn( CMPI_RC_ERR_NOT_SUPPORTED );}CMPIStatus CWS_DirectoryExecQuery( CMPIInstanceMI * mi, 				   const CMPIContext * ctx, 				   const CMPIResult * rslt, 				   const CMPIObjectPath * cop, 				   const char * lang, 				   const char * query) {  CMReturn( CMPI_RC_ERR_NOT_SUPPORTED );}/* ------------------------------------------------------------------ * * Instance MI Factory * * NOTE: This is an example using the convenience macros. This is OK *       as long as the MI has no special requirements, i.e. to store *       data between calls. * ------------------------------------------------------------------ */CMInstanceMIStub( CWS_Directory,		  CWS_DirectoryProvider,		  _broker,		  CMNoHook)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?