@@ -123,9 +123,11 @@ LittleFileSystem::~LittleFileSystem() {
123
123
}
124
124
125
125
int LittleFileSystem::mount (BlockDevice *bd) {
126
+ _mutex.lock ();
126
127
_bd = bd;
127
128
int err = _bd->init ();
128
129
if (err) {
130
+ _mutex.unlock ();
129
131
return err;
130
132
}
131
133
@@ -154,24 +156,29 @@ int LittleFileSystem::mount(BlockDevice *bd) {
154
156
}
155
157
156
158
err = lfs_mount (&_lfs, &_config);
159
+ _mutex.unlock ();
157
160
return lfs_toerror (err);
158
161
}
159
162
160
163
int LittleFileSystem::unmount () {
164
+ _mutex.lock ();
161
165
if (_bd) {
162
166
int err = lfs_unmount (&_lfs);
163
167
if (err) {
168
+ _mutex.unlock ();
164
169
return lfs_toerror (err);
165
170
}
166
171
167
172
err = _bd->deinit ();
168
173
if (err) {
174
+ _mutex.unlock ();
169
175
return err;
170
176
}
171
177
172
178
_bd = NULL ;
173
179
}
174
180
181
+ _mutex.unlock ();
175
182
return 0 ;
176
183
}
177
184
@@ -224,48 +231,67 @@ int LittleFileSystem::format(BlockDevice *bd,
224
231
}
225
232
226
233
int LittleFileSystem::reformat (BlockDevice *bd) {
234
+ _mutex.lock ();
227
235
if (_bd) {
228
236
if (!bd) {
229
237
bd = _bd;
230
238
}
231
239
232
240
int err = unmount ();
233
241
if (err) {
242
+ _mutex.unlock ();
234
243
return err;
235
244
}
236
245
}
237
246
238
247
if (!bd) {
248
+ _mutex.unlock ();
239
249
return -ENODEV;
240
250
}
241
251
242
252
int err = LittleFileSystem::format (bd,
243
253
_read_size, _prog_size, _block_size, _lookahead);
244
254
if (err) {
255
+ _mutex.unlock ();
245
256
return err;
246
257
}
247
258
248
- return mount (bd);
259
+ err = mount (bd);
260
+ if (err) {
261
+ _mutex.unlock ();
262
+ return err;
263
+ }
264
+
265
+ _mutex.unlock ();
266
+ return 0 ;
249
267
}
250
268
251
269
int LittleFileSystem::remove (const char *filename) {
270
+ _mutex.lock ();
252
271
int err = lfs_remove (&_lfs, filename);
272
+ _mutex.unlock ();
253
273
return lfs_toerror (err);
254
274
}
255
275
256
276
int LittleFileSystem::rename (const char *oldname, const char *newname) {
277
+ _mutex.lock ();
257
278
int err = lfs_rename (&_lfs, oldname, newname);
279
+ _mutex.unlock ();
258
280
return lfs_toerror (err);
259
281
}
260
282
261
283
int LittleFileSystem::mkdir (const char *name, mode_t mode) {
284
+ _mutex.lock ();
262
285
int err = lfs_mkdir (&_lfs, name);
286
+ _mutex.unlock ();
263
287
return lfs_toerror (err);
264
288
}
265
289
266
290
int LittleFileSystem::stat (const char *name, struct stat *st) {
267
291
struct lfs_info info;
292
+ _mutex.lock ();
268
293
int err = lfs_stat (&_lfs, name, &info);
294
+ _mutex.unlock ();
269
295
st->st_size = info.size ;
270
296
st->st_mode = lfs_tomode (info.type );
271
297
return lfs_toerror (err);
@@ -276,50 +302,66 @@ int LittleFileSystem::stat(const char *name, struct stat *st) {
276
302
int LittleFileSystem::file_open (fs_file_t *file, const char *path, int flags) {
277
303
lfs_file_t *f = new lfs_file_t ;
278
304
*file = f;
305
+ _mutex.lock ();
279
306
int err = lfs_file_open (&_lfs, f, path, lfs_fromflags (flags));
307
+ _mutex.unlock ();
280
308
return lfs_toerror (err);
281
309
}
282
310
283
311
int LittleFileSystem::file_close (fs_file_t file) {
284
312
lfs_file_t *f = (lfs_file_t *)file;
313
+ _mutex.lock ();
285
314
int err = lfs_file_close (&_lfs, f);
315
+ _mutex.unlock ();
286
316
delete f;
287
317
return lfs_toerror (err);
288
318
}
289
319
290
320
ssize_t LittleFileSystem::file_read (fs_file_t file, void *buffer, size_t len) {
291
321
lfs_file_t *f = (lfs_file_t *)file;
292
- int res = lfs_file_read (&_lfs, f, buffer, len);
322
+ _mutex.lock ();
323
+ lfs_ssize_t res = lfs_file_read (&_lfs, f, buffer, len);
324
+ _mutex.unlock ();
293
325
return lfs_toerror (res);
294
326
}
295
327
296
328
ssize_t LittleFileSystem::file_write (fs_file_t file, const void *buffer, size_t len) {
297
329
lfs_file_t *f = (lfs_file_t *)file;
298
- int res = lfs_file_write (&_lfs, f, buffer, len);
330
+ _mutex.lock ();
331
+ lfs_ssize_t res = lfs_file_write (&_lfs, f, buffer, len);
332
+ _mutex.unlock ();
299
333
return lfs_toerror (res);
300
334
}
301
335
302
336
int LittleFileSystem::file_sync (fs_file_t file) {
303
337
lfs_file_t *f = (lfs_file_t *)file;
338
+ _mutex.lock ();
304
339
int err = lfs_file_sync (&_lfs, f);
340
+ _mutex.unlock ();
305
341
return lfs_toerror (err);
306
342
}
307
343
308
344
off_t LittleFileSystem::file_seek (fs_file_t file, off_t offset, int whence) {
309
345
lfs_file_t *f = (lfs_file_t *)file;
346
+ _mutex.lock ();
310
347
off_t res = lfs_file_seek (&_lfs, f, offset, lfs_fromwhence (whence));
348
+ _mutex.unlock ();
311
349
return lfs_toerror (res);
312
350
}
313
351
314
352
off_t LittleFileSystem::file_tell (fs_file_t file) {
315
353
lfs_file_t *f = (lfs_file_t *)file;
354
+ _mutex.lock ();
316
355
off_t res = lfs_file_tell (&_lfs, f);
356
+ _mutex.unlock ();
317
357
return lfs_toerror (res);
318
358
}
319
359
320
360
off_t LittleFileSystem::file_size (fs_file_t file) {
321
361
lfs_file_t *f = (lfs_file_t *)file;
362
+ _mutex.lock ();
322
363
off_t res = lfs_file_size (&_lfs, f);
364
+ _mutex.unlock ();
323
365
return lfs_toerror (res);
324
366
}
325
367
@@ -328,21 +370,27 @@ off_t LittleFileSystem::file_size(fs_file_t file) {
328
370
int LittleFileSystem::dir_open (fs_dir_t *dir, const char *path) {
329
371
lfs_dir_t *d = new lfs_dir_t ;
330
372
*dir = d;
373
+ _mutex.lock ();
331
374
int err = lfs_dir_open (&_lfs, d, path);
375
+ _mutex.unlock ();
332
376
return lfs_toerror (err);
333
377
}
334
378
335
379
int LittleFileSystem::dir_close (fs_dir_t dir) {
336
380
lfs_dir_t *d = (lfs_dir_t *)dir;
381
+ _mutex.lock ();
337
382
int err = lfs_dir_close (&_lfs, d);
383
+ _mutex.unlock ();
338
384
delete d;
339
385
return lfs_toerror (err);
340
386
}
341
387
342
388
ssize_t LittleFileSystem::dir_read (fs_dir_t dir, struct dirent *ent) {
343
389
lfs_dir_t *d = (lfs_dir_t *)dir;
344
390
struct lfs_info info;
391
+ _mutex.lock ();
345
392
int res = lfs_dir_read (&_lfs, d, &info);
393
+ _mutex.unlock ();
346
394
if (res == 1 ) {
347
395
ent->d_type = lfs_totype (info.type );
348
396
strcpy (ent->d_name , info.name );
@@ -352,16 +400,23 @@ ssize_t LittleFileSystem::dir_read(fs_dir_t dir, struct dirent *ent) {
352
400
353
401
void LittleFileSystem::dir_seek (fs_dir_t dir, off_t offset) {
354
402
lfs_dir_t *d = (lfs_dir_t *)dir;
403
+ _mutex.lock ();
355
404
lfs_dir_seek (&_lfs, d, offset);
405
+ _mutex.unlock ();
356
406
}
357
407
358
408
off_t LittleFileSystem::dir_tell (fs_dir_t dir) {
359
409
lfs_dir_t *d = (lfs_dir_t *)dir;
360
- return lfs_dir_tell (&_lfs, d);
410
+ _mutex.lock ();
411
+ lfs_soff_t res = lfs_dir_tell (&_lfs, d);
412
+ _mutex.unlock ();
413
+ return lfs_toerror (res);
361
414
}
362
415
363
416
void LittleFileSystem::dir_rewind (fs_dir_t dir) {
364
417
lfs_dir_t *d = (lfs_dir_t *)dir;
418
+ _mutex.lock ();
365
419
lfs_dir_rewind (&_lfs, d);
420
+ _mutex.unlock ();
366
421
}
367
422
0 commit comments