Ejemplo n.º 1
0
    public void Open(Pfm.MarshallerOpenOp op)
    {
        string[] nameParts         = op.NameParts();
        int      createFileType    = op.CreateFileType();
        long     newExistingOpenId = op.NewExistingOpenId();
        int      perr    = 0;
        bool     existed = false;

        Pfm.OpenAttribs openAttribs  = new Pfm.OpenAttribs();
        long            parentFileId = 0;
        string          endName      = null;

        if (nameParts.Length == 0)
        {
            if (folderOpenId == 0)
            {
                folderOpenId = newExistingOpenId;
            }
            existed                      = true;
            openAttribs.openId           = folderOpenId;
            openAttribs.openSequence     = 1;
            openAttribs.accessLevel      = Pfm.accessLevelReadData;
            openAttribs.attribs.fileType = Pfm.fileTypeFolder;
            openAttribs.attribs.fileId   = helloRootId;
        }
        else if (nameParts.Length == 1)
        {
            if (nameParts[0].ToLowerInvariant() != helloFileName.ToLowerInvariant())
            {
                perr = Pfm.errorNotFound;
            }
            else
            {
                if (fileOpenId == 0)
                {
                    fileOpenId = newExistingOpenId;
                }
                existed                      = true;
                openAttribs.openId           = fileOpenId;
                openAttribs.openSequence     = 1;
                openAttribs.accessLevel      = Pfm.accessLevelReadData;
                openAttribs.attribs.fileType = Pfm.fileTypeFile;
                openAttribs.attribs.fileId   = helloFileId;
                openAttribs.attribs.fileSize = helloFileData.Length;
                endName                      = helloFileName;
            }
        }
        else
        {
            perr = Pfm.errorParentNotFound;
        }
        if (perr == Pfm.errorNotFound && createFileType != 0)
        {
            perr = Pfm.errorAccessDenied;
        }

        op.Complete(perr, existed, openAttribs, parentFileId, endName, 0, null, 0, null);
    }
Ejemplo n.º 2
0
    // Pfm.FormatterDispatch.Open
    // Open existing file, or create new file.
    public void Open(Pfm.MarshallerOpenOp op)
    {
        string[] nameParts         = op.NameParts();
        int      createFileType    = op.CreateFileType();
        int      createFileFlags   = op.CreateFileFlags();
        long     writeTime         = op.WriteTime();
        long     newCreateOpenId   = op.NewCreateOpenId();
        long     newExistingOpenId = op.NewExistingOpenId();
        int      perr;
        bool     existed = false;

        Pfm.OpenAttribs openAttribs  = new Pfm.OpenAttribs();
        long            parentFileId = 0;
        string          endName      = null;

        File parent;
        File file;

        perr = FileFindName(nameParts, out parent, out file, out endName);
        if (perr == 0)
        {
            existed = true;
            if (parent != null)
            {
                parentFileId = parent.fileId;
            }
            if (file.openId == 0)
            {
                file.openId = newExistingOpenId;
            }
            FileOpened(file, ref openAttribs);
        }
        else if (perr == Pfm.errorNotFound && createFileType != Pfm.fileTypeNone)
        {
            file = new File(createFileType, createFileFlags, writeTime);
            FileNameAdd(parent, writeTime, endName, file);
            file.openId = newCreateOpenId;
            FileOpened(file, ref openAttribs);
            parentFileId = parent.fileId;
            perr         = 0;
        }

        op.Complete(perr, existed, openAttribs, parentFileId, endName, 0, null, 0, null);
    }