#include <unistd.h> // for unlink
#include <sys/types.h>
#include <dirent.h> // for opendir, readdir
-
+#include <assert.h>
#include "dahelper.h"
const char *lib_string[NUM_ORIGINAL_LIBRARY] = {
return 0;
}
+
+static int absolute_filepath_p(const char *fname)
+{
+ return fname[0] == '/';
+}
+
+/* Return pointer to static buffer */
+char *absolutize_filepath(char buffer[PATH_MAX], const char *fname)
+{
+ char cwd[PATH_MAX];
+
+ assert(fname && "Filename, passed to stdc function is NULL.");
+ if (absolute_filepath_p(fname) || getcwd(cwd, sizeof(cwd)) == NULL)
+ snprintf(buffer, sizeof(buffer), "%s", fname);
+ else
+ snprintf(buffer, sizeof(buffer), "%s/%s", cwd, fname);
+ return buffer;
+}
+
//wchar_t* -> char*
void WcharToChar(char* pstrDest, const wchar_t* pwstrSrc);
-
+char *absolutize_filepath(char buf[PATH_MAX], const char *fname);
void application_exit();
// screen capture functions
int open(const char* path, int oflag, ...)
{
static int (*openp)(const char* path, int oflag, ...);
+ char buffer[PATH_MAX];
int mode = 0;
BEFORE_ORIGINAL_FILE_NOFILTER(open, LIBC);
ret = openp(path, oflag, mode);
- AFTER_PACK_ORIGINAL_FD(API_ID_open,
- ret, 0, ret, FD_API_OPEN, "sdd", path, oflag, mode);
+ AFTER_PACK_ORIGINAL_FD(API_ID_open, ret, 0, ret, FD_API_OPEN, "sdd",
+ absolutize_filepath(buffer, path), oflag, mode);
return ret;
}
int openat(int fd, const char* path, int oflag, ...)
{
static int (*openatp)(int fd, const char* path, int oflag, ...);
+ char buffer[PATH_MAX];
int mode = 0;
BEFORE_ORIGINAL_FILE_NOFILTER(openat, LIBC);
ret = openatp(fd, path, oflag, mode);
- AFTER_PACK_ORIGINAL_FD(API_ID_openat,
- ret, 0, ret, FD_API_OPEN, "dsdd", fd, path, oflag, mode);
+ AFTER_PACK_ORIGINAL_FD(API_ID_openat, ret, 0, ret, FD_API_OPEN, "dsdd",
+ fd, absolutize_filepath(buffer, path), oflag,
+ mode);
return ret;
}
int creat(const char* path, mode_t mode)
{
static int (*creatp)(const char* path, mode_t mode);
+ char buffer[PATH_MAX];
BEFORE_ORIGINAL_FILE_NOFILTER(creat, LIBC);
_filepath = (char*)path;
ret = creatp(path, mode);
- AFTER_PACK_ORIGINAL_FD(API_ID_creat,
- ret, 0, ret, FD_API_OPEN, "sd", path, mode);
+ AFTER_PACK_ORIGINAL_FD(API_ID_creat, ret, 0, ret, FD_API_OPEN, "sd",
+ absolutize_filepath(buffer, path), mode);
return ret;
}
FILE* fopen(const char* filename, const char* mode)
{
static FILE* (*fopenp)(const char* filename, const char* mode);
+ char buffer[PATH_MAX];
FILE* fret;
BEFORE_ORIGINAL_FILE_NOFILTER(fopen, LIBC);
fret = fopenp(filename, mode);
- AFTER_PACK_ORIGINAL_FILEP(API_ID_fopen,
- fret, 0, fret, FD_API_OPEN, "ss", filename, mode);
+ AFTER_PACK_ORIGINAL_FILEP(API_ID_fopen, fret, 0, fret, FD_API_OPEN, "ss",
+ absolutize_filepath(buffer, filename),
+ mode);
return fret;
}
FILE* freopen(const char * filename, const char * mode, FILE * stream)
{
- static FILE* (*freopenp)(const char * filename, const char * mode, FILE * stream);
+ static FILE* (*freopenp)(const char *filename, const char *mode,
+ FILE *stream);
+ char buffer[PATH_MAX];
FILE* fret;
BEFORE_ORIGINAL_FILE_NOFILTER(freopen, LIBC);
fret = freopenp(filename, mode, stream);
- AFTER_PACK_ORIGINAL_FILEP(API_ID_freopen,
- fret, 0, fret, FD_API_OPEN, "ssp", filename, mode, stream);
+ AFTER_PACK_ORIGINAL_FILEP(API_ID_freopen, fret, 0, fret, FD_API_OPEN,
+ "ssp", absolutize_filepath(buffer, filename),
+ mode, stream);
return fret;
}
"ppdx", stream, buf, mode, size);
return ret;
}
-
*/
#include <FIo.h>
+#include <linux/limits.h>
#include "daprobe.h"
#include "probeinfo.h"
#include "dahelper.h"
ret = (this->*Constructp)(filePath, openMode, createParentDirectories);
if(postBlockBegin(blockresult)) {
+ char buffer[PATH_MAX];
+
if(E_SUCCESS == File::GetAttributes(this->GetName(), attr))
size = attr.GetFileSize();
WcharToChar(temp_path,filePath.GetPointer());
PREPARE_LOCAL_BUF();
PACK_COMMON_BEGIN(MSG_PROBE_RESOURCE, API_ID_result_File__Construct_const_Tizen__Base__String__filePath__const_Tizen__Base__String__openMode__bool_createParentDirectories_,
- "ssd", temp_path, temp_mode, createParentDirectories);
+ "ssd", absolutize_filepath(buffer,temp_path),
+ temp_mode, createParentDirectories);
PACK_COMMON_END(ret, ret, blockresult);
PACK_RESOURCE(0, (unsigned long)this, FD_API_OPEN, size, temp_path);
FLUSH_LOCAL_BUF();
ret = (this->*Constructp)(filePath, openMode);
if(postBlockBegin(blockresult)) {
+ char buffer[PATH_MAX];
+
WcharToChar(temp_path,filePath.GetPointer());
WcharToChar(temp_mode,openMode.GetPointer());
// Comment this because of fault during Internet application profiling
PREPARE_LOCAL_BUF();
PACK_COMMON_BEGIN(MSG_PROBE_RESOURCE,
API_ID_result_File__Construct_const_Tizen__Base__String__filePath__const_Tizen__Base__String__openMode_,
- "ss", temp_path, temp_mode);
+ "ss", absolutize_filepath(buffer, temp_path),
+ temp_mode);
PACK_COMMON_END(ret, ret, blockresult);
PACK_RESOURCE(0, (unsigned long)this, FD_API_OPEN, size, temp_path);
FLUSH_LOCAL_BUF();
ret = (this->*Constructp)(filePath, pOpenMode);
if(postBlockBegin(blockresult)) {
+ char buffer[PATH_MAX];
WcharToChar(temp,filePath.GetPointer());
if(E_SUCCESS == File::GetAttributes(this->GetName(), attr))
PREPARE_LOCAL_BUF();
PACK_COMMON_BEGIN(MSG_PROBE_RESOURCE,
API_ID_result_File__Construct_const_Tizen__Base__String__filePath__const_char__pOpenMode_,
- "sp", temp, pOpenMode);
+ "sp", absolutize_filepath(buffer, temp),
+ pOpenMode);
PACK_COMMON_END(ret, ret, blockresult);
PACK_RESOURCE(0, (unsigned long)this, FD_API_OPEN, size, temp);
FLUSH_LOCAL_BUF();