fix error of evlog_print option.
authorHeebum Kwak <heebum0.kwak@samsung.com>
Mon, 25 Mar 2013 08:54:20 +0000 (17:54 +0900)
committerBoram Park <boram1288.park@samsung.com>
Fri, 5 Apr 2013 05:29:03 +0000 (14:29 +0900)
Change-Id: I42e11d15ecfa07133b5df949152567154a581263

module/xdbg_module_command.c
module/xdbg_module_evlog.c
module/xdbg_module_evlog_request.c
module/xdbg_module_evlog_request.h
module/xdbg_module_types.h

index 57ad1f2..1f209bc 100755 (executable)
@@ -257,7 +257,7 @@ _CommandSetEvlogPrint (int pid, int argc, char **argv, char *reply, int *len, XD
 {
     char *evlog_path;
 
-    if (!argv[2] || strlen(argv[2]) <= 0)
+    if (argc < 3 || !argv[2] || strlen(argv[2]) <= 0)
         evlog_path = pMod->evlog_path;
     else
         evlog_path = argv[2];
index 9a7b69d..aedfa5b 100644 (file)
@@ -89,7 +89,7 @@ typedef enum
     FLUSH
 } evtType;
 
-#define EVTDATA_MASK_CLIENT         0x1
+#define EVTDATA_MASK_CLIENT_INFO    0x1
 #define EVTDATA_MASK_CLIENT_REQ     0x2
 #define EVTDATA_MASK_EVENT          0x4
 
@@ -108,37 +108,35 @@ static void _evtPrintF (int fd, const char * format, ...)
     va_end (args);
 }
 
