123 lines
2.5 KiB
C
123 lines
2.5 KiB
C
/*
|
|
* Copyright © 2009 Keith Packard <keithp@keithp.com>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
|
|
*/
|
|
|
|
#include <string.h>
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <unistd.h>
|
|
#include <gconf/gconf-client.h>
|
|
#include "cc.h"
|
|
|
|
static char *cc_file_dir;
|
|
|
|
#define ALTOS_DIR_PATH "/apps/aoview/log_dir"
|
|
#define DEFAULT_DIR "AltOS"
|
|
|
|
static void
|
|
cc_file_save_conf(void)
|
|
{
|
|
GConfClient *gconf_client;
|
|
|
|
g_type_init();
|
|
gconf_client = gconf_client_get_default();
|
|
if (gconf_client)
|
|
{
|
|
gconf_client_set_string(gconf_client,
|
|
ALTOS_DIR_PATH,
|
|
cc_file_dir,
|
|
NULL);
|
|
g_object_unref(G_OBJECT(gconf_client));
|
|
}
|
|
}
|
|
|
|
static void
|
|
cc_file_load_conf(void)
|
|
{
|
|
char *file_dir;
|
|
GConfClient *gconf_client;
|
|
|
|
g_type_init();
|
|
gconf_client = gconf_client_get_default();
|
|
if (gconf_client)
|
|
{
|
|
file_dir = gconf_client_get_string(gconf_client,
|
|
ALTOS_DIR_PATH,
|
|
NULL);
|
|
g_object_unref(G_OBJECT(gconf_client));
|
|
if (file_dir)
|
|
cc_file_dir = strdup(file_dir);
|
|
}
|
|
}
|
|
|
|
void
|
|
cc_set_log_dir(char *dir)
|
|
{
|
|
cc_file_dir = strdup(dir);
|
|
cc_file_save_conf();
|
|
}
|
|
|
|
char *
|
|
cc_get_log_dir(void)
|
|
{
|
|
cc_file_load_conf();
|
|
if (!cc_file_dir) {
|
|
cc_file_dir = cc_fullname(getenv("HOME"), DEFAULT_DIR);
|
|
cc_file_save_conf();
|
|
}
|
|
return cc_file_dir;
|
|
}
|
|
|
|
char *
|
|
cc_make_filename(int serial, int flight, char *ext)
|
|
{
|
|
char base[50];
|
|
char seq[20];
|
|
struct tm tm;
|
|
time_t now;
|
|
char *full;
|
|
int r;
|
|
int sequence;
|
|
|
|
now = time(NULL);
|
|
(void) localtime_r(&now, &tm);
|
|
cc_mkdir(cc_get_log_dir());
|
|
sequence = 0;
|
|
for (;;) {
|
|
if (sequence)
|
|
snprintf(seq, sizeof(seq), "-seq-%03d", sequence);
|
|
else
|
|
seq[0] = '\0';
|
|
|
|
snprintf(base, sizeof (base), "%04d-%02d-%02d-serial-%03d-flight-%03d%s.%s",
|
|
tm.tm_year + 1900,
|
|
tm.tm_mon + 1,
|
|
tm.tm_mday,
|
|
serial,
|
|
flight,
|
|
seq,
|
|
ext);
|
|
full = cc_fullname(cc_get_log_dir(), base);
|
|
r = access(full, F_OK);
|
|
if (r < 0)
|
|
return full;
|
|
free(full);
|
|
sequence++;
|
|
}
|
|
|
|
}
|