Dali 3D User Interface Engine
shared-file.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2014 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17 
18 // CLASS HEADER
19 #include "shared-file.h"
20 
21 // EXTERNAL INCLUDES
22 #include <sys/types.h>
23 #include <unistd.h>
24 #include <stdio.h>
25 #include <stdlib.h>
26 #include <sys/stat.h>
27 #include <fcntl.h>
28 #include <sys/file.h>
29 #include <sys/mman.h>
30 
31 #include <cstring>
32 
33 
34 namespace Dali
35 {
36 namespace Internal
37 {
38 namespace Adaptor
39 {
40 
41 SharedFile* SharedFile::New(const char* filename, int size, bool isSystem)
42 {
43  SharedFile *sf = NULL;
44 
45  sf = new SharedFile;
46 
47  bool opened = sf->OpenFile( filename, size, isSystem );
48  if( !opened )
49  {
50  delete sf;
51  sf = NULL;
52  }
53  return sf;
54 }
55 
57 : mFileDescriptor(-1),
58  mSize(0),
59  mAddress(NULL),
60  mFilename()
61 {
62 }
63 
65 {
66  Close();
67 }
68 
70 {
71  if( mAddress != NULL )
72  {
73  munmap( mAddress, mSize );
74  mAddress = NULL;
75  }
76 
77  if( mFileDescriptor >= 0 )
78  {
79  close( mFileDescriptor );
80  mFileDescriptor = -1;
81  }
82 }
83 
84 unsigned char* SharedFile::GetAddress()
85 {
86  return static_cast<unsigned char *>( mAddress );
87 }
88 
89 bool SharedFile::OpenFile(const char* filename, int size, bool isSystem)
90 {
91  bool opened = false;
92  mode_t mode;
93 
94  mode = S_IRUSR | S_IWUSR;
95  if( isSystem )
96  {
97  mode |= S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
98  }
99 
100  mFileDescriptor = shm_open( filename, O_RDONLY, mode );
101 
102  if( mFileDescriptor >= 0 )
103  {
104  mFilename = filename;
105 
106  mSize = size;
107  mAddress = mmap( NULL, mSize, PROT_READ, MAP_SHARED, mFileDescriptor, 0 );
108 
109  if( mAddress != MAP_FAILED )
110  {
111  opened = true;
112  }
113  }
114  return opened;
115 }
116 
117 } // Adaptor
118 } // Internal
119 } // Dali
Dali Docs Home
Read more about Dali