-static void evtGetReqInfo (evtType type, ClientPtr client, xEvent *ev,
+static void evtGetReqInfo (evtType type, EvlogClientInfo *evinfo, xReq *req, xEvent *ev,
                            int *req_id, const char **req_string,
                            char **c_cmd, int *c_index, int *c_pid)
 {
-    if (type == REQUEST)
+    if (type == REQUEST && req)
     {
-        REQUEST(xReq);
-        *req_id = stuff->reqType;
-        if (stuff->reqType < EXTENSION_BASE)
-            *req_string = LookupRequestName (stuff->reqType, 0);
+        *req_id = req->reqType;
+        if (req->reqType < EXTENSION_BASE)
+            *req_string = LookupRequestName (req->reqType, 0);
         else
-            *req_string = LookupRequestName (stuff->reqType, stuff->data);
+            *req_string = LookupRequestName (req->reqType, req->data);
     }
-    else if (type == EVENT)
+    else if (type == EVENT && ev)
         *req_string = LookupEventName ((int)(ev->u.u.type));
 
-    if (client)
+    if(evinfo)
     {
-        ModuleClientInfo *info = GetClientInfo (client);
-        *c_index = info->index;
-        *c_pid = info->pid;
+        *c_index = evinfo->index;
+        *c_pid = evinfo->pid;
 
-        *c_cmd = rindex (info->command, '/');
+        *c_cmd = rindex (evinfo->command, '/');
         if (*c_cmd == NULL)
-            *c_cmd = info->command;
+            *c_cmd = evinfo->command;
         else
             *c_cmd = *c_cmd + 1;
     }
 }
 
-static void evtRecord (CARD32 msec, evtType type, ClientPtr client, xEvent *ev)
+static void evtRecord (CARD32 msec, evtType type, EvlogClientInfo *evinfo, xEvent *ev)
 {
     int mask = 0;
     int write_len = sizeof (int) +
@@ -149,15 +147,15 @@ static void evtRecord (CARD32 msec, evtType type, ClientPtr client, xEvent *ev)
     if (xev_trace_record_fd < 0)
         return;
 
-    if (client)
+    if (evinfo)
     {
-        mask |= EVTDATA_MASK_CLIENT;
-        write_len += sizeof (ClientRec);
+        mask |= EVTDATA_MASK_CLIENT_INFO;
+        write_len += sizeof (EvlogClientInfo);
 
-        if (client->requestBuffer)
+        if (evinfo->requestBuffer)
         {
             mask |= EVTDATA_MASK_CLIENT_REQ;
-            write_len += client->req_len;
+            write_len += evinfo->req_len;
         }
     }
 
@@ -188,15 +186,15 @@ static void evtRecord (CARD32 msec, evtType type, ClientPtr client, xEvent *ev)
         return;
     }
 
-    if (client)
+    if (evinfo)
     {
-        if (write (xev_trace_record_fd, client, sizeof (ClientRec)) == -1)
+        if (write (xev_trace_record_fd, evinfo, sizeof (EvlogClientInfo)) == -1)
         {
             XDBG_ERROR (MXDBG, "failed: write client\n");
             return;
         }
-        if (client->requestBuffer)
-            if (write (xev_trace_record_fd, client->requestBuffer, client->req_len) == -1)
+        if (evinfo->requestBuffer)
+            if (write (xev_trace_record_fd, evinfo->requestBuffer, evinfo->req_len) == -1)
             {
                 XDBG_ERROR (MXDBG, "failed: write requestBuffer\n");
                 return;
@@ -211,7 +209,7 @@ static void evtRecord (CARD32 msec, evtType type, ClientPtr client, xEvent *ev)
         }
 }
 
-static void evtPrintF (int fd, CARD32 msec, evtType type, ClientPtr client, xEvent *ev)
+static void evtPrintF (int fd, CARD32 msec, evtType type, EvlogClientInfo *evinfo, xEvent *ev)
 {
     int   req_id = 0;
     const char *req_string = "";
@@ -221,13 +219,20 @@ static void evtPrintF (int fd, CARD32 msec, evtType type, ClientPtr client, xEve
     int   c_index = 0;
     int   c_pid = 0;
     static CARD32 prev;
+    xReq *req = NULL;
+
+    if(evinfo)
+    {
+        req = (xReq *)evinfo->requestBuffer;
+    }
 
-    evtGetReqInfo (type, client, ev, &req_id, &req_string, &c_cmd, &c_index, &c_pid);
+    evtGetReqInfo (type, evinfo, req, ev, &req_id, &req_string, &c_cmd, &c_index, &c_pid);
 
     if (type == REQUEST)
     {
-        XDBG_RETURN_IF_FAIL (client != NULL);
-        xDbgModuleEvlogReqeust (client, tempbuf, sizeof (tempbuf));
+        XDBG_RETURN_IF_FAIL (evinfo != NULL);
+        XDBG_RETURN_IF_FAIL (req != NULL);
+        xDbgModuleEvlogReqeust (evinfo, req, tempbuf, sizeof (tempbuf));
         req_detail = tempbuf;
     }
     else if (type == EVENT)
@@ -257,11 +262,32 @@ static void evtPrint (evtType type, ClientPtr client, xEvent *ev)
     int   c_index = 0;
     int   c_pid = 0;
     CARD32 curr;
+    ModuleClientInfo *info = NULL;
+    EvlogClientInfo evinfo;
+    xReq *req = NULL;
 
     if (xev_trace_on == FALSE)
         return;
 
-    evtGetReqInfo (type, client, ev, &req_id, &req_string, &c_cmd, &c_index, &c_pid);
+    if (client)
+    {
+        info = GetClientInfo (client);
+        XDBG_RETURN_IF_FAIL (info != NULL);
+
+        memset (&evinfo, 0, sizeof (EvlogClientInfo));
+
+        evinfo.index = info->index;
+        evinfo.pid = info->pid;
+        evinfo.gid = info->gid;
+        evinfo.uid = info->uid;
+        strncpy (evinfo.command, info->command, strlen (info->command));
+        evinfo.requestBuffer = client->requestBuffer;
+        evinfo.req_len = client->req_len;
+
+        req = (xReq *)evinfo.requestBuffer;
+    }
+
+    evtGetReqInfo (type, (client)?&evinfo:NULL, req, ev, &req_id, &req_string, &c_cmd, &c_index, &c_pid);
 
     if (rc == NULL)
         rc = rulechecker_init();
@@ -272,9 +298,9 @@ static void evtPrint (evtType type, ClientPtr client, xEvent *ev)
     curr = GetTimeInMillis ();
 
     if (xev_trace_record_fd >= 0)
-        evtRecord (curr, type, client, ev);
+        evtRecord (curr, type, (client)?&evinfo:NULL, ev);
     else
-        evtPrintF (xev_trace_fd, curr, type, client, ev);
+        evtPrintF (xev_trace_fd, curr, type, (client)?&evinfo:NULL, ev);
 }
 
 static void _mergeArgs (char * target, int argc, const char ** argv)
@@ -525,7 +551,7 @@ xDbgModuleEvlogInstallHooks (XDbgModule *pMod)
         return FALSE;
     }
 
-    if (pMod->evlog_path)
+    if (pMod && pMod->evlog_path)
         xDbgModuleEvlogSetEvlogPath (pMod, -1, pMod->evlog_path, NULL, NULL);
 
     return TRUE;
@@ -787,7 +813,7 @@ xDbgModuleEvlogPrintEvlog (XDbgModule *pMod, int pid, char *evlog_path, char *re
     pointer requestBuffer = NULL;
     char fd_name[256];
 
-    if (evlog_path)
+    if (!evlog_path)
     {
         XDBG_REPLY ("failed: no evlog path\n");
         return;
@@ -813,7 +839,7 @@ xDbgModuleEvlogPrintEvlog (XDbgModule *pMod, int pid, char *evlog_path, char *re
         CARD32 msec;
         evtType type;
         int mask;
-        ClientRec client;
+        EvlogClientInfo evinfo;
         xEvent ev;
 
         total = read_len;
@@ -830,22 +856,22 @@ xDbgModuleEvlogPrintEvlog (XDbgModule *pMod, int pid, char *evlog_path, char *re
         XDBG_GOTO_IF_FAIL (read_len == sizeof (int), print_done);
         total += read_len;
 
-        if (mask & EVTDATA_MASK_CLIENT)
+        if (mask & EVTDATA_MASK_CLIENT_INFO)
         {
-            read_len = read (fd, &client, sizeof (ClientRec));
-            XDBG_GOTO_IF_FAIL (read_len == sizeof (ClientRec), print_done);
+            read_len = read (fd, &evinfo, sizeof (EvlogClientInfo));
+            XDBG_GOTO_IF_FAIL (read_len == sizeof (EvlogClientInfo), print_done);
             total += read_len;
 
-            if (mask & EVTDATA_MASK_CLIENT_REQ && client.req_len > 0)
+            if (mask & EVTDATA_MASK_CLIENT_REQ && evinfo.req_len > 0)
             {
-                requestBuffer = malloc (client.req_len);
+                requestBuffer = malloc (evinfo.req_len);
                 XDBG_GOTO_IF_FAIL (requestBuffer != NULL, print_done);
 
-                read_len = read (fd, requestBuffer, client.req_len);
-                XDBG_GOTO_IF_FAIL (read_len == client.req_len, print_done);
+                read_len = read (fd, requestBuffer, evinfo.req_len);
+                XDBG_GOTO_IF_FAIL (read_len == evinfo.req_len, print_done);
                 total += read_len;
 
-                client.requestBuffer = requestBuffer;
+                evinfo.requestBuffer = requestBuffer;
             }
         }
 
@@ -858,7 +884,7 @@ xDbgModuleEvlogPrintEvlog (XDbgModule *pMod, int pid, char *evlog_path, char *re
 
         XDBG_GOTO_IF_FAIL (evlog_len == total, print_done);
 
-        evtPrintF (cfd, msec, type, &client, &ev);
+        evtPrintF (cfd, msec, type, &evinfo, &ev);
 
         if (requestBuffer)
         {
index 0b4018f..3328325 100644 (file)
@@ -81,14 +81,15 @@ _EvlogRequestGetExtentionEntry (void)
 }
 
 static Bool
-_EvlogRequestCore (ClientPtr client, char *buf, int remain)
+_EvlogRequestCore (xReq *req, char *buf, int remain)
 {
-    REQUEST(xReq);
+    xReq *stuff = req;
+
     switch (stuff->reqType)
     {
     case X_PutImage:
         {
-            REQUEST(xPutImageReq);
+            xPutImageReq *stuff = (xPutImageReq *)req;
             snprintf (buf, remain, ": XID(%lx) size(%dx%d) dst(%d,%d)",
                 stuff->drawable,
                 stuff->width,
@@ -105,14 +106,15 @@ _EvlogRequestCore (ClientPtr client, char *buf, int remain)
 }
 
 static Bool
-_EvlogRequestShm (ClientPtr client, char *buf, int remain)
+_EvlogRequestShm (xReq *req, char *buf, int remain)
 {
-    REQUEST(xReq);
+    xReq *stuff = req;
+
     switch (stuff->data)
     {
     case X_ShmPutImage:
         {
-            REQUEST(xShmPutImageReq);
+            xShmPutImageReq *stuff = (xShmPutImageReq *)req;
             snprintf (buf, remain, ": XID(%lx) size(%dx%d) src(%d,%d %dx%d) dst(%d,%d)",
                 stuff->drawable,
                 stuff->totalWidth,
@@ -133,34 +135,32 @@ _EvlogRequestShm (ClientPtr client, char *buf, int remain)
 }
 
 Bool
-xDbgModuleEvlogReqeust (ClientPtr client, char *buf, int remain)
+xDbgModuleEvlogReqeust (EvlogClientInfo *evinfo, xReq *req, char *buf, int remain)
 {
     const char *req_name;
     int len;
 
-    if (!_EvlogRequestGetExtentionEntry ())
+    if (!_EvlogRequestGetExtentionEntry () || !req)
         return FALSE;
 
-    REQUEST(xReq);
-
-    if (stuff->reqType < EXTENSION_BASE)
+    if (req->reqType < EXTENSION_BASE)
     {
-        req_name = LookupRequestName (stuff->reqType, 0);
+        req_name = LookupRequestName (req->reqType, 0);
         len = snprintf (buf, remain, "%s", req_name);
         buf += len;
         remain -= len;
 
-        return _EvlogRequestCore (client, buf, remain);
+        return _EvlogRequestCore (req, buf, remain);
     }
     else
     {
-        req_name = LookupRequestName (stuff->reqType, stuff->data);
+        req_name = LookupRequestName (req->reqType, req->data);
         len = snprintf (buf, remain, "%s", req_name);
         buf += len;
         remain -= len;
 
-        if (stuff->reqType == xext->base)
-           return _EvlogRequestShm (client, buf, remain);
+        if (req->reqType == xext->base)
+           return _EvlogRequestShm (req, buf, remain);
     }
 
     return FALSE;
index f299dce..cad513d 100644 (file)
@@ -34,6 +34,6 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 #include "xdbg_module_types.h"
 
-Bool  xDbgModuleEvlogReqeust (ClientPtr pClient, char *buf, int remain);
+Bool  xDbgModuleEvlogReqeust (EvlogClientInfo *evinfo, xReq *req , char *buf, int remain);
 
 #endif /* __XDBG_MODULE_EVLOG_REQUEST_H__ */
index f8c424c..706b4d9 100644 (file)
@@ -66,6 +66,17 @@ typedef struct _XDbgModule
     char *evlog_path;
 } XDbgModule;
 
+typedef struct _EvlogClientInfo
+{
+    int    index;
+    int    pid;
+    int    gid;
+    int    uid;
+    char   command[PATH_MAX+1];
+    pointer requestBuffer;
+    CARD32 req_len;
+} EvlogClientInfo;
+
 extern DevPrivateKeyRec debug_client_key;
 #define DebugClientKey (&debug_client_key)
 #define GetClientInfo(pClient) ((ModuleClientInfo*)dixLookupPrivate(&(pClient)->devPrivates, DebugClientKey))