LEFT | RIGHT |
1 /* | 1 /* |
2 * This file is part of the Adblock Plus, | 2 * This file is part of the Adblock Plus, |
3 * Copyright (C) 2006-2012 Eyeo GmbH | 3 * Copyright (C) 2006-2012 Eyeo GmbH |
4 * | 4 * |
5 * Adblock Plus is free software: you can redistribute it and/or modify | 5 * Adblock Plus is free software: you can redistribute it and/or modify |
6 * it under the terms of the GNU General Public License version 3 as | 6 * it under the terms of the GNU General Public License version 3 as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
8 * | 8 * |
9 * Adblock Plus is distributed in the hope that it will be useful, | 9 * Adblock Plus is distributed in the hope that it will be useful, |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
12 * GNU General Public License for more details. | 12 * GNU General Public License for more details. |
13 * | 13 * |
14 * You should have received a copy of the GNU General Public License | 14 * You should have received a copy of the GNU General Public License |
15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. | 15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
16 */ | 16 */ |
17 | 17 |
18 #include <stdio.h> | 18 #include <stdio.h> |
19 #include <string.h> | 19 #include <string.h> |
20 #include <unistd.h> | 20 #include <unistd.h> |
21 #include <sys/stat.h> | 21 #include <sys/stat.h> |
22 #include <android/log.h> | 22 #include "debug.h" |
23 #include "ops.h" | 23 #include "ops.h" |
24 | 24 |
25 v8::Handle<v8::Value> fileExistsImpl(const v8::Arguments& args) | 25 v8::Handle<v8::Value> fileExistsImpl(const v8::Arguments& args) |
26 { | 26 { |
27 v8::HandleScope handle_scope; | 27 D(D_WARN, "fileExists()"); |
28 | 28 v8::HandleScope handle_scope; |
29 if (args.Length() < 1) | 29 |
30 { | 30 if (args.Length() < 1) |
31 return v8::ThrowException(v8::String::New("File name expected")); | 31 { |
32 } | 32 return v8::ThrowException(v8::String::New("File name expected")); |
33 v8::String::AsciiValue fileName(args[0]); | 33 } |
34 if (!*fileName) | 34 v8::String::AsciiValue fileName(args[0]); |
35 { | 35 if (!*fileName) |
36 return v8::ThrowException(v8::String::New("File name isn't a string")); | 36 { |
37 } | 37 return v8::ThrowException(v8::String::New("File name isn't a string")); |
38 __android_log_print(ANDROID_LOG_INFO, "JS", "fileExists(%s)", *fileName); | 38 } |
| 39 D(D_INFO, "fileExists(%s)", *fileName); |
39 | 40 |
40 struct stat buf; | 41 struct stat buf; |
41 int result = stat(*fileName, &buf); | 42 int result = stat(*fileName, &buf); |
42 | 43 |
43 return v8::Boolean::New(result == 0 && S_ISREG(buf.st_mode)); | 44 return v8::Boolean::New(result == 0 && S_ISREG(buf.st_mode)); |
44 } | 45 } |
45 | 46 |
46 v8::Handle<v8::Value> fileLastModifiedImpl(const v8::Arguments& args) | 47 v8::Handle<v8::Value> fileLastModifiedImpl(const v8::Arguments& args) |
47 { | 48 { |
48 v8::HandleScope handle_scope; | 49 D(D_WARN, "fileLastModified()"); |
49 | 50 v8::HandleScope handle_scope; |
50 if (args.Length() < 1) | 51 |
51 { | 52 if (args.Length() < 1) |
52 return v8::ThrowException(v8::String::New("File name expected")); | 53 { |
53 } | 54 return v8::ThrowException(v8::String::New("File name expected")); |
54 v8::String::AsciiValue fileName(args[0]); | 55 } |
55 if (!*fileName) | 56 v8::String::AsciiValue fileName(args[0]); |
56 { | 57 if (!*fileName) |
57 return v8::ThrowException(v8::String::New("File name isn't a string")); | 58 { |
58 } | 59 return v8::ThrowException(v8::String::New("File name isn't a string")); |
59 __android_log_print(ANDROID_LOG_INFO, "JS", "fileLastModified(%s)", *fileName)
; | 60 } |
| 61 D(D_INFO, "fileLastModified(%s)", *fileName); |
60 | 62 |
61 struct stat buf; | 63 struct stat buf; |
62 int result = stat(*fileName, &buf); | 64 int result = stat(*fileName, &buf); |
63 | 65 |
64 return v8::Number::New((double)buf.st_mtime * 1000); | 66 return v8::Number::New((double)buf.st_mtime * 1000); |
65 } | 67 } |
66 | 68 |
67 v8::Handle<v8::Value> fileRemoveImpl(const v8::Arguments& args) | 69 v8::Handle<v8::Value> fileRemoveImpl(const v8::Arguments& args) |
68 { | 70 { |
69 v8::HandleScope handle_scope; | 71 D(D_WARN, "fileRemove()"); |
70 | 72 v8::HandleScope handle_scope; |
71 if (args.Length() < 1) | 73 |
72 { | 74 if (args.Length() < 1) |
73 return v8::ThrowException(v8::String::New("File name expected")); | 75 { |
74 } | 76 return v8::ThrowException(v8::String::New("File name expected")); |
75 v8::String::AsciiValue fileName(args[0]); | 77 } |
76 if (!*fileName) | 78 v8::String::AsciiValue fileName(args[0]); |
77 { | 79 if (!*fileName) |
78 return v8::ThrowException(v8::String::New("File name isn't a string")); | 80 { |
79 } | 81 return v8::ThrowException(v8::String::New("File name isn't a string")); |
80 __android_log_print(ANDROID_LOG_INFO, "JS", "fileRemove(%s)", *fileName); | 82 } |
| 83 D(D_INFO, "fileRemove(%s)", *fileName); |
81 | 84 |
82 int result = unlink(*fileName); | 85 int result = unlink(*fileName); |
83 | 86 |
84 if (result == 0) | 87 if (result == 0) |
85 return v8::Undefined(); | 88 return v8::Undefined(); |
86 else | 89 else |
87 return v8::ThrowException(v8::String::New("File couldn't be removed")); | 90 return v8::ThrowException(v8::String::New("File couldn't be removed")); |
88 } | 91 } |
89 | 92 |
90 v8::Handle<v8::Value> fileRenameImpl(const v8::Arguments& args) | 93 v8::Handle<v8::Value> fileRenameImpl(const v8::Arguments& args) |
91 { | 94 { |
| 95 D(D_WARN, "fileRename()"); |
92 v8::HandleScope handle_scope; | 96 v8::HandleScope handle_scope; |
93 | 97 |
94 if (args.Length() < 2) | 98 if (args.Length() < 2) |
95 { | 99 { |
96 return v8::ThrowException(v8::String::New("File names expected")); | 100 return v8::ThrowException(v8::String::New("File names expected")); |
97 } | 101 } |
98 v8::String::AsciiValue fileName(args[0]); | 102 v8::String::AsciiValue fileName(args[0]); |
99 if (!*fileName) | 103 if (!*fileName) |
100 { | 104 { |
101 return v8::ThrowException(v8::String::New("File name isn't a string")); | 105 return v8::ThrowException(v8::String::New("File name isn't a string")); |
102 } | 106 } |
103 | 107 |
104 v8::String::AsciiValue newPath(args[1]); | 108 v8::String::AsciiValue newPath(args[1]); |
105 if (!*newPath) | 109 if (!*newPath) |
106 { | 110 { |
107 return v8::ThrowException(v8::String::New("File name isn't a string")); | 111 return v8::ThrowException(v8::String::New("File name isn't a string")); |
108 } | 112 } |
109 __android_log_print(ANDROID_LOG_INFO, "JS", "fileRename(%s, %s)", *fileName, *
newPath); | 113 D(D_INFO, "fileRename(%s, %s)", *fileName, *newPath); |
110 | 114 |
111 int result = rename(*fileName, *newPath); | 115 int result = rename(*fileName, *newPath); |
112 | 116 |
113 if (result == 0) | 117 if (result == 0) |
114 return v8::Undefined(); | 118 return v8::Undefined(); |
115 else | 119 else |
116 return v8::ThrowException(v8::String::New("File couldn't be renamed")); | 120 return v8::ThrowException(v8::String::New("File couldn't be renamed")); |
117 } | 121 } |
118 | 122 |
119 v8::Handle<v8::Value> fileReadImpl(const v8::Arguments& args) | 123 v8::Handle<v8::Value> fileReadImpl(const v8::Arguments& args) |
120 { | 124 { |
121 v8::HandleScope handle_scope; | 125 D(D_WARN, "fileRead()"); |
122 | 126 v8::HandleScope handle_scope; |
123 if (args.Length() < 1) | 127 |
124 { | 128 if (args.Length() < 1) |
125 return v8::ThrowException(v8::String::New("File name expected")); | 129 { |
126 } | 130 return v8::ThrowException(v8::String::New("File name expected")); |
127 v8::String::AsciiValue fileName(args[0]); | 131 } |
128 if (!*fileName) | 132 v8::String::AsciiValue fileName(args[0]); |
129 { | 133 if (!*fileName) |
130 return v8::ThrowException(v8::String::New("File name isn't a string")); | 134 { |
131 } | 135 return v8::ThrowException(v8::String::New("File name isn't a string")); |
132 __android_log_print(ANDROID_LOG_INFO, "JS", "fileRead(%s)", *fileName); | 136 } |
| 137 D(D_INFO, "JS", "fileRead(%s)", *fileName); |
133 | 138 |
134 FILE* file = fopen(*fileName, "rb"); | 139 FILE* file = fopen(*fileName, "rb"); |
135 if (!file) | 140 if (!file) |
136 { | 141 { |
137 v8::Handle<v8::String> fileNameString = v8::String::New(*fileName); | 142 v8::Handle<v8::String> fileNameString = v8::String::New(*fileName); |
138 return v8::ThrowException(v8::String::Concat(v8::String::New("Failed opening
file: "), fileNameString)); | 143 return v8::ThrowException(v8::String::Concat(v8::String::New("Failed opening
file: "), fileNameString)); |
139 } | 144 } |
140 | 145 |
141 fseek(file, 0, SEEK_END); | 146 fseek(file, 0, SEEK_END); |
142 long size = ftell(file); | 147 long size = ftell(file); |
(...skipping 13 matching lines...) Expand all Loading... |
156 return v8::ThrowException(v8::String::New("File read error")); | 161 return v8::ThrowException(v8::String::New("File read error")); |
157 } | 162 } |
158 | 163 |
159 v8::Handle<v8::String> data = v8::String::New(buffer, size); | 164 v8::Handle<v8::String> data = v8::String::New(buffer, size); |
160 delete buffer; | 165 delete buffer; |
161 return data; | 166 return data; |
162 } | 167 } |
163 | 168 |
164 v8::Handle<v8::Value> fileWriteImpl(const v8::Arguments& args) | 169 v8::Handle<v8::Value> fileWriteImpl(const v8::Arguments& args) |
165 { | 170 { |
166 v8::HandleScope handle_scope; | 171 D(D_WARN, "fileWrite()"); |
167 | 172 v8::HandleScope handle_scope; |
168 if (args.Length() < 1) | 173 |
169 { | 174 if (args.Length() < 1) |
170 return v8::ThrowException(v8::String::New("File name expected")); | 175 { |
171 } | 176 return v8::ThrowException(v8::String::New("File name expected")); |
172 v8::String::AsciiValue fileName(args[0]); | 177 } |
173 if (!*fileName) | 178 v8::String::AsciiValue fileName(args[0]); |
174 { | 179 if (!*fileName) |
175 return v8::ThrowException(v8::String::New("File name isn't a string")); | 180 { |
176 } | 181 return v8::ThrowException(v8::String::New("File name isn't a string")); |
177 __android_log_print(ANDROID_LOG_INFO, "JS", "fileWrite(%s)", *fileName); | 182 } |
| 183 D(D_INFO, "fileWrite(%s)", *fileName); |
178 | 184 |
179 if (args.Length() < 2) | 185 if (args.Length() < 2) |
180 { | 186 { |
181 return v8::ThrowException(v8::String::New("Data to write expected")); | 187 return v8::ThrowException(v8::String::New("Data to write expected")); |
182 } | 188 } |
183 v8::String::Utf8Value data(args[1]); | 189 v8::String::Utf8Value data(args[1]); |
184 if (!*data) | 190 if (!*data) |
185 { | 191 { |
186 return v8::ThrowException(v8::String::New("Data to write is not a string")); | 192 return v8::ThrowException(v8::String::New("Data to write is not a string")); |
187 } | 193 } |
188 | 194 |
189 FILE* file = fopen(*fileName, "wb"); | 195 FILE* file = fopen(*fileName, "wb"); |
190 if (!file) | 196 if (!file) |
191 { | 197 { |
192 v8::Handle<v8::String> fileNameString = v8::String::New(*fileName); | 198 v8::Handle<v8::String> fileNameString = v8::String::New(*fileName); |
193 return v8::ThrowException(v8::String::Concat(v8::String::New("Failed opening
file: "), fileNameString)); | 199 return v8::ThrowException(v8::String::Concat(v8::String::New("Failed opening
file: "), fileNameString)); |
194 } | 200 } |
195 | 201 |
196 size_t writeSize = fwrite(*data, 1, data.length(), file); | 202 size_t writeSize = fwrite(*data, 1, data.length(), file); |
197 fclose(file); | 203 fclose(file); |
198 | 204 |
199 if (data.length() != writeSize) | 205 if (data.length() != writeSize) |
200 { | 206 { |
201 fileRemoveImpl(args); | 207 fileRemoveImpl(args); |
202 return v8::ThrowException(v8::String::New("File write error")); | 208 return v8::ThrowException(v8::String::New("File write error")); |
203 } | 209 } |
204 | 210 |
205 return v8::Undefined(); | 211 return v8::Undefined(); |
206 } | 212 } |
LEFT | RIGHT |