Skip to contentSkip to conversation

Remove osdep.c/qemu-img code duplication

PATCH In review Kevin Wolf 2 participants 3 messages Apr 2, 2008 – Apr 9, 2008 Kbuild

lore
Share & tools
lore

Kevin Wolf

author
#0 lore raw

PATCH 1/1 Remove osdep.c/qemu-img code duplication

There are few helper functions (e.g. qemu_malloc) in osdep.c which are not OS dependent at all. Even the first CVS commit comment for osdep.c says "most functions are generic in fact". They are duplicated in qemu-img because osdep.c isn't used there.

This patch moves those functions to cutils.c and removes the duplicates from qemu-img.

Makefile.target +1 -0
Index: Makefile.target
===================================================================
@@ -430,6 +430,7 @@
 endif
 
 OBJS+= libqemu.a
+OBJS+= ../libqemu_common.a
 
 # Note: this is a workaround. The real fix is to avoid compiling
 # cpu_signal_handler() in cpu-exec.c.
osdep.c +0 -35
Index: osdep.c
===================================================================
@@ -45,21 +45,6 @@
 #include <malloc.h>
 #endif
 
-void *get_mmap_addr(unsigned long size)
-{
-    return NULL;
-}
-
-void qemu_free(void *ptr)
-{
-    free(ptr);
-}
-
-void *qemu_malloc(size_t size)
-{
-    return malloc(size);
-}
-
 #if defined(_WIN32)
 void *qemu_memalign(size_t alignment, size_t size)
 {
@@ -217,26 +202,6 @@
 
 #endif
 
-void *qemu_mallocz(size_t size)
-{
-    void *ptr;
-    ptr = qemu_malloc(size);
-    if (!ptr)
-        return NULL;
-    memset(ptr, 0, size);
-    return ptr;
-}
-
-char *qemu_strdup(const char *str)
-{
-    char *ptr;
-    ptr = qemu_malloc(strlen(str) + 1);
-    if (!ptr)
-        return NULL;
-    strcpy(ptr, str);
-    return ptr;
-}
-
 int qemu_create_pidfile(const char *filename)
 {
     char buffer[128];
osdep.h +0 -7
Index: osdep.h
===================================================================
@@ -47,17 +47,10 @@
 
 #define qemu_printf printf
 
-void *qemu_malloc(size_t size);
-void *qemu_mallocz(size_t size);
-void qemu_free(void *ptr);
-char *qemu_strdup(const char *str);
-
 void *qemu_memalign(size_t alignment, size_t size);
 void *qemu_vmalloc(size_t size);
 void qemu_vfree(void *ptr);
 
-void *get_mmap_addr(unsigned long size);
-
 int qemu_create_pidfile(const char *filename);
 
 #ifdef _WIN32
cutils.c +35 -0
Index: cutils.c
===================================================================
@@ -95,3 +95,38 @@
     t += 3600 * tm->tm_hour + 60 * tm->tm_min + tm->tm_sec;
     return t;
 }
+
+void *get_mmap_addr(unsigned long size)
+{
+    return NULL;
+}
+
+void qemu_free(void *ptr)
+{
+    free(ptr);
+}
+
+void *qemu_malloc(size_t size)
+{
+    return malloc(size);
+}
+
+void *qemu_mallocz(size_t size)
+{
+    void *ptr;
+    ptr = qemu_malloc(size);
+    if (!ptr)
+        return NULL;
+    memset(ptr, 0, size);
+    return ptr;
+}
+
+char *qemu_strdup(const char *str)
+{
+    char *ptr;
+    ptr = qemu_malloc(strlen(str) + 1);
+    if (!ptr)
+        return NULL;
+    strcpy(ptr, str);
+    return ptr;
+}
qemu-common.h +8 -0
Index: qemu-common.h
===================================================================
@@ -86,6 +86,14 @@
 int stristart(const char *str, const char *val, const char **ptr);
 time_t mktimegm(struct tm *tm);
 
+void *qemu_malloc(size_t size);
+void *qemu_mallocz(size_t size);
+void qemu_free(void *ptr);
+char *qemu_strdup(const char *str);
+
+void *get_mmap_addr(unsigned long size);
+
+
 /* Error handling.  */
 
 void hw_error(const char *fmt, ...)
qemu-img.c +0 -35
Index: qemu-img.c
===================================================================
@@ -30,41 +30,6 @@
 #include <windows.h>
 #endif
 
-void *get_mmap_addr(unsigned long size)
-{
-    return NULL;
-}
-
-void qemu_free(void *ptr)
-{
-    free(ptr);
-}
-
-void *qemu_malloc(size_t size)
-{
-    return malloc(size);
-}
-
-void *qemu_mallocz(size_t size)
-{
-    void *ptr;
-    ptr = qemu_malloc(size);
-    if (!ptr)
-        return NULL;
-    memset(ptr, 0, size);
-    return ptr;
-}
-
-char *qemu_strdup(const char *str)
-{
-    char *ptr;
-    ptr = qemu_malloc(strlen(str) + 1);
-    if (!ptr)
-        return NULL;
-    strcpy(ptr, str);
-    return ptr;
-}
-
 static void __attribute__((noreturn)) error(const char *fmt, ...)
 {
     va_list ap;
#1 lore raw
Quoted 7 lines · Kevin Wolf

There are few helper functions (e.g. qemu_malloc) in osdep.c which are not OS dependent at all. Even the first CVS commit comment for osdep.c says "most functions are generic in fact". They are duplicated in qemu-img because osdep.c isn't used there.

This patch moves those functions to cutils.c and removes the duplicates from qemu-img.

After applying this patch, some files in tcg/ starts to emit warning about undefined function.

The patch is a good idea though.

Quoted 195 lines

Index: Makefile.target
===================================================================

Makefile.target +1 -0
@@ -430,6 +430,7 @@
 endif
 
 OBJS+= libqemu.a
+OBJS+= ../libqemu_common.a
 
 # Note: this is a workaround. The real fix is to avoid compiling
 # cpu_signal_handler() in cpu-exec.c.

Index: osdep.c
===================================================================

osdep.c +0 -35
@@ -45,21 +45,6 @@
 #include <malloc.h>
 #endif
 
-void *get_mmap_addr(unsigned long size)
-{
-    return NULL;
-}
-
-void qemu_free(void *ptr)
-{
-    free(ptr);
-}
-
-void *qemu_malloc(size_t size)
-{
-    return malloc(size);
-}
-
 #if defined(_WIN32)
 void *qemu_memalign(size_t alignment, size_t size)
 {
@@ -217,26 +202,6 @@
 
 #endif
 
-void *qemu_mallocz(size_t size)
-{
-    void *ptr;
-    ptr = qemu_malloc(size);
-    if (!ptr)
-        return NULL;
-    memset(ptr, 0, size);
-    return ptr;
-}
-
-char *qemu_strdup(const char *str)
-{
-    char *ptr;
-    ptr = qemu_malloc(strlen(str) + 1);
-    if (!ptr)
-        return NULL;
-    strcpy(ptr, str);
-    return ptr;
-}
-
 int qemu_create_pidfile(const char *filename)
 {
     char buffer[128];

Index: osdep.h
===================================================================

osdep.h +0 -7
@@ -47,17 +47,10 @@
 
 #define qemu_printf printf
 
-void *qemu_malloc(size_t size);
-void *qemu_mallocz(size_t size);
-void qemu_free(void *ptr);
-char *qemu_strdup(const char *str);
-
 void *qemu_memalign(size_t alignment, size_t size);
 void *qemu_vmalloc(size_t size);
 void qemu_vfree(void *ptr);
 
-void *get_mmap_addr(unsigned long size);
-
 int qemu_create_pidfile(const char *filename);
 
 #ifdef _WIN32

Index: cutils.c
===================================================================

cutils.c +35 -0
@@ -95,3 +95,38 @@
     t += 3600 * tm->tm_hour + 60 * tm->tm_min + tm->tm_sec;
     return t;
 }
+
+void *get_mmap_addr(unsigned long size)
+{
+    return NULL;
+}
+
+void qemu_free(void *ptr)
+{
+    free(ptr);
+}
+
+void *qemu_malloc(size_t size)
+{
+    return malloc(size);
+}
+
+void *qemu_mallocz(size_t size)
+{
+    void *ptr;
+    ptr = qemu_malloc(size);
+    if (!ptr)
+        return NULL;
+    memset(ptr, 0, size);
+    return ptr;
+}
+
+char *qemu_strdup(const char *str)
+{
+    char *ptr;
+    ptr = qemu_malloc(strlen(str) + 1);
+    if (!ptr)
+        return NULL;
+    strcpy(ptr, str);
+    return ptr;
+}

Index: qemu-common.h
===================================================================

qemu-common.h +8 -0
@@ -86,6 +86,14 @@
 int stristart(const char *str, const char *val, const char **ptr);
 time_t mktimegm(struct tm *tm);
 
+void *qemu_malloc(size_t size);
+void *qemu_mallocz(size_t size);
+void qemu_free(void *ptr);
+char *qemu_strdup(const char *str);
+
+void *get_mmap_addr(unsigned long size);
+
+
 /* Error handling.  */
 
 void hw_error(const char *fmt, ...)

Index: qemu-img.c
===================================================================

qemu-img.c +0 -35
@@ -30,41 +30,6 @@
 #include <windows.h>
 #endif
 
-void *get_mmap_addr(unsigned long size)
-{
-    return NULL;
-}
-
-void qemu_free(void *ptr)
-{
-    free(ptr);
-}
-
-void *qemu_malloc(size_t size)
-{
-    return malloc(size);
-}
-
-void *qemu_mallocz(size_t size)
-{
-    void *ptr;
-    ptr = qemu_malloc(size);
-    if (!ptr)
-        return NULL;
-    memset(ptr, 0, size);
-    return ptr;
-}
-
-char *qemu_strdup(const char *str)
-{
-    char *ptr;
-    ptr = qemu_malloc(strlen(str) + 1);
-    if (!ptr)
-        return NULL;
-    strcpy(ptr, str);
-    return ptr;
-}
-
 static void __attribute__((noreturn)) error(const char *fmt, ...)
 {
     va_list ap;
Signature · 4 lines
  .''`.  Aurelien Jarno	            | GPG: 1024D/F1BCDB73
 : :' :  Debian developer           | Electrical Engineer
 `. `'   [email protected]         | [email protected]
   `-    people.debian.org/~aurel32 | www.aurel32.net
author
#2 lore raw
Quoted 11 lines · Aurelien Jarno
Quoted 7 lines · Kevin Wolf

There are few helper functions (e.g. qemu_malloc) in osdep.c which are not OS dependent at all. Even the first CVS commit comment for osdep.c says "most functions are generic in fact". They are duplicated in qemu-img because osdep.c isn't used there.

This patch moves those functions to cutils.c and removes the duplicates from qemu-img.

After applying this patch, some files in tcg/ starts to emit warning about undefined function.

Oops... Actually, there are quite a few more files which don't include the header but should now. And I found even a bit more of cutils.c code duplicated in tcg.c while checking the warnings. New patch is attached.

Kevin

translate.c +1 -0
Index: target-sh4/translate.c
===================================================================
@@ -32,6 +32,7 @@
 #include "exec-all.h"
 #include "disas.h"
 #include "tcg-op.h"
+#include "qemu-common.h"
 
 typedef struct DisasContext {
     struct TranslationBlock *tb;
translate.c +1 -0
Index: target-cris/translate.c
===================================================================
@@ -32,6 +32,7 @@
 #include "tcg-op.h"
 #include "helper.h"
 #include "crisv32-decode.h"
+#include "qemu-common.h"
 
 #define CRIS_STATS 0
 #if CRIS_STATS
Makefile.target +1 -0
Index: Makefile.target
===================================================================
@@ -430,6 +430,7 @@
 endif
 
 OBJS+= libqemu.a
+OBJS+= ../libqemu_common.a
 
 # Note: this is a workaround. The real fix is to avoid compiling
 # cpu_signal_handler() in cpu-exec.c.
translate.c +1 -0
Index: target-alpha/translate.c
===================================================================
@@ -26,6 +26,7 @@
 #include "exec-all.h"
 #include "disas.h"
 #include "tcg-op.h"
+#include "qemu-common.h"
 
 #define DO_SINGLE_STEP
 #define GENERATE_NOP
helper.c +1 -0
Index: target-sparc/helper.c
===================================================================
@@ -27,6 +27,7 @@
 
 #include "cpu.h"
 #include "exec-all.h"
+#include "qemu-common.h"
 
 //#define DEBUG_MMU
 
helper.c +1 -0
Index: target-m68k/helper.c
===================================================================
@@ -25,6 +25,7 @@
 #include "config.h"
 #include "cpu.h"
 #include "exec-all.h"
+#include "qemu-common.h"
 
 enum m68k_cpuid {
     M68K_CPUID_M5206,
main.c +1 -0
Index: linux-user/main.c
===================================================================
@@ -25,6 +25,7 @@
 #include <unistd.h>
 
 #include "qemu.h"
+#include "qemu-common.h"
 
 #define DEBUG_LOGFILE "/tmp/qemu.log"
 
osdep.c +0 -35
Index: osdep.c
===================================================================
@@ -45,21 +45,6 @@
 #include <malloc.h>
 #endif
 
-void *get_mmap_addr(unsigned long size)
-{
-    return NULL;
-}
-
-void qemu_free(void *ptr)
-{
-    free(ptr);
-}
-
-void *qemu_malloc(size_t size)
-{
-    return malloc(size);
-}
-
 #if defined(_WIN32)
 void *qemu_memalign(size_t alignment, size_t size)
 {
@@ -217,26 +202,6 @@
 
 #endif
 
-void *qemu_mallocz(size_t size)
-{
-    void *ptr;
-    ptr = qemu_malloc(size);
-    if (!ptr)
-        return NULL;
-    memset(ptr, 0, size);
-    return ptr;
-}
-
-char *qemu_strdup(const char *str)
-{
-    char *ptr;
-    ptr = qemu_malloc(strlen(str) + 1);
-    if (!ptr)
-        return NULL;
-    strcpy(ptr, str);
-    return ptr;
-}
-
 int qemu_create_pidfile(const char *filename)
 {
     char buffer[128];
osdep.h +0 -7
Index: osdep.h
===================================================================
@@ -47,17 +47,10 @@
 
 #define qemu_printf printf
 
-void *qemu_malloc(size_t size);
-void *qemu_mallocz(size_t size);
-void qemu_free(void *ptr);
-char *qemu_strdup(const char *str);
-
 void *qemu_memalign(size_t alignment, size_t size);
 void *qemu_vmalloc(size_t size);
 void qemu_vfree(void *ptr);
 
-void *get_mmap_addr(unsigned long size);
-
 int qemu_create_pidfile(const char *filename);
 
 #ifdef _WIN32
helper.c +1 -0
Index: target-ppc/helper.c
===================================================================
@@ -28,6 +28,7 @@
 #include "cpu.h"
 #include "exec-all.h"
 #include "helper_regs.h"
+#include "qemu-common.h"
 
 //#define DEBUG_MMU
 //#define DEBUG_BATS
translate.c +1 -0
Index: target-ppc/translate.c
===================================================================
@@ -27,6 +27,7 @@
 #include "exec-all.h"
 #include "disas.h"
 #include "tcg-op.h"
+#include "qemu-common.h"
 
 /* Include definitions for instructions classes and implementations flags */
 //#define DO_SINGLE_STEP
cutils.c +35 -0
Index: cutils.c
===================================================================
@@ -95,3 +95,38 @@
     t += 3600 * tm->tm_hour + 60 * tm->tm_min + tm->tm_sec;
     return t;
 }
+
+void *get_mmap_addr(unsigned long size)
+{
+    return NULL;
+}
+
+void qemu_free(void *ptr)
+{
+    free(ptr);
+}
+
+void *qemu_malloc(size_t size)
+{
+    return malloc(size);
+}
+
+void *qemu_mallocz(size_t size)
+{
+    void *ptr;
+    ptr = qemu_malloc(size);
+    if (!ptr)
+        return NULL;
+    memset(ptr, 0, size);
+    return ptr;
+}
+
+char *qemu_strdup(const char *str)
+{
+    char *ptr;
+    ptr = qemu_malloc(strlen(str) + 1);
+    if (!ptr)
+        return NULL;
+    strcpy(ptr, str);
+    return ptr;
+}
translate.c +1 -0
Index: target-mips/translate.c
===================================================================
@@ -30,6 +30,7 @@
 #include "exec-all.h"
 #include "disas.h"
 #include "tcg-op.h"
+#include "qemu-common.h"
 
 //#define MIPS_DEBUG_DISAS
 //#define MIPS_DEBUG_SIGN_EXTENSIONS
tcg.c +1 -31
Index: tcg/tcg.c
===================================================================
@@ -39,7 +39,7 @@
 #endif
 
 #include "config.h"
-#include "osdep.h"
+#include "qemu-common.h"
 
 /* Note: the long term plan is to reduce the dependancies on the QEMU
    CPU definitions. Currently they are used for qemu_ld/st
@@ -147,36 +147,6 @@
 
 #include "tcg-target.c"
 
-/* XXX: factorize */
-static void pstrcpy(char *buf, int buf_size, const char *str)
-{
-    int c;
-    char *q = buf;
-
-    if (buf_size <= 0)
-        return;
-
-    for(;;) {
-        c = *str++;
-        if (c == 0 || q >= buf + buf_size - 1)
-            break;
-        *q++ = c;
-    }
-    *q = '\0';
-}
-
-#if TCG_TARGET_REG_BITS == 32
-/* strcat and truncate. */
-static char *pstrcat(char *buf, int buf_size, const char *s)
-{
-    int len;
-    len = strlen(buf);
-    if (len < buf_size)
-        pstrcpy(buf + len, buf_size - len, s);
-    return buf;
-}
-#endif
-
 /* pool based memory allocation */
 void *tcg_malloc_internal(TCGContext *s, int size)
 {
qemu-common.h +8 -0
Index: qemu-common.h
===================================================================
@@ -86,6 +86,14 @@
 int stristart(const char *str, const char *val, const char **ptr);
 time_t mktimegm(struct tm *tm);
 
+void *qemu_malloc(size_t size);
+void *qemu_mallocz(size_t size);
+void qemu_free(void *ptr);
+char *qemu_strdup(const char *str);
+
+void *get_mmap_addr(unsigned long size);
+
+
 /* Error handling.  */
 
 void hw_error(const char *fmt, ...)
exec.c +1 -0
Index: exec.c
===================================================================
@@ -35,6 +35,7 @@
 
 #include "cpu.h"
 #include "exec-all.h"
+#include "qemu-common.h"
 #if defined(CONFIG_USER_ONLY)
 #include <qemu.h>
 #endif
helper2.c +1 -0
Index: target-i386/helper2.c
===================================================================
@@ -28,6 +28,7 @@
 #include "cpu.h"
 #include "exec-all.h"
 #include "svm.h"
+#include "qemu-common.h"
 
 //#define DEBUG_MMU
 
qemu-img.c +0 -35
Index: qemu-img.c
===================================================================
@@ -30,41 +30,6 @@
 #include <windows.h>
 #endif
 
-void *get_mmap_addr(unsigned long size)
-{
-    return NULL;
-}
-
-void qemu_free(void *ptr)
-{
-    free(ptr);
-}
-
-void *qemu_malloc(size_t size)
-{
-    return malloc(size);
-}
-
-void *qemu_mallocz(size_t size)
-{
-    void *ptr;
-    ptr = qemu_malloc(size);
-    if (!ptr)
-        return NULL;
-    memset(ptr, 0, size);
-    return ptr;
-}
-
-char *qemu_strdup(const char *str)
-{
-    char *ptr;
-    ptr = qemu_malloc(strlen(str) + 1);
-    if (!ptr)
-        return NULL;
-    strcpy(ptr, str);
-    return ptr;
-}
-
 static void __attribute__((noreturn)) error(const char *fmt, ...)
 {
     va_list ap;
helper.c +1 -0
Index: target-arm/helper.c
===================================================================
@@ -6,6 +6,7 @@
 #include "exec-all.h"
 #include "gdbstub.h"
 #include "helpers.h"
+#include "qemu-common.h"
 
 static uint32_t cortexa8_cp15_c0_c1[8] =
 { 0x1031, 0x11, 0x400, 0, 0x31100003, 0x20000000, 0x01202000, 0x11 };
kqemu.c +1 -0
Index: kqemu.c
===================================================================
@@ -40,6 +40,7 @@
 
 #include "cpu.h"
 #include "exec-all.h"
+#include "qemu-common.h"
 
 #ifdef USE_KQEMU