blob: a53495b759b8b50ed862898a3acee344dcc6b33a [file] [log] [blame]
// SPDX-License-Identifier: GPL-2.0
/*
* Copyright (c) 2019 MediaTek Inc.
*/
#include "util.h"
#include <linux/fs.h>
#include <linux/kernel.h>
/* #include <asm/uaccess.h> */
#include <linux/uaccess.h>
#ifdef FILELOG
static char tmp[1000] = { 0 };
/*TODO*/
/**
* open file
* @param name path to open
* @return file pointer
*/
struct file *open_file(const char *name)
{
struct file *fp = NULL;
fp = filp_open(name, O_WRONLY | O_APPEND /*| O_TRUNC */ | O_CREAT, 0664);
if (unlikely(fp == NULL)) {
pr_debug(KERNEL_INFO "can not open result file");
return NULL;
}
return fp;
}
/**
* write to file
* @param fp file pointer
* @param format format string
* @param ... variable-length subsequent arguments
*/
void write_file(struct file *fp, const char *format, ...)
{
va_list va;
mm_segment_t fs = get_fs();
va_start(va, format);
vsnprintf(tmp, sizeof(tmp), format, va);
set_fs(KERNEL_DS);
vfs_write(fp, tmp, strlen(tmp), &(fp->f_pos));
set_fs(fs);
va_end(va);
}
/**
* close file
* @param fp file pointer
* @return exit code
*/
int close_file(struct file *fp)
{
if (likely(fp != NULL)) {
filp_close(fp, NULL);
fp = NULL;
return 0;
}
pr_debug("cannot close file pointer:%p\n", fp);
return -1;
}
void filelog(char *str)
{
struct file *fp;
fp = open_file("/data/met.log");
if (fp != NULL) {
write_file(fp, "%s", str);
close_file(fp);
}
}
#endif /* FILELOG */