SayoriOS 0.3.3

pathinfo.c
См. документацию.
1
10 #include <lib/php/pathinfo.h>
11 #include "mem/vmm.h"
12
13 char* pathinfo(const char* Path, int Mode){
14 int i = 0, length = strlen(Path), dot_index = -1;
15 char* info = kmalloc(length + 1);
16 memset(info, 0, length + 1);
17 if (Mode == PATHINFO_DIRNAME) {
18 if (Path[(length - 1)] == '/' || Path[(length - 1)] == '\\'){
19 length--;
20 }
21 for (i = length - 1; i >= 0; i--) {
22 if (Path[i] == '/' || Path[i] == '\\') {
23 break;
24 }
25 }
26 if (i >= 0) {
27 strncpy(info, Path, i + 1);
28 info[i + 1] = '\0';
29 } else {
30 info[0] = '/';
31 info[1] = '\0';
32 }
33 } else if (Mode == PATHINFO_BASENAME){
34 if (Path[(length - 1)] == '/' || Path[(length - 1)] == '\\'){
35 length--;
36 }
37 for (i = length - 1; i >= 0; i--) {
38 if (Path[i] == '/' || Path[i] == '\\') {
39 break;
40 }
41 }
42
43 if (i >= 0) {
44 strncpy(info, Path + i + 1, length - i);
45 info[length - i - 1] = '\0';
46 } else {
47 strcpy(info, Path);
48 }
49 } else if (Mode == PATHINFO_EXTENSION){
50 for (i = length - 1; i >= 0; i--) {
51 if (Path[i] == '.') {
52 break;
53 }
54 }
55
56 if (i >= 0 && i < length - 1) {
57 strncpy(info, Path + i + 1, length - i);
58 info[length - i] = '\0';
59 } else {
60 info[0] = '\0';
61 }
62 } else {
63 for (i = length - 1; i >= 0; i--) {
64 if (Path[i] == '.') {
65 dot_index = i;
66 break;
67 }
68 }
69
70 if (dot_index >= 0) {
71 strncpy(info, Path, dot_index);
72 info[dot_index] = '\0';
73 } else {
74 // Если точка не найдена, возвращаем полное имя файла
75 strcpy(info, Path);
76 }
77 }
78 return info;
79 }
strlen
size_t strlen(const char *str)
Возращает длину строки
Definition: string.c:88
strncpy
char * strncpy(char *dest, const char *src, size_t n)
Копирование строк c ограничением длины
Definition: string.c:447
memset
void * memset(void *ptr, char value, size_t num)
Заполнение массива указанными символами
Definition: string.c:203
strcpy
int strcpy(char *dest, const char *src)
Копирование строк
Definition: string.c:282