Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 8288 → Rev 8289

/programs/develop/ktcc/trunk/bin/lib/libck.a
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/programs/develop/ktcc/trunk/libc/build.bat
10,7 → 10,7
set CFLAGS=-c -nostdinc -DGNUC -I"%cd%\%INCLUDE%" -Wall
set AR=kos32-ar
set ASM=fasm
set dirs=stdio memory kolibrisys string stdlib math dlfcn libgen
set dirs=stdio memory kolibrisys string stdlib math dlfcn libgen fs
rem #### END OF CONFIG SECTION ####
 
set objs=
/programs/develop/ktcc/trunk/libc/fs/dir.c
35,11 → 35,53
}
}
 
int lsdir(const char* dir, short_file_info **list)
{
int num_of_file=0;
kol_struct70 inf;
inf.p00 = 1;
inf.p04 = 0;
inf.p12 = 2;
inf.p16 = (unsigned*) malloc(32+inf.p12*560);
inf.p20 = 0;
inf.p21 = dir;
if(kol_file_70(&inf))
{
free((void*)inf.p16);
return FS_ERROR;
}
num_of_file = *(unsigned*)(inf.p16+8);
inf.p12 = num_of_file;
free((void*)inf.p16);
inf.p16 = (unsigned) malloc(32+inf.p12*560);
*list = (short_file_info*)malloc(num_of_file*sizeof(short_file_info));
if(kol_file_70(&inf))
{
free((void*)inf.p16);
return FS_ERROR;
}
for(int i=0; i<num_of_file; i++)
{
(*list)[i].type = *(unsigned*)(inf.p16+32+(264+40)*i);
(*list)[i].name =(char*)(inf.p16+32+40+(264+40)*i);
}
return num_of_file;
}
 
 
char *getcwd(char *buf, unsigned size)
{
if(buf == NULL){
buf = malloc(size);
if((buf = malloc(size))==NULL)
{
return NULL;
}
}
__asm__ __volatile__(
"int $0x40"
::"a"(30),"b"(2),"c"(buf), "d"(size));
/programs/develop/ktcc/trunk/libc/include/dir.h
3,8 → 3,21
 
#include <stdbool.h>
 
#define rmfile(obj) rmdir(obj)
#define PATH_MAX 4096
#define PATH_MAX 4096
#define T_FOLDER 16
#define T_FILE 0
#define FS_ERROR -1
 
typedef struct {
unsigned type;
char *name;
} short_file_info;
 
//Writes information about files in the "dir" folder to an struct array"list". Returns the number of files.
int lsdir(const char* dir, short_file_info **list);
 
// Get the path to the working directory(if buf is NULL, then memory will be allocated automatically)
char *getcwd(char *buf, unsigned size);
 
11,10 → 24,13
// Set path to working directory
void setcwd(const char* cwd);
 
// Remove directory (returns "true" if successful)
// Delete empty folder (returns "true" if successful)
bool rmdir(const char* dir);
 
// Create directory (returns "true" if successful)
// Delete a file (returns "true" if successful)
bool rmfile(const char* name);
 
// Create a foldery (returns "true" if successful)
bool mkdir(const char* dir);
 
#endif
/programs/develop/ktcc/trunk/samples/dir_example.c
2,20 → 2,40
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
 
int main()
{
char *path=getcwd(NULL, PATH_MAX);
printf("Current directory: %s\n", path);
setcwd("/sys"); //String must be null terminated!
path=getcwd(NULL, PATH_MAX);
printf("Move to the directory: %s\n", path);
free(path);
if(true==mkdir("TEST1")){
if(true==mkdir("test")){
puts("Test folder created!");
return(0);
}
else{
puts("Error creating folder!");
return(-1);
}
short_file_info *info;
int num = lsdir(path, &info);
if(num==FS_ERROR)
{
puts("File system error.");
return -1;
}
printf("Objects in the folder: %d\n", num);
for(int j=0; j<num; j++)
{
printf("%s ", info[j].name);
if(info[j].type==T_FOLDER)
{
printf("(Folder)\n");
}
else
{
printf("(File)\n");
}
}
free(info);
setcwd("/sys");
path=getcwd(NULL, PATH_MAX);
printf("Move to the directory: %s\n", path);
free(path);
}