Skip to content
3 changes: 2 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,8 @@ else()
endif()

set(PLUGIN_GENERATED_FILES
${GENERATED_SOURCE_DIR}/generated/plugins/src/FilePlugin/FilePlugin.c)
${GENERATED_SOURCE_DIR}/generated/plugins/src/FilePlugin/FilePlugin.c
${GENERATED_SOURCE_DIR}/generated/plugins/src/NewFilePlugin/NewFilePlugin.c)


if(FLAVOUR MATCHES "CoInterpreter")
Expand Down
2 changes: 2 additions & 0 deletions cmake/plugins.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ if(WIN)
target_compile_definitions(FilePlugin PRIVATE "-DWIN32_FILE_SUPPORT")
endif()

add_vm_plugin(NewFilePlugin TRUE TRUE)


add_vm_plugin(FileAttributesPlugin FALSE TRUE)
target_link_libraries(FileAttributesPlugin PRIVATE FilePlugin)
Expand Down
2 changes: 1 addition & 1 deletion cmake/versionExtraction.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ endif()
if (GIT_FOUND AND VERSION_UPDATE_FROM_GIT)

# Get last tag from git
execute_process(COMMAND ${GIT_EXECUTABLE} describe --abbrev=0 --tags
execute_process(COMMAND ${GIT_EXECUTABLE} describe --abbrev=0 --tags --always
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE ${PROJECT_NAME}_VERSION_STRING
OUTPUT_STRIP_TRAILING_WHITESPACE)
Expand Down
1 change: 1 addition & 0 deletions cmake/vmmaker.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ endif()

set(PLUGIN_GENERATED_FILES
${PHARO_CURRENT_GENERATED}/plugins/src/FilePlugin/FilePlugin.c
${PHARO_CURRENT_GENERATED}/plugins/src/NewFilePlugin/NewFilePlugin.c
${PHARO_CURRENT_GENERATED}/plugins/src/SurfacePlugin/SurfacePlugin.c
${PHARO_CURRENT_GENERATED}/plugins/src/FloatArrayPlugin/FloatArrayPlugin.c)

Expand Down
143 changes: 143 additions & 0 deletions plugins/NewFilePlugin/include/common/NewFile.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
#ifndef PHARO_NEWFILE_H
#define PHARO_NEWFILE_H

#include <stddef.h>
#include <stdint.h>
#include <stdbool.h>

#define PHARO_NEWFILE_EXPORT

typedef struct NewDirectory_s NewDirectory_t;
typedef struct NewFile_s NewFile_t;

typedef enum NewFileOpenMode_e
{
NewFileOpenModeReadOnly = 0,
NewFileOpenModeWriteOnly,
NewFileOpenModeReadWrite,
} NewFileOpenMode_t;

typedef enum NewFileCreationDisposition_e
{
NewFileCreationDispositionCreateNew = 1,
NewFileCreationDispositionCreateAlways,
NewFileCreationDispositionOpenExisting,
NewFileCreationDispositionOpenAlways,
NewFileCreationDispositionTruncateExisting,
} NewFileCreationDisposition_t;

typedef enum NewFileOpenFlags_e
{
NewFileOpenFlagsNone = 0,
NewFileOpenFlagsAppend = 1<<0,
} NewFileOpenFlags_t;

typedef enum NewFileSeekMode_e
{
NewFileSeekModeSet = 0,
NewFileSeekModeCurrent,
NewFileSeekModeEnd,
} NewFileSeekMode_t;

typedef enum NewFileMemMapProtection_e
{
NewFileMemMapProtectionReadOnly = 0,
NewFileMemMapProtectionReadWrite,
} NewFileMemMapProtection_t;

/**
* Creates a directory.
*/
PHARO_NEWFILE_EXPORT bool NewDirectory_create(const char *path, size_t pathSize);

/**
* Removes an empty directory
*/
PHARO_NEWFILE_EXPORT bool NewDirectory_removeEmpty(const char *path, size_t pathSize);

/**
* Opens a directory.
*/
PHARO_NEWFILE_EXPORT NewDirectory_t *NewDirectory_open(const char *path, size_t pathSize);

/**
* Rewinds a directory.
*/
PHARO_NEWFILE_EXPORT bool NewDirectory_rewind(NewDirectory_t *directory);

/**
* Gets the next entry.
*/
PHARO_NEWFILE_EXPORT const char *NewDirectory_next(NewDirectory_t *directory);

/**
* Closes a directory
*/
PHARO_NEWFILE_EXPORT void NewDirectory_close(NewDirectory_t *directory);

/**
* Deletes a file
*/
PHARO_NEWFILE_EXPORT bool NewFile_deleteFile(const char *path, size_t pathSize);

/**
* Opens a file.
*/
PHARO_NEWFILE_EXPORT NewFile_t *NewFile_open(const char *path, size_t pathSize, NewFileOpenMode_t mode, NewFileCreationDisposition_t creationDisposition, NewFileOpenFlags_t flags);

/*+
* Closes the file
*/
PHARO_NEWFILE_EXPORT void NewFile_close(NewFile_t *file);

/*+
* Get file size
*/
PHARO_NEWFILE_EXPORT int64_t NewFile_getSize(NewFile_t *file);

/*+
* Seeks
*/
PHARO_NEWFILE_EXPORT void NewFile_seek(NewFile_t *file, int64_t offset, NewFileSeekMode_t seekMode);

/**
* Tell the current file position.
*/
PHARO_NEWFILE_EXPORT int64_t NewFile_tell(NewFile_t *file);

/**
* Sets the file size.
*/
PHARO_NEWFILE_EXPORT bool NewFile_truncate(NewFile_t *file, uint64_t newFileSize);

/**
* Read
*/
PHARO_NEWFILE_EXPORT int64_t NewFile_read(NewFile_t *file, void * buffer, size_t bufferOffset, size_t readSize);

/**
* Write
*/
PHARO_NEWFILE_EXPORT int64_t NewFile_write(NewFile_t *file, const void * buffer, size_t bufferOffset, size_t writeSize);

/**
* Read at offset
*/
PHARO_NEWFILE_EXPORT int64_t NewFile_readAtOffset(NewFile_t *file, void * buffer, size_t bufferOffset, size_t readSize, uint64_t offset);

/**
* Write
*/
PHARO_NEWFILE_EXPORT int64_t NewFile_writeAtOffset(NewFile_t *file, const void * buffer, size_t bufferOffset, size_t writeSize, uint64_t offset);

/**
* Memory Map
*/
PHARO_NEWFILE_EXPORT void * NewFile_memoryMap(NewFile_t *file, NewFileMemMapProtection_t protection);

/**
* Memory Unmap
*/
PHARO_NEWFILE_EXPORT void NewFile_memoryUnmap(NewFile_t *file);

#endif // PHARO_NEWFILE_H
8 changes: 8 additions & 0 deletions plugins/NewFilePlugin/include/common/NewFilePlugin.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#ifndef NEW_FILE_PLUGIN_H
#define NEW_FILE_PLUGIN_H

#pragma once

#include "NewFile.h"

#endif //NEW_FILE_PLUGIN_H
Loading