The Pedigree Project  0.1
FatSymlink.cc
1 /*
2  * Copyright (c) 2008-2014, Pedigree Developers
3  *
4  * Please see the CONTRIB file in the root of the source tree for a full
5  * list of contributors.
6  *
7  * Permission to use, copy, modify, and distribute this software for any
8  * purpose with or without fee is hereby granted, provided that the above
9  * copyright notice and this permission notice appear in all copies.
10  *
11  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18  */
19 
20 #include "FatSymlink.h"
21 #include "FatFilesystem.h"
22 #include "modules/system/vfs/File.h"
23 
24 FatSymlink::FatSymlink(
25  String name, Time::Timestamp accessedTime, Time::Timestamp modifiedTime,
26  Time::Timestamp creationTime, uintptr_t inode, class Filesystem *pFs,
27  size_t size, uint32_t dirClus, uint32_t dirOffset, File *pParent)
28  : Symlink(
29  name, accessedTime, modifiedTime, creationTime, inode, pFs, size,
30  pParent),
31  m_DirClus(dirClus), m_DirOffset(dirOffset)
32 {
33  // No permissions on FAT - set all to RWX.
34  setPermissions(
35  FILE_UR | FILE_UW | FILE_UX | FILE_GR | FILE_GW | FILE_GX | FILE_OR |
36  FILE_OW | FILE_OX);
37 }
38 
40  uint64_t location, uint64_t size, uintptr_t buffer, bool bCanBlock)
41 {
42  FatFilesystem *pFs = static_cast<FatFilesystem *>(m_pFilesystem);
43  return pFs->read(this, location, size, buffer);
44 }
45 
47  uint64_t location, uint64_t size, uintptr_t buffer, bool bCanBlock)
48 {
49  FatFilesystem *pFs = static_cast<FatFilesystem *>(m_pFilesystem);
50  uint64_t ret = pFs->write(this, location, size, buffer);
51 
52  // Reset the symlink target.
53  initialise(true);
54 
55  return ret;
56 }
virtual bool initialise(Disk *pDisk)
Definition: String.h:49
Definition: File.h:66