core/file.c: Convert file to C
Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
parent
7529ccd4cc
commit
cf6364f5d1
|
@ -1,4 +1,4 @@
|
||||||
/**
|
/*
|
||||||
* Copyright 2013 (c) Anna Schumaker.
|
* Copyright 2013 (c) Anna Schumaker.
|
||||||
*/
|
*/
|
||||||
#include <core/file.h>
|
#include <core/file.h>
|
||||||
|
@ -66,7 +66,7 @@ bool file_exists(struct file *file)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool __file_open_common(struct file *file, OpenMode mode)
|
static bool __file_open_common(struct file *file, enum open_mode mode)
|
||||||
{
|
{
|
||||||
gchar *path = file_path(file);
|
gchar *path = file_path(file);
|
||||||
file->f_file = g_fopen(path, (mode == OPEN_READ) ? "r" : "w");
|
file->f_file = g_fopen(path, (mode == OPEN_READ) ? "r" : "w");
|
||||||
|
@ -99,7 +99,7 @@ static bool __file_open_write(struct file *file)
|
||||||
return file_writef(file, "%d\n", file->f_version) > 0;
|
return file_writef(file, "%d\n", file->f_version) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool file_open(struct file *file, OpenMode mode)
|
bool file_open(struct file *file, enum open_mode mode)
|
||||||
{
|
{
|
||||||
if ((strlen(file->f_name) == 0) || (file->f_file != NULL))
|
if ((strlen(file->f_name) == 0) || (file->f_file != NULL))
|
||||||
return false;
|
return false;
|
|
@ -4,7 +4,9 @@
|
||||||
#ifndef OCARINA_CORE_DATABASE_H
|
#ifndef OCARINA_CORE_DATABASE_H
|
||||||
#define OCARINA_CORE_DATABASE_H
|
#define OCARINA_CORE_DATABASE_H
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
#include <core/file.h>
|
#include <core/file.h>
|
||||||
|
}
|
||||||
|
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
|
@ -1,28 +1,6 @@
|
||||||
/**
|
/*
|
||||||
* Copyright 2013 (c) Anna Schumaker.
|
* Copyright 2013 (c) Anna Schumaker.
|
||||||
*/
|
*
|
||||||
#ifndef OCARINA_CORE_FILE_H
|
|
||||||
#define OCARINA_CORE_FILE_H
|
|
||||||
|
|
||||||
#include <glib.h>
|
|
||||||
#include <glib/gstdio.h>
|
|
||||||
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
|
|
||||||
#define FILE_MAX_LEN 16
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constants defining how files can be opened.
|
|
||||||
*/
|
|
||||||
enum OpenMode {
|
|
||||||
OPEN_READ, /**< File is open for reading. */
|
|
||||||
OPEN_WRITE, /**< File is open for writing. */
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* File data is store in the user's home directory according to the
|
* File data is store in the user's home directory according to the
|
||||||
* XDG / freedesktop.org specification, meaning all of our data will
|
* XDG / freedesktop.org specification, meaning all of our data will
|
||||||
* be stored in a subdirectory of $XDG_DATA_HOME. The actual subdirectory
|
* be stored in a subdirectory of $XDG_DATA_HOME. The actual subdirectory
|
||||||
|
@ -35,19 +13,30 @@ enum OpenMode {
|
||||||
* CONFIG_DEBUG | $XDG_DATA_HOME/ocarina-debug/
|
* CONFIG_DEBUG | $XDG_DATA_HOME/ocarina-debug/
|
||||||
* CONFIG_TESTING | $XDG_DATA_HOME/ocarina-test/
|
* CONFIG_TESTING | $XDG_DATA_HOME/ocarina-test/
|
||||||
*
|
*
|
||||||
* Data should be written to files using either a space or newline as a
|
* The beginning of every file is the current file version followed by a
|
||||||
* delimiter. The beginning of every file is the current file version
|
* newline. For example:
|
||||||
* followed by a newline. For example:
|
|
||||||
*
|
*
|
||||||
* 42
|
* 42
|
||||||
* <data> <more data>
|
* <data> <more data>
|
||||||
* <even more data>
|
* <even more data>
|
||||||
*
|
|
||||||
* Data should be written to files using either a space or newline as
|
|
||||||
* a delimiter.
|
|
||||||
*/
|
*/
|
||||||
|
#ifndef OCARINA_CORE_FILE_H
|
||||||
|
#define OCARINA_CORE_FILE_H
|
||||||
|
|
||||||
|
#include <glib.h>
|
||||||
|
#include <glib/gstdio.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
|
||||||
|
#define FILE_MAX_LEN 16
|
||||||
|
|
||||||
|
enum open_mode {
|
||||||
|
OPEN_READ,
|
||||||
|
OPEN_WRITE,
|
||||||
|
};
|
||||||
|
|
||||||
struct file {
|
struct file {
|
||||||
OpenMode f_mode; /* The file's current open mode. */
|
enum open_mode f_mode; /* The file's current open mode. */
|
||||||
unsigned int f_version; /* The file's current data version. */
|
unsigned int f_version; /* The file's current data version. */
|
||||||
unsigned int f_prev; /* The file's on-disk data version. */
|
unsigned int f_prev; /* The file's on-disk data version. */
|
||||||
FILE *f_file; /* The file's IO stream. */
|
FILE *f_file; /* The file's IO stream. */
|
||||||
|
@ -84,7 +73,7 @@ bool file_exists(struct file *);
|
||||||
*
|
*
|
||||||
* Returns true if the open was successful and false otherwise.
|
* Returns true if the open was successful and false otherwise.
|
||||||
*/
|
*/
|
||||||
bool file_open(struct file *, OpenMode);
|
bool file_open(struct file *, enum open_mode);
|
||||||
|
|
||||||
/* Close an open file, setting file->f_file to NULL. */
|
/* Close an open file, setting file->f_file to NULL. */
|
||||||
void file_close(struct file *);
|
void file_close(struct file *);
|
||||||
|
|
|
@ -4,7 +4,9 @@
|
||||||
#ifndef OCARINA_CORE_QUEUE_H
|
#ifndef OCARINA_CORE_QUEUE_H
|
||||||
#define OCARINA_CORE_QUEUE_H
|
#define OCARINA_CORE_QUEUE_H
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
#include <core/file.h>
|
#include <core/file.h>
|
||||||
|
}
|
||||||
#include <core/tags/track.h>
|
#include <core/tags/track.h>
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
|
@ -16,7 +16,7 @@ Export("core_objs")
|
||||||
res = [ CoreTest("version", "version.c") ]
|
res = [ CoreTest("version", "version.c") ]
|
||||||
res += [ CoreTest("string", "string.c") ]
|
res += [ CoreTest("string", "string.c") ]
|
||||||
res += [ CoreTest("random", "random.c") ]
|
res += [ CoreTest("random", "random.c") ]
|
||||||
res += [ CoreTest("file", "file.cpp") ]
|
res += [ CoreTest("file", "file.c") ]
|
||||||
res += [ CoreTest("database", "database.cpp") ]
|
res += [ CoreTest("database", "database.cpp") ]
|
||||||
res += [ CoreTest("index", "index.cpp") ]
|
res += [ CoreTest("index", "index.cpp") ]
|
||||||
res += [ CoreTest("filter", "filter.cpp") ]
|
res += [ CoreTest("filter", "filter.cpp") ]
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
* Copyright 2014 (c) Anna Schumaker.
|
* Copyright 2014 (c) Anna Schumaker.
|
||||||
*/
|
*/
|
||||||
#include <core/file.h>
|
#include <core/file.h>
|
||||||
|
#include <tests/test.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "test.h"
|
|
||||||
|
|
||||||
|
|
||||||
static void test_verify_constructor(struct file *file, gchar *fpath)
|
static void test_verify_constructor(struct file *file, gchar *fpath)
|
||||||
|
@ -20,8 +20,7 @@ static void test_verify_constructor(struct file *file, gchar *fpath)
|
||||||
|
|
||||||
static void test_invalid_file(struct file *file)
|
static void test_invalid_file(struct file *file)
|
||||||
{
|
{
|
||||||
gchar path[] = "";
|
test_verify_constructor(file, "");
|
||||||
test_verify_constructor(file, path);
|
|
||||||
|
|
||||||
test_equal(file_open(file, OPEN_READ), (bool)false);
|
test_equal(file_open(file, OPEN_READ), (bool)false);
|
||||||
test_equal((void *)file->f_file, NULL);
|
test_equal((void *)file->f_file, NULL);
|
Loading…
Reference in New Issue