Skip to content

[request] option for "LittleFS.remove(file)" to disable auto removing empty remaining directories #8724

Open
@atesin

Description

@atesin

Problem Description (infos below)

in LittleFS, if i have a subdirectory with a single file and i remove it, the directory goes empty and it is ALSO removed, and ALL the empty parent directories back, RECURSIVELY... i know this is the standard behavior but is not always desirable, so searching a way to disable it by inspecting the source code (for some boolean argument, config object or something) i noticed there are none

i would like an official and everyone-available option (because i surely can modify my local source, but i don't feel is the shared spirit of opensource) to disable this auto-erase empty directories feature via a function argument, config or so... i think the fix will be easy and could have multiple options, currently i don't see any way to prevent executing this but hardcoding my source... the related source code is :

// Now try and remove any empty subdirs this makes, silently
char *pathStr = strdup(path);
if (pathStr) {
char *ptr = strrchr(pathStr, '/');
while (ptr) {
*ptr = 0;
lfs_remove(&_lfs, pathStr); // Don't care if fails if there are files left
ptr = strrchr(pathStr, '/');
}
free(pathStr);
}

to ilustrate a situation when this could be annoying, imagine we have a sketch with a bash-like command line interface

/current/dir/>      # as FS doesn't have the "current dir" concept, we maintain it in a global char[] variable
/current/dir/> ls    # wrapper for LittleFS.openDir(currentDir) iteration
size file
0    myFile
- 1 object
/current/dir/> remove myFile   # wrapper for remove(myFile)... but it will also remove the empty parent dirs after! (getting slower)
/current/dir/> ls       # as the current dir was just deleted, a check with LittleFS.exists(currentDir) will generate an error!!
Error: path doesn't exist
/current/dir/> cd ..    # back to parent dir, just slicing currentDir global var
/current/> ls    # note subdir "dir" now doesn't exists as last seen, what is confusing.... 
size file
x    blah
- (any) object(s)
/current/>    # additionally, if this current dir was also emptied and deleted, "ls" would also generate another error!!

Basic Infos

  • This issue complies with the issue POLICY doc.
  • I have read the documentation at readthedocs and the issue is not addressed there.
  • I have tested that the issue is present in current master branch (aka latest git).
  • I have searched the issue tracker for a similar issue.
  • If there is a stack dump, I have decoded it.
  • I have filled out all fields below.

Platform

Hardware: ESP-12E
Core Version: 3.0.2
Development Env: Arduino IDE 1.9
Operating System: Windows

Settings in IDE

Module: NodeMCU 1.0 amica v2 compatible
Flash Mode: qio, i guess (not relevant for this)
Flash Size: 4MB
lwip Variant: v2 Lower Memory
Reset Method: nodemcu
Flash Frequency: 40Mhz
CPU Frequency: 80Mhz
Upload Using: SERIAL
Upload Speed: 115200

MCVE Sketch

this is a general case about a lib function, this function will behave the same in any sketch

Debug Messages

i haven't enabled debugging (and i tried but i couldn't.. not relevant anyway)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions