fs/jfs/jfs_unicode.c
Source file repositories/reference/linux-study-clean/fs/jfs/jfs_unicode.c
File Facts
- System
- Linux kernel
- Corpus path
fs/jfs/jfs_unicode.c- Extension
.c- Size
- 2657 bytes
- Lines
- 126
- Domain
- Core OS
- Bucket
- VFS And Filesystem Core
- Inferred role
- Core OS: implementation source
- Status
- source implementation candidate
Why This File Exists
Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/fs.hlinux/slab.hjfs_incore.hjfs_filsys.hjfs_unicode.hjfs_debug.h
Detected Declarations
function Copyrightfunction jfs_strtoUCSfunction get_UCSname
Annotated Snippet
if (unlikely(le16_to_cpu(from[i]) & 0xff00)) {
to[i] = '?';
if (unlikely(warn)) {
warn--;
warn_again--;
printk(KERN_ERR
"non-latin1 character 0x%x found in JFS file name\n",
le16_to_cpu(from[i]));
printk(KERN_ERR
"mount with iocharset=utf8 to access\n");
}
}
else
to[i] = (char) (le16_to_cpu(from[i]));
}
outlen = i;
}
to[outlen] = 0;
return outlen;
}
/*
* NAME: jfs_strtoUCS()
*
* FUNCTION: Convert character string to unicode string
*
*/
static int jfs_strtoUCS(wchar_t * to, const unsigned char *from, int len,
struct nls_table *codepage)
{
int charlen;
int i;
if (codepage) {
for (i = 0; len && *from; i++, from += charlen, len -= charlen)
{
charlen = codepage->char2uni(from, len, &to[i]);
if (charlen < 1) {
jfs_err("jfs_strtoUCS: char2uni returned %d.",
charlen);
jfs_err("charset = %s, char = 0x%x",
codepage->charset, *from);
return charlen;
}
}
} else {
for (i = 0; (i < len) && from[i]; i++)
to[i] = (wchar_t) from[i];
}
to[i] = 0;
return i;
}
/*
* NAME: get_UCSname()
*
* FUNCTION: Allocate and translate to unicode string
*
*/
int get_UCSname(struct component_name * uniName, struct dentry *dentry)
{
struct nls_table *nls_tab = JFS_SBI(dentry->d_sb)->nls_tab;
int length = dentry->d_name.len;
if (length > JFS_NAME_MAX)
return -ENAMETOOLONG;
uniName->name =
kmalloc_array(length + 1, sizeof(wchar_t), GFP_NOFS);
if (uniName->name == NULL)
return -ENOMEM;
uniName->namlen = jfs_strtoUCS(uniName->name, dentry->d_name.name,
length, nls_tab);
if (uniName->namlen < 0) {
kfree(uniName->name);
return uniName->namlen;
}
return 0;
}
Annotation
- Immediate include surface: `linux/fs.h`, `linux/slab.h`, `jfs_incore.h`, `jfs_filsys.h`, `jfs_unicode.h`, `jfs_debug.h`.
- Detected declarations: `function Copyright`, `function jfs_strtoUCS`, `function get_UCSname`.
- Atlas domain: Core OS / VFS And Filesystem Core.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.