<-- Back to AG_Intro.3


#include <agar/core.h>


AG_File provides a consistent interface to basic filesystem operations (which may be implemented differently under different platforms).


int AG_GetFileInfo (const char *path, AG_FileInfo *fileInfo)

int AG_GetSystemTempDir (char *dst, size_t dstLen)

int AG_FileExists (const char *path)

int AG_FileDelete (const char *path)

The AG_GetFileInfo() function returns information about the specified filesystem object, into the structure:
typedef struct ag_file_info {
	enum ag_file_info_type type;
	int perms;
	int flags;
} AG_FileInfo;

The type field can take on the values:
AG_FILE_DIRECTORYFile represents a directory
AG_FILE_DEVICEFile is a special device
AG_FILE_SYMLINKFile is a symbolic link
AG_FILE_SOCKETFile is a Unix-domain socket

The perms field can contain the following permission flags, assumed to be true under the effective privileges of the current process:
AG_FILE_READABLEFile may be read from
AG_FILE_WRITEABLEFile may be written to
AG_FILE_EXECUTABLEFile is executable

The flags field allows the following values:
AG_FILE_SUIDFile has setuid bit set
AG_FILE_SGIDFile has setgid bit set
AG_FILE_ARCHIVEFile is marked as being an archive
AG_FILE_HIDDENFile is marked as hidden
AG_FILE_TEMPORARYFile is marked as temporary


int AG_MkDir (const char *path)

int AG_MkPath (const char *path)

int AG_RmDir (const char *path)

int AG_ChDir (const char *path)

void AG_GetCWD (char *dst, size_t dstLen)

AG_Dir * AG_OpenDir (const char *path)

void AG_CloseDir (AG_Dir *dir)

The AG_MkDir() function creates a new directory under the specified path. The AG_MkPath() variant tries to create additional directories if elements of the path are missing. Both return 0 on success, -1 on failure.

AG_RmDir() removes the specified directory, assumed to be empty, returning 0 on success and -1 on failure.

The AG_ChDir() function changes the working directory to the specified value, returning 0 on success and -1 on failure. AG_GetCWD() returns the current working directory path into dst, assumed to be dstLen bytes in size.

AG_OpenDir() opens the specified directory. If successful, the function returns a newly allocated AG_Dir structure:
typedef struct ag_dir {
	char **ents;		/* Filenames */
	int nents;
} AG_Dir;

The ents array contains the filenames for all directory entries. Regardless of the filesystem's character encoding, ents is in UTF-8 encoding.

AG_CloseDir() closes the given directory.


const char * AG_ShortFilename (const char *path)

void AG_RegisterFileExtMappings (const AG_FileExtMapping *map, Uint count)

AG_ShortFilename() returns a pointer to the first character of the last element of a pathname path.

Agar maintains a general-purpose table mapping file extensions to Agar object classes. The AG_RegisterFileExtMappings() function registers a set of new file extension descriptions. The map argument should point to an array containing up to count items:
typedef struct ag_file_ext_mapping {
	const char *ext;
	const char *descr;
	void *cls;
	int editDirect;
} AG_FileExtMapping;

The ext member should be set to the file extension, including the leading dot. descr is a short description string. The cls pointer should be set to to an Agar object class (see AG_ObjectClass(3)) with a load() function capable of loading files with the given extension. Set editDirect to 1 to advise that objects of this class may be freely created, loaded from file and directly edited with the edit function of the class.


AG_DataSource(3), AG_Intro(3), AG_Version(3)


The AG_File interface officially appeared in Agar 1.3.3.