Ruby
3.4.0dev (2024-12-06 revision 892c46283a5ea4179500d951c9d4866c0051f27b)
|
Routines to manipulate encodings of pathnames. More...
#include "ruby/internal/attr/nonnull.h"
#include "ruby/internal/dllexport.h"
#include "ruby/internal/encoding/encoding.h"
#include "ruby/internal/value.h"
Go to the source code of this file.
Functions | |
char * | rb_enc_path_next (const char *path, const char *end, rb_encoding *enc) |
Returns a path component directly adjacent to the passed pointer. More... | |
char * | rb_enc_path_skip_prefix (const char *path, const char *end, rb_encoding *enc) |
Seeks for non-prefix part of a pathname. More... | |
char * | rb_enc_path_last_separator (const char *path, const char *end, rb_encoding *enc) |
Returns the last path component. More... | |
char * | rb_enc_path_end (const char *path, const char *end, rb_encoding *enc) |
This just returns the passed end basically. More... | |
const char * | ruby_enc_find_basename (const char *name, long *baselen, long *alllen, rb_encoding *enc) |
Our own encoding-aware version of basename(3) . More... | |
const char * | ruby_enc_find_extname (const char *name, long *len, rb_encoding *enc) |
Our own encoding-aware version of extname . More... | |
Routines to manipulate encodings of pathnames.
RBIMPL
or rbimpl
are implementation details. Don't take them as canon. They could rapidly appear then vanish. The name (path) of this header file is also an implementation detail. Do not expect it to persist at the place it is now. Developers are free to move it anywhere anytime at will. __VA_ARGS__
is always available. We assume C99 for ruby itself but we don't assume languages of extension libraries. They could be written in C++98. Definition in file pathname.h.
char* rb_enc_path_end | ( | const char * | path, |
const char * | end, | ||
rb_encoding * | enc | ||
) |
This just returns the passed end basically.
It makes difference in case the passed string ends with tons of path separators like the following:
[in] | path | Where to start scanning. |
[in] | end | End of the path string. |
[in] | enc | Encoding of the string. |
end
if there is no trailing path separators. char* rb_enc_path_last_separator | ( | const char * | path, |
const char * | end, | ||
rb_encoding * | enc | ||
) |
Returns the last path component.
[in] | path | Where to start scanning. |
[in] | end | End of the path string. |
[in] | enc | Encoding of the string. |
end
if there is no more path component. Definition at line 3560 of file file.c.
Referenced by ruby_init_loadpath().
char* rb_enc_path_next | ( | const char * | path, |
const char * | end, | ||
rb_encoding * | enc | ||
) |
Returns a path component directly adjacent to the passed pointer.
[in] | path | Where to start scanning. |
[in] | end | End of the path string. |
[in] | enc | Encoding of the string. |
end
if there is no next path component. Definition at line 3512 of file file.c.
Referenced by rb_enc_path_skip_prefix().
char* rb_enc_path_skip_prefix | ( | const char * | path, |
const char * | end, | ||
rb_encoding * | enc | ||
) |
Seeks for non-prefix part of a pathname.
This can be a no-op when the OS has no such concept like a path prefix. But there are OSes where path prefixes do exist.
[in] | path | Where to start scanning. |
[in] | end | End of the path string. |
[in] | enc | Encoding of the string. |
path
if the OS does not have path prefix. const char* ruby_enc_find_basename | ( | const char * | name, |
long * | baselen, | ||
long * | alllen, | ||
rb_encoding * | enc | ||
) |
Our own encoding-aware version of basename(3)
.
Normally, this function returns the last path component of the given name. However in case the passed name ends with a path separator, it returns the name of the directory, not the last (empty) component. Also if the passed name is a root directory, it returns that root directory. Note however that Windows filesystem have drive letters, which this function does not return.
[in] | name | Target path. |
[out] | baselen | Return buffer. |
[in,out] | alllen | Number of bytes of name . |
[enc] | enc Encoding of name . |
name
. baselen
, if passed, is updated to be the number of bytes of the returned basename. alllen
, if passed, is updated to be the number of bytes of strings not considered as the basename. const char* ruby_enc_find_extname | ( | const char * | name, |
long * | len, | ||
rb_encoding * | enc | ||
) |
Our own encoding-aware version of extname
.
This function first applies rb_enc_path_last_separator() to the passed name and only concerns its return value (ignores any parent directories). This function returns complicated results:
[in] | name | Target path. |
[in,out] | len | Number of bytes of name . |
[in] | enc | Encoding of name . |
len
, if passed, is updated (see above).