~ruther/CTU-FEE-B0B35APO-Semestral-project

7e60961333b827544ac11820f7504956b1b89ebd — František Boháček 3 years ago 7db45d6
refactor: fix inconsistency in file access function definitions
2 files changed, 40 insertions(+), 5 deletions(-)

M file-browser/include/file_access.h
M file-browser/src/file_access.c
M file-browser/include/file_access.h => file-browser/include/file_access.h +20 -5
@@ 1,6 1,10 @@
#ifndef __FILE_ACCESS_H__
#define __FILE_ACCESS_H__

#include <stdbool.h>
#include <stdint.h>
#include <sys/types.h>
#include "file_execute.h"

typedef enum {
  TYPE_FOLDER,


@@ 46,6 50,8 @@ typedef enum {
  FILOPER_PERMISSIONS,
  FILOPER_DOES_NOT_EXIST,
  FILOPER_USED,
  FILOPER_ALREADY_EXISTS,
  FILOPER_NOT_ENOUGH_SPACE,
  FILOPER_UNKNOWN,
} file_operation_error_t;



@@ 53,9 59,9 @@ typedef struct {
  bool error;
  union {
    file_operation_error_t error;
    pid_t pid;
    executing_file_t file;
  } payload;
} pid_or_error_t;
} executing_file_or_error_t;

typedef struct {
  bool error;


@@ 90,9 96,9 @@ typedef pid_or_error_t (*execute_file_fn)(fileaccess_state_t state,
                                          file_t *file, char *args);

typedef file_operation_error_t (*delete_directory_fn)(fileaccess_state_t state,
                                                      directory_t *directory);
                                                      char *path);
typedef file_operation_error_t (*delete_file_fn)(fileaccess_state_t state,
                                                 directory_t *directory);
                                                 char *path);

struct fileaccess_t {
  fileaccess_type_t type;


@@ 136,7 142,8 @@ extern const fileaccess_t
extern const fileaccess_t
    temp_file_access; // state is /tmp directory descriptor

extern const fileaccess_connector_t connectors[FA_COUNT*FA_COUNT];
extern uint8_t connectors_count;
extern const fileaccess_connector_t connectors[(FA_COUNT-1)*FA_COUNT];

fileaccess_state_t fileaccess_init(const fileaccess_t *fileaccess, void *data);
bool fileaccess_deinit(fileaccess_state_t state);


@@ 151,9 158,17 @@ directory_or_error_t fileaccess_directory_create(fileaccess_state_t state,
file_operation_error_t fileaccess_directory_close(fileaccess_state_t state,
                                                  directory_t *directory);

file_operation_error_t fileaccess_directory_delete(fileaccess_state_t state,
                                                  directory_t *directory);

file_operation_error_t fileaccess_file_get_mimetype(fileaccess_state_t state,
                                                    file_t *file,
                                                    /*out*/ char *mime);

pid_or_error_t fileaccess_file_execute(fileaccess_state_t state, file_t *file,
                                       char *args);
pid_or_error_t fileaccess_file_delete(fileaccess_state_t state, char *path);

file_operation_error_t file_operation_error_from_errno(int error);

#endif // __FILE_ACCESS_H__

M file-browser/src/file_access.c => file-browser/src/file_access.c +20 -0
@@ 1,5 1,8 @@
#include "file_access.h"
#include <string.h>
#include <errno.h>

uint8_t connectors_count = 1;

fileaccess_state_t fileaccess_init(const fileaccess_t *fileaccess, void *data) {
  return fileaccess->init(data);


@@ 38,3 41,20 @@ pid_or_error_t fileaccess_file_execute(fileaccess_state_t state, file_t *file,
                                       char *args) {
  return state.fileaccess->execute_file(state, file, args);
}

file_operation_error_t file_operation_error_from_errno(int error) {
  switch (error) {
  case EACCES:
  case EROFS:
    return FILOPER_PERMISSIONS;
  case EEXIST:
  case ENOTDIR:
    return FILOPER_ALREADY_EXISTS;
  case ENOENT:
    return FILOPER_DOES_NOT_EXIST;
  case ENOSPC:
    return FILOPER_NOT_ENOUGH_SPACE;
  default:
    return FILOPER_UNKNOWN;
  }
}

Do not follow this link