paths: Changed CREAT with a trailing slash to return NOTDIR

- before: lfs_file_open("missing/") => LFS_ERR_ISDIR
- after:  lfs_file_open("missing/") => LFS_ERR_NOTDIR

As noted by bmcdonnell-fb, returning LFS_ERR_ISDIR here was inconsistent
with the case where the file exists:

  case                           before          after
  lfs_file_open("dir_a")      => LFS_ERR_ISDIR   LFS_ERR_ISDIR
  lfs_file_open("dir_a/")     => LFS_ERR_ISDIR   LFS_ERR_ISDIR
  lfs_file_open("reg_a/")     => LFS_ERR_NOTDIR  LFS_ERR_NOTDIR
  lfs_file_open("missing_a/") => LFS_ERR_ISDIR   LFS_ERR_NOTDIR

Note this is consistent with the behavior of lfs_stat:

  lfs_file_open("reg_a/") => LFS_ERR_NOTDIR
  lfs_stat("reg_a/")      => LFS_ERR_NOTDIR

And the only other function that can "create" files, lfs_rename:

  lfs_file_open("missing_a/")       => LFS_ERR_NOTDIR
  lfs_rename("reg_a", "missing_a/") => LFS_ERR_NOTDIR

There is some ongoing discussion about if these should return NOTDIR,
ISDIR, or INVAL, but this is at least an improvement over the
rename/open mismatch.
This commit is contained in:
Christopher Haster
2024-11-25 15:22:33 -06:00
parent b735c8fd7f
commit 999ef6656f
2 changed files with 19 additions and 19 deletions

View File

@@ -764,17 +764,17 @@ code = '''
} else {
lfs_file_t file;
lfs_file_open(&lfs, &file, "coffee/drip/",
LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => LFS_ERR_ISDIR;
LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => LFS_ERR_NOTDIR;
lfs_file_open(&lfs, &file, "coffee/coldbrew//",
LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => LFS_ERR_ISDIR;
LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => LFS_ERR_NOTDIR;
lfs_file_open(&lfs, &file, "coffee/turkish///",
LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => LFS_ERR_ISDIR;
LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => LFS_ERR_NOTDIR;
lfs_file_open(&lfs, &file, "coffee/tubruk////",
LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => LFS_ERR_ISDIR;
LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => LFS_ERR_NOTDIR;
lfs_file_open(&lfs, &file, "coffee/vietnamese/////",
LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => LFS_ERR_ISDIR;
LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => LFS_ERR_NOTDIR;
lfs_file_open(&lfs, &file, "coffee/thai//////",
LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => LFS_ERR_ISDIR;
LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => LFS_ERR_NOTDIR;
// still create so we have something to test
lfs_file_open(&lfs, &file, "coffee/drip",
@@ -3972,30 +3972,30 @@ code = '''
LFS_O_RDONLY) => LFS_ERR_NOENT;
lfs_file_open(&lfs, &file, "coffee/_rip/",
LFS_O_WRONLY | LFS_O_CREAT) => LFS_ERR_ISDIR;
LFS_O_WRONLY | LFS_O_CREAT) => LFS_ERR_NOTDIR;
lfs_file_open(&lfs, &file, "coffee/c_ldbrew//",
LFS_O_WRONLY | LFS_O_CREAT) => LFS_ERR_ISDIR;
LFS_O_WRONLY | LFS_O_CREAT) => LFS_ERR_NOTDIR;
lfs_file_open(&lfs, &file, "coffee/tu_kish///",
LFS_O_WRONLY | LFS_O_CREAT) => LFS_ERR_ISDIR;
LFS_O_WRONLY | LFS_O_CREAT) => LFS_ERR_NOTDIR;
lfs_file_open(&lfs, &file, "coffee/tub_uk////",
LFS_O_WRONLY | LFS_O_CREAT) => LFS_ERR_ISDIR;
LFS_O_WRONLY | LFS_O_CREAT) => LFS_ERR_NOTDIR;
lfs_file_open(&lfs, &file, "coffee/_vietnamese/////",
LFS_O_WRONLY | LFS_O_CREAT) => LFS_ERR_ISDIR;
LFS_O_WRONLY | LFS_O_CREAT) => LFS_ERR_NOTDIR;
lfs_file_open(&lfs, &file, "coffee/thai_//////",
LFS_O_WRONLY | LFS_O_CREAT) => LFS_ERR_ISDIR;
LFS_O_WRONLY | LFS_O_CREAT) => LFS_ERR_NOTDIR;
lfs_file_open(&lfs, &file, "coffee/_rip/",
LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => LFS_ERR_ISDIR;
LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => LFS_ERR_NOTDIR;
lfs_file_open(&lfs, &file, "coffee/c_ldbrew//",
LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => LFS_ERR_ISDIR;
LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => LFS_ERR_NOTDIR;
lfs_file_open(&lfs, &file, "coffee/tu_kish///",
LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => LFS_ERR_ISDIR;
LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => LFS_ERR_NOTDIR;
lfs_file_open(&lfs, &file, "coffee/tub_uk////",
LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => LFS_ERR_ISDIR;
LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => LFS_ERR_NOTDIR;
lfs_file_open(&lfs, &file, "coffee/_vietnamese/////",
LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => LFS_ERR_ISDIR;
LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => LFS_ERR_NOTDIR;
lfs_file_open(&lfs, &file, "coffee/thai_//////",
LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => LFS_ERR_ISDIR;
LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => LFS_ERR_NOTDIR;
// dir open paths, only works on dirs!
lfs_dir_t dir;