You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

63 lines
1.3 KiB
C

#include "marker.h"
#include "json/json.h"
#include "json/layout.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#define OBJ_TYPE struct marker
static struct json_object_field marker_layout[] = {
JSON_FIELD_STRING( last_read_id, false ),
JSON_FIELD_INTEGER( version, true ),
JSON_FIELD_DATETIME( updated_at, false ),
JSON_FIELD_END
};
#undef OBJ_TYPE
struct marker* marker_from_name( const char* name )
{
if( strstr( name, "../" ) ) { return NULL; }
struct marker* m;
m = malloc(sizeof(*m));
memset(m,0,sizeof(*m));
m->updated_at = time(NULL);
m->name = strdup(name);
char filename[512];
snprintf(filename,512,"data/owner/markers/%s.json", name );
json_read_object_layout_from_file( filename, marker_layout, m );
return m;
}
void marker_free( struct marker* m )
{
if( !m ) { return; }
free(m->last_read_id);
free(m->name);
free(m);
}
void marker_write_to_FILE( struct marker* m, FILE* f )
{
json_write_object_layout_to_FILE( f, "", marker_layout, m );
}
void marker_save( struct marker* m )
{
if( !m->name ) { return; }
mkdir( "data/owner", 0755 );
mkdir( "data/owner/markers", 0755 );
char filename[512];
snprintf(filename,512,"data/owner/markers/%s.json", m->name );
json_write_object_layout_to_file( filename, "\t", marker_layout, m );
}