(file) Return to MSFT_DirectoryContainsFile.c CVS log (file) (dir) Up to [OMI] / omi / samples / Providers / FileSystem

File: [OMI] / omi / samples / Providers / FileSystem / MSFT_DirectoryContainsFile.c (download)
Revision: 1.3, Mon Apr 20 17:19:59 2015 UTC (9 years, 2 months ago) by krisbash
Branch: MAIN
CVS Tags: OMI_1_0_8_2, OMI_1_0_8_1, HEAD
Changes since 1.2: +14 -9 lines
OMI 1.0.8-1

/* @migen@ */
#include <MI.h>
#include <pal/dir.h>
#include "util.h"
#include "MSFT_DirectoryContainsFile.h"
#include "MSFT_DataFile.h"

#define T MI_T

MI_Boolean ConstructDirectory(
    MSFT_Directory* self,
    const MI_Char* name,
    MI_Context* context);

void MI_CALL MSFT_DirectoryContainsFile_Load(
    MSFT_DirectoryContainsFile_Self** self,
    MI_Module_Self* selfModule,
    MI_Context* context)
{
    *self = NULL;
    MI_PostResult(context, MI_RESULT_OK);
}

void MI_CALL MSFT_DirectoryContainsFile_Unload(
    MSFT_DirectoryContainsFile_Self* self,
    MI_Context* context)
{
    MI_PostResult(context, MI_RESULT_OK);
}

void MI_CALL MSFT_DirectoryContainsFile_EnumerateInstances(
    MSFT_DirectoryContainsFile_Self* self,
    MI_Context* context,
    const MI_Char* nameSpace,
    const MI_Char* className,
    const MI_PropertySet* propertySet,
    MI_Boolean keysOnly,
    const MI_Filter* filter)
{
    MI_PostResult(context, MI_RESULT_NOT_SUPPORTED);
}

void MI_CALL MSFT_DirectoryContainsFile_GetInstance(
    MSFT_DirectoryContainsFile_Self* self,
    MI_Context* context,
    const MI_Char* nameSpace,
    const MI_Char* className,
    const MSFT_DirectoryContainsFile* instanceName,
    const MI_PropertySet* propertySet)
{
    MI_PostResult(context, MI_RESULT_NOT_SUPPORTED);
}

void MI_CALL MSFT_DirectoryContainsFile_CreateInstance(
    MSFT_DirectoryContainsFile_Self* self,
    MI_Context* context,
    const MI_Char* nameSpace,
    const MI_Char* className,
    const MSFT_DirectoryContainsFile* newInstance)
{
    MI_PostResult(context, MI_RESULT_NOT_SUPPORTED);
}

void MI_CALL MSFT_DirectoryContainsFile_ModifyInstance(
    MSFT_DirectoryContainsFile_Self* self,
    MI_Context* context,
    const MI_Char* nameSpace,
    const MI_Char* className,
    const MSFT_DirectoryContainsFile* modifiedInstance,
    const MI_PropertySet* propertySet)
{
    MI_PostResult(context, MI_RESULT_NOT_SUPPORTED);
}

void MI_CALL MSFT_DirectoryContainsFile_DeleteInstance(
    MSFT_DirectoryContainsFile_Self* self,
    MI_Context* context,
    const MI_Char* nameSpace,
    const MI_Char* className,
    const MSFT_DirectoryContainsFile* instanceName)
{
    MI_PostResult(context, MI_RESULT_NOT_SUPPORTED);
}

void MI_CALL MSFT_DirectoryContainsFile_AssociatorInstancesGroupComponent(
    MSFT_DirectoryContainsFile_Self* self,
    MI_Context* context,
    const MI_Char* nameSpace,
    const MI_Char* className,
    const MSFT_Directory* instanceName,
    const MI_Char* resultClass,
    const MI_PropertySet* propertySet,
    MI_Boolean keysOnly,
    const MI_Filter* filter)
{
    Dir* dir;
    char buf[PAL_MAX_PATH_SIZE];

    /* Try to open this directory */

    dir = Dir_Open(TToStr(buf, MI_COUNT(buf), instanceName->Name.value));

    if (!dir)
    {
        MI_PostResult(context, MI_RESULT_NOT_FOUND);
        return;
    }

    /* Visit associated files and directories */

    for (;;)
    {
        DirEnt* ent;
        MI_Char path[PAL_MAX_PATH_SIZE];
        MI_Char zbuf[PAL_MAX_PATH_SIZE];

        ent = Dir_Read(dir);

        if (!ent)
            break;

        if (strcmp(ent->name, "..") == 0 || strcmp(ent->name, ".") == 0)
            continue;

        /* Form full path to directory or file */

        Tcslcpy(path, instanceName->Name.value, PAL_MAX_PATH_SIZE);

        if (Tcscmp(instanceName->Name.value, T("/")) != 0)
            Tcslcat(path, T("/"), PAL_MAX_PATH_SIZE);

        Tcslcat(path, StrToT(zbuf, MI_COUNT(buf), ent->name), PAL_MAX_PATH_SIZE);

        if (ent->isDir)
        {
            if (!resultClass || Tcscasecmp(resultClass, T("MSFT_Directory")) == 0)
            {
                MSFT_Directory inst;

                if (ConstructDirectory(&inst, path, context))
                {
                    MSFT_Directory_Post(&inst, context);
                }
            }
        }
        else
        {
            if (!resultClass || Tcscasecmp(resultClass, T("MSFT_DataFile")) == 0)
            {
                MSFT_DataFile inst;
                MSFT_DataFile_Construct(&inst, context);
                MSFT_DataFile_Set_Name(&inst, path);
                MSFT_DataFile_Post(&inst, context);
            }
        }
    }

    /* Close this directory */

    Dir_Close(dir);

    MI_PostResult(context, MI_RESULT_OK);
}

void MI_CALL MSFT_DirectoryContainsFile_AssociatorInstancesPartComponent(
    MSFT_DirectoryContainsFile_Self* self,
    MI_Context* context,
    const MI_Char* nameSpace,
    const MI_Char* className,
    const MSFT_LogicalFile* instanceName,
    const MI_Char* resultClass,
    const MI_PropertySet* propertySet,
    MI_Boolean keysOnly,
    const MI_Filter* filter)
{
    MI_PostResult(context, MI_RESULT_NOT_SUPPORTED);
}

void MI_CALL MSFT_DirectoryContainsFile_ReferenceInstancesGroupComponent(
    MSFT_DirectoryContainsFile_Self* self,
    MI_Context* context,
    const MI_Char* nameSpace,
    const MI_Char* className,
    const MSFT_Directory* instanceName,
    const MI_PropertySet* propertySet,
    MI_Boolean keysOnly,
    const MI_Filter* filter)
{
    MI_PostResult(context, MI_RESULT_NOT_SUPPORTED);
}

void MI_CALL MSFT_DirectoryContainsFile_ReferenceInstancesPartComponent(
    MSFT_DirectoryContainsFile_Self* self,
    MI_Context* context,
    const MI_Char* nameSpace,
    const MI_Char* className,
    const MSFT_LogicalFile* instanceName,
    const MI_PropertySet* propertySet,
    MI_Boolean keysOnly,
    const MI_Filter* filter)
{
    MI_PostResult(context, MI_RESULT_NOT_SUPPORTED);
}


ViewCVS 0.9.2