[PROTO] File probes sends absolute filename
authorDmitry Bogatov <d.bogatov@samsung.com>
Wed, 23 Oct 2013 07:27:33 +0000 (11:27 +0400)
committerGerrit Code Review <gerrit@gerrit.vlan144.tizendev.org>
Sat, 2 Nov 2013 10:44:18 +0000 (10:44 +0000)
Change-Id: I810cccdcd17718256054c4d4e99ced2aad4f4636
Signed-off-by: Dmitry Bogatov <d.bogatov@samsung.com>
helper/dahelper.c
include/dahelper.h
probe_file/da_io_posix.c
probe_file/da_io_stdc.c
probe_tizenapi/tizen_file.cpp

index cfab600..01f1708 100755 (executable)
@@ -32,7 +32,7 @@
 #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] = {
@@ -116,3 +116,22 @@ int remove_indir(const char *dirname)
 
        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;
+}
+
index a515768..e642d3d 100755 (executable)
@@ -212,7 +212,7 @@ int __profil(int mode);
 
 //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
index 5d485ef..c263ed3 100755 (executable)
@@ -57,6 +57,7 @@ static enum DaOptions _sopt = OPT_FILE;
 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);
@@ -72,8 +73,8 @@ int open(const char* path, int oflag, ...)
 
        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;
 }
@@ -81,6 +82,7 @@ int open(const char* path, int oflag, ...)
 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);
@@ -96,8 +98,9 @@ int openat(int fd, const char* path, int oflag, ...)
 
        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;
 }
@@ -105,14 +108,15 @@ int openat(int fd, const char* path, int oflag, ...)
 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;
 }
index 81f558b..fd0390f 100644 (file)
@@ -49,6 +49,7 @@ static enum DaOptions _sopt = OPT_FILE;
 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);
@@ -56,15 +57,18 @@ FILE* fopen(const char* filename, const char* mode)
 
        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);
@@ -72,8 +76,9 @@ FILE* freopen(const char * filename, const char * mode, FILE * stream)
 
        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;
 }
@@ -624,4 +629,3 @@ int setvbuf(FILE* stream, char* buf, int mode, size_t size)
                                  "ppdx", stream, buf, mode, size);
        return ret;
 }
-
index 3a07450..03dd1b7 100755 (executable)
@@ -31,6 +31,7 @@
  */
 
 #include <FIo.h>
+#include <linux/limits.h>
 #include "daprobe.h"
 #include "probeinfo.h"
 #include "dahelper.h"
@@ -78,6 +79,8 @@ result File::Construct(const Tizen::Base::String& filePath,
        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());
@@ -85,7 +88,8 @@ result File::Construct(const Tizen::Base::String& filePath,
 
                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();
@@ -132,6 +136,8 @@ result File::Construct(const Tizen::Base::String& filePath,
        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
@@ -143,7 +149,8 @@ result File::Construct(const Tizen::Base::String& filePath,
                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();
@@ -189,6 +196,7 @@ result File::Construct(const Tizen::Base::String& filePath,
        ret = (this->*Constructp)(filePath, pOpenMode);
 
        if(postBlockBegin(blockresult)) {
+               char buffer[PATH_MAX];
 
                WcharToChar(temp,filePath.GetPointer());
                if(E_SUCCESS == File::GetAttributes(this->GetName(), attr))
@@ -197,7 +205,8 @@ result File::Construct(const Tizen::Base::String& filePath,
                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();