MAD changes
Andrew V. Samoilov
kai at cmail.ru
Fri Nov 2 15:31:47 UTC 2001
Hi, all!
I suggest this patch to incorporate into cvs. Glib support enabled
again now - sorry Pavel, but without it builtin editor fails on each
search. I write mad_get_current_dir to use instead of g_get_current_dir.
Also mad_tempname now has file and line parameters.
Fill free to fix my ChangeLog.
I will be offline until Monday.
Regards,
Andrew.
ChangeLog:
* mad.h: Enable glib support - builtin editor fails without it.
* mad.[ch] (mad_get_current_dir): New function to use instead
of g_get_current_dir.
(mad_tempnam): Add file and line parameters.
(mad_alloc0): Make file parameter const.
(mad_realloc): Likewise.
(mad_strdup): Likewise.
(mad_strndup): Likewise.
(mad_free): Likewise.
(mad_finalize): Likewise.
Index: mad.h
===================================================================
RCS file: /cvs/gnome/mc/src/mad.h,v
retrieving revision 1.14
diff -u -p -r1.14 mad.h
--- mad.h 2001/08/11 05:13:10 1.14
+++ mad.h 2001/11/02 14:47:32
@@ -30,7 +30,7 @@
# undef calloc
#endif
-#define tempnam(x,y) mad_tempnam (x, y)
+#define tempnam(x,y) mad_tempnam (x, y, __FILE__, __LINE__)
#define malloc(x) mad_alloc (x, __FILE__, __LINE__)
#define calloc(x, y) mad_alloc0 ((x) * (y), __FILE__, __LINE__)
@@ -50,7 +50,7 @@
* Define MAD_GLIB to debug allocations in glib as well.
* This code is not functional yet.
*/
-#undef MAD_GLIB
+#define MAD_GLIB
#ifdef MAD_GLIB
/* These definitions are grabbed from GLib.h */
@@ -70,22 +70,24 @@
#define g_strconcat mad_strconcat
#define g_strdup_printf mad_strdup_printf
#define g_strdup_vprintf mad_strdup_vprintf
+#define g_get_current_dir() mad_get_current_dir (__FILE__, __LINE__)
#endif /* MAD_GLIB */
void mad_init (void);
void mad_set_debug (const char *file);
void mad_check (const char *file, int line);
void *mad_alloc (int size, const char *file, int line);
-void *mad_alloc0 (int size, char *file, int line);
-void *mad_realloc (void *ptr, int newsize, char *file, int line);
-char *mad_strdup (const char *s, char *file, int line);
-char *mad_strndup (const char *s, int n, char *file, int line);
-void mad_free (void *ptr, char *file, int line);
-void mad_finalize (char *file, int line);
-char *mad_tempnam (char *s1, char *s2);
+void *mad_alloc0 (int size, const char *file, int line);
+void *mad_realloc (void *ptr, int newsize, const char *file, int line);
+char *mad_strdup (const char *s, const char *file, int line);
+char *mad_strndup (const char *s, int n, const char *file, int line);
+void mad_free (void *ptr, const char *file, int line);
+void mad_finalize (const char *file, int line);
+char *mad_tempnam (char *s1, char *s2, const char *file, int line);
char *mad_strconcat (const char *first, ...);
char *mad_strdup_printf (const char *format, ...);
char *mad_strdup_vprintf (const char *format, va_list args);
+char *mad_get_current_dir (const char *file, int line);
#else
Index: mad.c
===================================================================
RCS file: /cvs/gnome/mc/src/mad.c,v
retrieving revision 1.12
diff -u -p -r1.12 mad.c
--- mad.c 2001/08/06 15:32:34 1.12
+++ mad.c 2001/11/02 14:47:32
@@ -36,6 +36,7 @@
#undef g_strdup
#undef g_strndup
#undef g_free
+#undef g_get_current_dir
#include <stdlib.h>
#include <stdio.h>
@@ -180,7 +181,7 @@ void *mad_alloc (int size, const char *f
}
/* Reallocates a memory area. Used instead of realloc. */
-void *mad_realloc (void *ptr, int newsize, char *file, int line)
+void *mad_realloc (void *ptr, int newsize, const char *file, int line)
{
int i;
char *area;
@@ -211,16 +212,15 @@ void *mad_realloc (void *ptr, int newsiz
*(mem_areas [i].start_sig) = MAD_SIGNATURE;
*(mem_areas [i].end_sig) = MAD_SIGNATURE;
- if (strlen (file) >= MAD_MAX_FILE)
- file [MAD_MAX_FILE - 1] = 0;
- strcpy (mem_areas [i].file, file);
+ strncpy (mem_areas [i].file, file, MAD_MAX_FILE - 1);
+ mem_areas [i].file [MAD_MAX_FILE - 1] = 0;
mem_areas [i].line = line;
return mem_areas [i].data;
}
/* Allocates a memory area. Used instead of malloc and calloc. */
-void *mad_alloc0 (int size, char *file, int line)
+void *mad_alloc0 (int size, const char *file, int line)
{
char *t;
@@ -230,7 +230,7 @@ void *mad_alloc0 (int size, char *file,
}
/* Duplicates a character string. Used instead of strdup. */
-char *mad_strdup (const char *s, char *file, int line)
+char *mad_strdup (const char *s, const char *file, int line)
{
if (s) {
char *t;
@@ -244,7 +244,7 @@ char *mad_strdup (const char *s, char *f
/* Duplicates a character string. Used instead of strndup. */
/* Dup of GLib's gstrfuncs.c:g_strndup() */
-char *mad_strndup (const char *s, int n, char *file, int line)
+char *mad_strndup (const char *s, int n, const char *file, int line)
{
if(s) {
char *new_str = mad_alloc(n + 1, file, line);
@@ -257,7 +257,7 @@ char *mad_strndup (const char *s, int n,
}
/* Frees a memory area. Used instead of free. */
-void mad_free (void *ptr, char *file, int line)
+void mad_free (void *ptr, const char *file, int line)
{
int i;
@@ -300,18 +300,18 @@ void mad_free (void *ptr, char *file, in
Alloc_idx_hint = i;
}
-char *mad_tempnam (char *a, char *b)
+char *mad_tempnam (char *a, char *b, const char *file, int line)
{
char *t, *u;
t = tempnam(a,b); /* This malloc's internal buffer.. */
- u = mad_strdup(t, "(mad_tempnam)", 0);
+ u = mad_strdup(t, file, line);
free(t);
return u;
}
/* Outputs a list of unfreed memory areas,
to be called as a last thing before exiting */
-void mad_finalize (char *file, int line)
+void mad_finalize (const char *file, int line)
{
int i;
@@ -398,5 +398,14 @@ mad_strdup_printf (const char *format, .
va_end (args);
return buffer;
+}
+
+char*
+mad_get_current_dir (const char *file, int line)
+{
+ char *cwd = g_get_current_dir ();
+ char *ret = mad_strdup (cwd, file, line);
+ g_free (cwd);
+ return ret;
}
#endif /* HAVE_MAD */
More information about the mc-devel
mailing list