alternate ways of setting the string encoding for absolute paths
git-svn-id: svn://kolibrios.org@6758 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
ae17e1bd38
commit
8eb00f284b
@ -828,10 +828,16 @@ common_app_entry:
|
|||||||
[ebp+APP_HDR.img_base], [ebp+APP_HDR.img_size]
|
[ebp+APP_HDR.img_base], [ebp+APP_HDR.img_size]
|
||||||
mov esi, [ebp+APP_HDR.path_string]
|
mov esi, [ebp+APP_HDR.path_string]
|
||||||
mov edi, [ebp+APP_HDR.path]
|
mov edi, [ebp+APP_HDR.path]
|
||||||
|
mov ecx, [ebp+APP_HDR.filename_size]
|
||||||
|
cmp ecx, 1023
|
||||||
|
jc @f
|
||||||
|
mov ecx, 1022
|
||||||
|
@@:
|
||||||
push esi
|
push esi
|
||||||
test edi, edi
|
test edi, edi
|
||||||
jz @f
|
jz @f
|
||||||
mov ecx, [ebp+APP_HDR.filename_size]
|
mov al, '/'
|
||||||
|
stosb
|
||||||
rep movsb
|
rep movsb
|
||||||
mov byte [edi], 0
|
mov byte [edi], 0
|
||||||
@@:
|
@@:
|
||||||
|
@ -3900,12 +3900,16 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
|||||||
* +20 = +0x14: byte: 0
|
* +20 = +0x14: byte: 0
|
||||||
* +21 = +0x15: dword: указатель на строку
|
* +21 = +0x15: dword: указатель на строку
|
||||||
Чувствительность к регистру букв зависит от файловой системы.
|
Чувствительность к регистру букв зависит от файловой системы.
|
||||||
Можно указать кодировку, поместив в начале строки байт со значениями:
|
Если путь начинается не с '/', то он считается относительным.
|
||||||
|
Получить или установить текущую папку можно с помощью сисфункции 30.
|
||||||
|
'../' в начале пути означает подъём на одну папку относительно текущей.
|
||||||
|
Можно указать кодировку строки, поместив в её начале байт со значениями:
|
||||||
* 1 = cp866
|
* 1 = cp866
|
||||||
* 2 = UTF-16LE
|
* 2 = UTF-16LE
|
||||||
* 3 = UTF-8
|
* 3 = UTF-8
|
||||||
иначе будет использоваться кодировка cp866.
|
иначе будет использоваться кодировка cp866. В абсолютном пути можно
|
||||||
Формат строки:
|
поместить этот байт после '/' или добавить дополнительный '/' перед ним.
|
||||||
|
Формат абсолютного пути:
|
||||||
/base/number/dir1/dir2/.../dirn/file,
|
/base/number/dir1/dir2/.../dirn/file,
|
||||||
где base/number идентифицирует устройство, на котором ищется файл:
|
где base/number идентифицирует устройство, на котором ищется файл:
|
||||||
* RD/1 = рамдиск
|
* RD/1 = рамдиск
|
||||||
@ -3924,9 +3928,6 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
|||||||
* '/HD0/1/folder/file.txt',0
|
* '/HD0/1/folder/file.txt',0
|
||||||
* '/hd2/2/pics/tanzania.bmp',0
|
* '/hd2/2/pics/tanzania.bmp',0
|
||||||
* 2,'/',0,'sys','/',0,'F',0,'I',0,'L',0,'E',0,0,0
|
* 2,'/',0,'sys','/',0,'F',0,'I',0,'L',0,'E',0,0,0
|
||||||
Также функция поддерживает относительные имена. Если путь начинается
|
|
||||||
не с '/', то он считается относительно текущей папки. Получить или
|
|
||||||
установить текущую папку можно с помощью сисфункции 30.
|
|
||||||
|
|
||||||
Доступные подфункции:
|
Доступные подфункции:
|
||||||
* подфункция 0 - чтение файла
|
* подфункция 0 - чтение файла
|
||||||
@ -4134,7 +4135,6 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
|||||||
* +0: dword: 4 = номер подфункции
|
* +0: dword: 4 = номер подфункции
|
||||||
* +4: dword: младший dword нового размера файла
|
* +4: dword: младший dword нового размера файла
|
||||||
* +8: dword: старший dword нового размера файла
|
* +8: dword: старший dword нового размера файла
|
||||||
(должен быть 0 для FAT)
|
|
||||||
* +12 = +0xC: dword: 0 (зарезервировано)
|
* +12 = +0xC: dword: 0 (зарезервировано)
|
||||||
* +16 = +0x10: dword: 0 (зарезервировано)
|
* +16 = +0x10: dword: 0 (зарезервировано)
|
||||||
* +20 = +0x14: путь, правила формирования имён указаны в общем описании
|
* +20 = +0x14: путь, правила формирования имён указаны в общем описании
|
||||||
@ -4142,10 +4142,9 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
|
|||||||
* eax = 0 - успешно, иначе код ошибки файловой системы
|
* eax = 0 - успешно, иначе код ошибки файловой системы
|
||||||
* ebx разрушается
|
* ebx разрушается
|
||||||
Замечания:
|
Замечания:
|
||||||
* Если новый размер файла меньше старого, файл усекается. Если
|
* Если новый размер файла меньше старого, файл усекается.
|
||||||
новый размер больше старого, файл расширяется нулевыми символами.
|
Если новый размер больше старого, файл расширяется, и если
|
||||||
Если новый размер равен старому, единственным результатом вызова
|
разница в размере не больше 16 МБ, новое место очищается нулями.
|
||||||
является установка даты/времени модификации и доступа в текущие.
|
|
||||||
* Если свободного места на диске недостаточно для расширения файла,
|
* Если свободного места на диске недостаточно для расширения файла,
|
||||||
то функция расширит насколько возможно, после чего вернёт
|
то функция расширит насколько возможно, после чего вернёт
|
||||||
код ошибки 8.
|
код ошибки 8.
|
||||||
|
@ -3670,6 +3670,7 @@ Parameters:
|
|||||||
* ebx = 2 - subfunction number
|
* ebx = 2 - subfunction number
|
||||||
* ecx = thread identifier
|
* ecx = thread identifier
|
||||||
* edx = size of context structure, must be 0x28=40 bytes
|
* edx = size of context structure, must be 0x28=40 bytes
|
||||||
|
* esi -> context structure
|
||||||
Returned value:
|
Returned value:
|
||||||
* function does not return value
|
* function does not return value
|
||||||
Format of context structure is shown in the description of
|
Format of context structure is shown in the description of
|
||||||
@ -3855,12 +3856,16 @@ General format of the information structure:
|
|||||||
* +20 = +0x14: byte: 0
|
* +20 = +0x14: byte: 0
|
||||||
* +21 = +0x15: dword: pointer to string
|
* +21 = +0x15: dword: pointer to string
|
||||||
Case sensitivity depends on filesystem.
|
Case sensitivity depends on filesystem.
|
||||||
|
If a path not begins with '/', it is considered a relative.
|
||||||
|
To get or set the current folder, use the function 30.
|
||||||
|
'../' in the beginning means a lift by one folder relatively current folder.
|
||||||
To set the encoding, put at the start of the string a byte with next values:
|
To set the encoding, put at the start of the string a byte with next values:
|
||||||
* 1 = cp866
|
* 1 = cp866
|
||||||
* 2 = UTF-16LE
|
* 2 = UTF-16LE
|
||||||
* 3 = UTF-8
|
* 3 = UTF-8
|
||||||
otherwise will be used cp866.
|
otherwise will be used cp866. In an absolute path
|
||||||
Format of filename:
|
you may put this byte after the '/' or put an additional '/' before it.
|
||||||
|
Format of an absolute path:
|
||||||
/base/number/dir1/dir2/.../dirn/file,
|
/base/number/dir1/dir2/.../dirn/file,
|
||||||
where base/number identifies device, on which file is located:
|
where base/number identifies device, on which file is located:
|
||||||
* RD/1 = ramdisk
|
* RD/1 = ramdisk
|
||||||
@ -3879,9 +3884,6 @@ Examples:
|
|||||||
* '/HD0/1/folder/file.txt',0
|
* '/HD0/1/folder/file.txt',0
|
||||||
* '/hd2/2/pics/tanzania.bmp',0
|
* '/hd2/2/pics/tanzania.bmp',0
|
||||||
* 2,'/',0,'sys','/',0,'F',0,'I',0,'L',0,'E',0,0,0
|
* 2,'/',0,'sys','/',0,'F',0,'I',0,'L',0,'E',0,0,0
|
||||||
Also function supports relative names. If the path begins not
|
|
||||||
with '/', it is considered relative to a current folder. To get or
|
|
||||||
set a current folder, use the function 30.
|
|
||||||
|
|
||||||
Available subfunctions:
|
Available subfunctions:
|
||||||
* subfunction 0 - read file
|
* subfunction 0 - read file
|
||||||
@ -4094,11 +4096,9 @@ Returned value:
|
|||||||
* eax = 0 - success, otherwise file system error code
|
* eax = 0 - success, otherwise file system error code
|
||||||
* ebx destroyed
|
* ebx destroyed
|
||||||
Remarks:
|
Remarks:
|
||||||
* If the new file size is less than old one, file is truncated.
|
* If new file size is less than old one, file will be truncated.
|
||||||
If the new size is greater than old one, file is expanded with
|
If new size is greater than old one, file will be expanded, and if
|
||||||
characters with code 0. If the new size is equal to old one,
|
size difference is up to 16 MB, new space will be cleared with 0.
|
||||||
the only result of call is set date/time of modification and
|
|
||||||
access to the current date/time.
|
|
||||||
* If there is not enough free space on disk for expansion, the
|
* If there is not enough free space on disk for expansion, the
|
||||||
function will expand to maximum possible size and then return
|
function will expand to maximum possible size and then return
|
||||||
error code 8.
|
error code 8.
|
||||||
|
@ -510,10 +510,18 @@ get_full_file_name:
|
|||||||
cmp byte [esi], '/'
|
cmp byte [esi], '/'
|
||||||
jnz .set_relative
|
jnz .set_relative
|
||||||
inc esi
|
inc esi
|
||||||
cmp byte [ebx], 2
|
cmp byte [esi], 4
|
||||||
jnz @f
|
jnc @f
|
||||||
|
mov ebx, esi
|
||||||
|
inc esi
|
||||||
|
cmp byte [esi], '/'
|
||||||
|
jnz .start
|
||||||
inc esi
|
inc esi
|
||||||
@@:
|
@@:
|
||||||
|
cmp byte [ebx], 2
|
||||||
|
jnz .start
|
||||||
|
inc esi
|
||||||
|
.start:
|
||||||
call process_replace_file_name
|
call process_replace_file_name
|
||||||
mov edi, [esp+12]
|
mov edi, [esp+12]
|
||||||
mov ecx, [esp+16]
|
mov ecx, [esp+16]
|
||||||
|
Loading…
Reference in New Issue
Block a user