From: Pierre Habouzit Date: Thu, 2 Nov 2006 21:15:37 +0000 (+0100) Subject: add some list functions. X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=commitdiff_plain;h=5291c0f984bad00026e56260c42ebecc2252429f add some list functions. fix compilation warnings. add cflags. add ssizeof Signed-off-by: Pierre Habouzit --- diff --git a/lib-lib/Makefile.am b/lib-lib/Makefile.am index 3545ecf..d7dd815 100644 --- a/lib-lib/Makefile.am +++ b/lib-lib/Makefile.am @@ -5,3 +5,4 @@ liblib_a_SOURCES = mem.h str.h ascii.h buffer.h hash.h list.h file.h mapping.h \ noinst_HEADERS = mem.h str.h ascii.h buffer.h hash.h list.h file.h mapping.h +-include ../cflags.mk diff --git a/lib-lib/file.c b/lib-lib/file.c index 793ac10..6442667 100644 --- a/lib-lib/file.c +++ b/lib-lib/file.c @@ -107,11 +107,11 @@ int safe_symlink(const char *oldpath, const char *newpath) return -1; len = m_strcat(abs_oldpath, sizeof(abs_oldpath), "/"); - if (len >= sizeof(abs_oldpath)) + if (len >= ssizeof(abs_oldpath)) return -1; len += m_strcpy(abs_oldpath + len, sizeof(abs_oldpath) - len, oldpath); - if (len >= sizeof(abs_oldpath)) + if (len >= ssizeof(abs_oldpath)) return -1; if (symlink (abs_oldpath, newpath) < 0) @@ -211,8 +211,8 @@ void mutt_unlink(const char *s) p_clear(buf, sizeof(buf)); while (sb.st_size > 0) { - fwrite(buf, 1, MIN(sizeof(buf), sb.st_size), f); - sb.st_size -= MIN(sizeof(buf), sb.st_size); + fwrite(buf, 1, MIN(ssizeof(buf), sb.st_size), f); + sb.st_size -= MIN(ssizeof(buf), sb.st_size); } fclose (f); } @@ -310,7 +310,7 @@ char *mutt_read_line(char *s, size_t *size, FILE * fp, int *line) int mutt_copy_stream(FILE *fin, FILE *fout) { char buf[BUFSIZ]; - ssize_t l; + size_t l; while ((l = fread(buf, 1, sizeof (buf), fin)) > 0) { if (fwrite(buf, 1, l, fout) != l) @@ -325,7 +325,7 @@ int mutt_copy_bytes(FILE *in, FILE *out, size_t size) char buf[BUFSIZ]; while (size > 0) { - ssize_t chunk = MIN(size, sizeof(buf)); + size_t chunk = MIN(size, sizeof(buf)); if ((chunk = fread(buf, 1, chunk, in)) < 1) break; @@ -354,12 +354,16 @@ const char *mutt_basename(const char *f) char * mutt_concat_path(char *d, ssize_t n, const char *dir, const char *fname) { - const char *fmt = "%s/%s"; + int pos; - if (!*fname || (*dir && dir[m_strlen(dir) - 1] == '/')) - fmt = "%s%s"; + pos = m_strcpy(d, n, dir); + if (pos >= n - 1) + return d; - snprintf(d, n, fmt, dir, fname); + if (pos && d[pos - 1] != '/') + d[pos++] = '/'; + + m_strcpy(d + pos, n - pos, fname); return d; } @@ -385,7 +389,7 @@ void mutt_sanitize_filename(char *s, short slash) /* FIXME: API is very wrong */ ssize_t mutt_quote_filename(char *d, ssize_t l, const char *s) { - size_t i, j = 0; + ssize_t i, j = 0; if (!s) { *d = '\0'; diff --git a/lib-lib/list.h b/lib-lib/list.h index 1a915b3..2e13fca 100644 --- a/lib-lib/list.h +++ b/lib-lib/list.h @@ -22,8 +22,8 @@ * Copyright (C) 1996-2000 Michael R. Elkins */ -#ifndef _MUTT_LIST_H -#define _MUTT_LIST_H +#ifndef MUTT_LIB_LIB_LIST_H +#define MUTT_LIB_LIB_LIST_H typedef struct list_t { char *data; @@ -42,4 +42,38 @@ static inline LIST *mutt_add_list(LIST *head, const char *data) { return mutt_add_list_n(head, data, len ? len + 1 : 0); } -#endif /* !_MUTT_LIST_H */ +#define DO_SLIST(type, prefix) \ + static inline type *prefix##_list_pop(type **list) { \ + if (*list) { \ + type *res = *list; \ + *list = res->next; \ + res->next = NULL; \ + return res; \ + } \ + return NULL; \ + } \ + static inline void prefix##_list_push(type **list, type *item) { \ + item->next = *list; \ + *list = item; \ + } \ + \ + static inline type **prefix##_list_init(type **list) { \ + *list = NULL; \ + return list; \ + } \ + static inline void prefix##_list_wipe(type **list, int del) { \ + if (del) { \ + while (*list) { \ + type *item = prefix##_list_pop(list); \ + prefix##_delete(&item); \ + } \ + } else { \ + *list = NULL; \ + } \ + } \ + + + + + +#endif /* MUTT_LIB_LIB_LIST_H */ diff --git a/lib-lib/mem.h b/lib-lib/mem.h index db5ef49..b3bcd62 100644 --- a/lib-lib/mem.h +++ b/lib-lib/mem.h @@ -24,6 +24,8 @@ #include #include +#define ssizeof(foo) (ssize_t)sizeof(foo) + #define p_new(type, count) ((type *)xmalloc(sizeof(type) * (count))) #define p_clear(p, count) ((void)memset((p), 0, sizeof(*(p)) * (count))) #define p_dup(p, count) xmemdup((p), sizeof(*(p)) * (count))