]> granicus.if.org Git - strace/blobdiff - bjm.c
Fix off_t args on FreeBSD
[strace] / bjm.c
diff --git a/bjm.c b/bjm.c
index 0c0cf66fba7daf398704d08c41807c801083d367..66cbb85486e00706c6961c36d82be3d76e566029 100644 (file)
--- a/bjm.c
+++ b/bjm.c
@@ -102,14 +102,19 @@ struct tcb *tcp;
                                char*   mod     = data;
                                size_t  idx;
 
-                               umoven(tcp, tcp->u_arg[2], tcp->u_arg[3], data);
-                               for (idx=0; idx<ret; idx++) {
-                                       if (idx!=0)
-                                               tprintf(",");
-                                       tprintf(mod);
-                                       mod+=strlen(mod)+1;
+                               if (data==NULL) {
+                                       fprintf(stderr, "sys_query_module: No memory\n");
+                                       tprintf(" /* %Zu entries */ ", ret);
+                               } else {
+                                       umoven(tcp, tcp->u_arg[2], tcp->u_arg[3], data);
+                                       for (idx=0; idx<ret; idx++) {
+                                               if (idx!=0)
+                                                       tprintf(",");
+                                               tprintf(mod);
+                                               mod+=strlen(mod)+1;
+                                       }
+                                       free(data);
                                }
-                               free(data);
                        } else 
                                tprintf(" /* %Zu entries */ ", ret);
                        tprintf("}, %Zu", ret);
@@ -122,12 +127,17 @@ struct tcb *tcp;
                                struct module_symbol*   sym     = (struct module_symbol*)data;
                                size_t                  idx;
 
-                               umoven(tcp, tcp->u_arg[2], tcp->u_arg[3], data);
-                               for (idx=0; idx<ret; idx++) {
-                                       tprintf("{name=%s, value=%lu} ", data+(long)sym->name, sym->value);
-                                       sym++;
+                               if (data==NULL) {
+                                       fprintf(stderr, "sys_query_module: No memory\n");
+                                       tprintf(" /* %Zu entries */ ", ret);
+                               } else {
+                                       umoven(tcp, tcp->u_arg[2], tcp->u_arg[3], data);
+                                       for (idx=0; idx<ret; idx++) {
+                                               tprintf("{name=%s, value=%lu} ", data+(long)sym->name, sym->value);
+                                               sym++;
+                                       }
+                                       free(data);
                                }
-                               free(data);
                        } else
                                tprintf(" /* %Zu entries */ ", ret);
                        tprintf("}, %Zd", ret);