mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-07-14 23:09:16 +00:00
Fix basename() and dirname()
This commit is contained in:
parent
9b11206ae3
commit
04d39d47f1
41 changed files with 489 additions and 207 deletions
|
@ -1,7 +1,7 @@
|
|||
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
|
||||
│vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi│
|
||||
╞══════════════════════════════════════════════════════════════════════════════╡
|
||||
│ Copyright 2021 Justine Alexandra Roberts Tunney │
|
||||
│ Copyright 2020 Justine Alexandra Roberts Tunney │
|
||||
│ │
|
||||
│ Permission to use, copy, modify, and/or distribute this software for │
|
||||
│ any purpose with or without fee is hereby granted, provided that the │
|
||||
|
@ -16,33 +16,21 @@
|
|||
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
||||
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#include "libc/dce.h"
|
||||
#include "libc/str/path.h"
|
||||
#include "libc/str/str.h"
|
||||
|
||||
/**
|
||||
* Returns true if pathname is absolute, e.g.
|
||||
* Returns true if pathname is considered absolute.
|
||||
*
|
||||
* - `/home/jart/foo.txt` is absolute
|
||||
* - `C:/Users/jart/foo.txt` is absolute on NT
|
||||
* - `C:\Users\jart\foo.txt` is absolute on NT
|
||||
* - `\??\C:\Users\jart\foo.txt` is absolute on NT
|
||||
* - `\\.\C:\Users\jart\foo.txt` is absolute on NT
|
||||
* - `/Users/jart/foo.txt` we consider it absolute enough on NT
|
||||
* - `\Users\jart\foo.txt` we consider it absolute enough on NT
|
||||
* - `C:/Users/jart/foo.txt` is absolute on Windows
|
||||
* - `C:\Users\jart\foo.txt` is absolute on Windows
|
||||
* - `\??\C:\Users\jart\foo.txt` is absolute on Windows
|
||||
* - `\\.\C:\Users\jart\foo.txt` is absolute on Windows
|
||||
* - `/Users/jart/foo.txt` is effectively absolute on Windows
|
||||
* - `\Users\jart\foo.txt` is effectively absolute on Windows
|
||||
*
|
||||
* Please note that the recommended approach to using Cosmopolitan is to
|
||||
* not use absolute paths at all. If you do use absolute paths then it's
|
||||
* a good idea on Windows to stay within the C: drive. This is because
|
||||
* Cosmopolitan Libc doesn't create a virtual filesystem layer and
|
||||
* instead just replaces `\` characters with `/`.
|
||||
*/
|
||||
bool _isabspath(const char *p) {
|
||||
if (*p == '/') {
|
||||
return true;
|
||||
}
|
||||
if (IsWindows() &&
|
||||
(*p == '/' || *p == '\\' || (isalpha(p[0]) && p[1] == ':'))) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
bool _isabspath(const char *path) {
|
||||
return _classifypath(path) & _PATH_ABS;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue