Skip to content

Commit

Permalink
Move buf_ declarations to a separate, installed .h file
Browse files Browse the repository at this point in the history
cyrusimap#5108

because sieve_intefrace.h depends on struct buf declaration
and sieve_interface.h is installed.

-- install libconfig.h, imap/message_guid.h
-- charset.h (installed): do not depend on util.h and thus on config.h
  • Loading branch information
dilyanpalauzov committed Nov 10, 2024
1 parent 084edfd commit 2d6ee34
Show file tree
Hide file tree
Showing 6 changed files with 90 additions and 76 deletions.
13 changes: 8 additions & 5 deletions Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -766,6 +766,7 @@ include_HEADERS = \
lib/bitvector.h \
lib/bloom.h \
lib/bsearch.h \
lib/buf.h \
lib/bufarray.h \
lib/charset.h \
lib/chartable.h \
Expand All @@ -785,6 +786,7 @@ include_HEADERS = \
lib/imparse.h \
lib/iostat.h \
lib/iptostring.h \
lib/libconfig.h \
lib/libcyr_cfg.h \
lib/lsort.h \
lib/map.h \
Expand All @@ -808,23 +810,25 @@ include_HEADERS = \
lib/tok.h \
lib/vparse.h \
lib/wildmat.h \
lib/xmalloc.h
lib/xmalloc.h \
lib/xsha1.h

nodist_include_HEADERS = \
lib/imapopts.h

nobase_include_HEADERS = sieve/sieve_interface.h
nobase_include_HEADERS = \
imap/message_guid.h \
sieve/sieve_interface.h

nobase_nodist_include_HEADERS = sieve/sieve_err.h

noinst_HEADERS += \
lib/byteorder.h \
lib/gai.h \
lib/libconfig.h \
lib/md5.h \
lib/prot.h \
lib/ptrarray.h \
lib/util.h \
lib/xsha1.h \
lib/xstrlcat.h \
lib/xstrlcpy.h \
lib/xstrnchr.h
Expand Down Expand Up @@ -1049,7 +1053,6 @@ imap_libcyrus_imap_la_SOURCES = \
imap/mboxname.c \
imap/mboxname.h \
imap/message_guid.c \
imap/message_guid.h \
imap/message.c \
imap/message.h \
imap/message_priv.h \
Expand Down
4 changes: 3 additions & 1 deletion imap/message.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,12 @@

#include <stdio.h>

#include "arrayu64.h"
#include "buf.h"
#include "prot.h"
#include "mailbox.h"
#include "imap/message_guid.h"
#include "strarray.h"
#include "util.h"
#include "charset.h"

/* (draft standard) MIME tspecials */
Expand Down
76 changes: 76 additions & 0 deletions lib/buf.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
#ifndef CYRUS_BUF_H
#define CYRUS_BUF_H

/* Examine the name of a file, and return a single character
* (as an int) that can be used as the name of a hash
* directory. Caller is responsible for skipping any prefix
* of the name.
*/
int dir_hash_c(const char *name, int full);

#include <stddef.h>
#define BUF_MMAP (1<<1)
typedef unsigned long long int modseq_t;

struct buf {
char *s;
size_t len;
size_t alloc;
unsigned flags;
};
#define BUF_INITIALIZER { NULL, 0, 0, 0 }

#define buf_new() ((struct buf *) xzmalloc(sizeof(struct buf)))
#define buf_destroy(b) do { buf_free((b)); free((b)); } while (0)
#define buf_ensure(b, n) do { if ((b)->alloc < (b)->len + (n)) _buf_ensure((b), (n)); } while (0)
#define buf_putc(b, c) do { buf_ensure((b), 1); (b)->s[(b)->len++] = (c); } while (0)

void _buf_ensure(struct buf *buf, size_t len);
const char *buf_cstring(const struct buf *buf);
const char *buf_cstringnull(const struct buf *buf);
const char *buf_cstringnull_ifempty(const struct buf *buf);
const char *buf_cstring_or_empty(const struct buf *buf);
char *buf_newcstring(struct buf *buf);
char *buf_release(struct buf *buf);
char *buf_releasenull(struct buf *buf);
void buf_getmap(struct buf *buf, const char **base, size_t *len);
size_t buf_len(const struct buf *buf);
const char *buf_base(const struct buf *buf);
void buf_reset(struct buf *buf);
void buf_setcstr(struct buf *buf, const char *str);
void buf_setmap(struct buf *buf, const char *base, size_t len);
void buf_copy(struct buf *dst, const struct buf *src);
void buf_append(struct buf *dst, const struct buf *src);
void buf_appendcstr(struct buf *buf, const char *str);
void buf_appendoverlap(struct buf *buf, const char *str);
void buf_appendmap(struct buf *buf, const char *base, size_t len);
void buf_cowappendmap(struct buf *buf, const char *base, unsigned int len);
void buf_cowappendfree(struct buf *buf, char *base, unsigned int len);
void buf_insert(struct buf *dst, unsigned int off, const struct buf *src);
void buf_insertcstr(struct buf *buf, unsigned int off, const char *str);
void buf_insertmap(struct buf *buf, unsigned int off, const char *base, int len);
void buf_printf(struct buf *buf, const char *fmt, ...)
__attribute__((format(printf, 2, 3)));
void buf_replace_buf(struct buf *buf, size_t offset, size_t length,
const struct buf *replace);
int buf_replace_all(struct buf *buf, const char *match,
const char *replace);
int buf_replace_char(struct buf *buf, char match, char replace);
void buf_remove(struct buf *buf, unsigned int off, unsigned int len);
int buf_cmp(const struct buf *, const struct buf *);
int buf_findchar(const struct buf *, unsigned int off, int c);
int buf_findline(const struct buf *buf, const char *line);
void buf_init_ro(struct buf *buf, const char *base, size_t len);
void buf_initm(struct buf *buf, char *base, int len);
void buf_initmcstr(struct buf *buf, char *str);
void buf_init_ro_cstr(struct buf *buf, const char *str);
void buf_refresh_mmap(struct buf *buf, int onceonly, int fd,
const char *fname, size_t size, const char *mboxname);
void buf_free(struct buf *buf);
void buf_move(struct buf *dst, struct buf *src);
const char *buf_lcase(struct buf *buf);
const char *buf_ucase(struct buf *buf);
const char *buf_tocrlf(struct buf *buf);
void buf_trim(struct buf *buf);

#endif /* CYRUS_BUF_H */
2 changes: 1 addition & 1 deletion lib/charset.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@
/* RFC 5322, 2.1.1 */
#define MIME_MAX_HEADER_LENGTH 78

#include "util.h"
#include "buf.h"
#include "xsha1.h"

#define charset_base64_len_unpadded(n) \
Expand Down
69 changes: 1 addition & 68 deletions lib/util.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@
#define STDERR_FILENO 2 /* Standard error output. */
#endif

#include "buf.h"
#include "xmalloc.h"

/* version string printable in gdb tracking */
Expand Down Expand Up @@ -106,7 +107,6 @@ typedef unsigned short bit32;
#endif

typedef unsigned long long int bit64;
typedef unsigned long long int modseq_t;
#define MODSEQ_FMT "%llu"
#define atomodseq_t(s) strtoull(s, NULL, 10)
char *modseqtoa(modseq_t modseq);
Expand Down Expand Up @@ -191,12 +191,6 @@ int strcmpnull(const char *a, const char *b);
extern keyvalue *kv_bsearch (const char *key, keyvalue *kv, int nelem,
int (*cmpf)(const char *s1, const char *s2));

/* Examine the name of a file, and return a single character
* (as an int) that can be used as the name of a hash
* directory. Caller is responsible for skipping any prefix
* of the name.
*/
extern int dir_hash_c(const char *name, int full);
/*
* Like dir_hash_c() but builds the result as a single-byte
* C string in the provided buffer, and returns the buffer,
Expand Down Expand Up @@ -279,79 +273,18 @@ extern int64_t now_ms(void);

extern clock_t sclock(void);

#define BUF_MMAP (1<<1)

struct buf {
char *s;
size_t len;
size_t alloc;
unsigned flags;
};
#define BUF_INITIALIZER { NULL, 0, 0, 0 }

#define buf_new() ((struct buf *) xzmalloc(sizeof(struct buf)))
#define buf_destroy(b) do { buf_free((b)); free((b)); } while (0)
#define buf_ensure(b, n) do { if ((b)->alloc < (b)->len + (n)) _buf_ensure((b), (n)); } while (0)
#define buf_putc(b, c) do { buf_ensure((b), 1); (b)->s[(b)->len++] = (c); } while (0)

void _buf_ensure(struct buf *buf, size_t len);
const char *buf_cstring(const struct buf *buf);
const char *buf_cstringnull(const struct buf *buf);
const char *buf_cstringnull_ifempty(const struct buf *buf);
char *buf_release(struct buf *buf);
char *buf_newcstring(struct buf *buf);
char *buf_releasenull(struct buf *buf);
void buf_getmap(struct buf *buf, const char **base, size_t *len);
int buf_getline(struct buf *buf, FILE *fp);
size_t buf_len(const struct buf *buf);
const char *buf_base(const struct buf *buf);
void buf_reset(struct buf *buf);
void buf_truncate(struct buf *buf, ssize_t len);
void buf_setcstr(struct buf *buf, const char *str);
void buf_setmap(struct buf *buf, const char *base, size_t len);
void buf_copy(struct buf *dst, const struct buf *src);
void buf_append(struct buf *dst, const struct buf *src);
void buf_appendcstr(struct buf *buf, const char *str);
void buf_appendoverlap(struct buf *buf, const char *str);
void buf_appendbit32(struct buf *buf, bit32 num);
void buf_appendbit64(struct buf *buf, bit64 num);
void buf_appendmap(struct buf *buf, const char *base, size_t len);
void buf_cowappendmap(struct buf *buf, const char *base, unsigned int len);
void buf_cowappendfree(struct buf *buf, char *base, unsigned int len);
void buf_insert(struct buf *dst, unsigned int off, const struct buf *src);
void buf_insertcstr(struct buf *buf, unsigned int off, const char *str);
void buf_insertmap(struct buf *buf, unsigned int off, const char *base, int len);
void buf_vprintf(struct buf *buf, const char *fmt, va_list args)
__attribute__((format(printf, 2, 0)));
void buf_printf(struct buf *buf, const char *fmt, ...)
__attribute__((format(printf, 2, 3)));
void buf_replace_buf(struct buf *buf, size_t offset, size_t length,
const struct buf *replace);
int buf_replace_all(struct buf *buf, const char *match,
const char *replace);
int buf_replace_char(struct buf *buf, char match, char replace);
#ifdef ENABLE_REGEX
int buf_replace_all_re(struct buf *buf, const regex_t *,
const char *replace);
int buf_replace_one_re(struct buf *buf, const regex_t *,
const char *replace);
#endif
void buf_remove(struct buf *buf, unsigned int off, unsigned int len);
int buf_cmp(const struct buf *, const struct buf *);
int buf_findchar(const struct buf *, unsigned int off, int c);
int buf_findline(const struct buf *buf, const char *line);
void buf_init_ro(struct buf *buf, const char *base, size_t len);
void buf_initm(struct buf *buf, char *base, int len);
void buf_initmcstr(struct buf *buf, char *str);
void buf_init_ro_cstr(struct buf *buf, const char *str);
void buf_refresh_mmap(struct buf *buf, int onceonly, int fd,
const char *fname, size_t size, const char *mboxname);
void buf_free(struct buf *buf);
void buf_move(struct buf *dst, struct buf *src);
const char *buf_lcase(struct buf *buf);
const char *buf_ucase(struct buf *buf);
const char *buf_tocrlf(struct buf *buf);
void buf_trim(struct buf *buf);

/*
* Given a list of strings, terminated by (char *)NULL,
Expand Down
2 changes: 1 addition & 1 deletion sieve/sieve_interface.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,8 @@
#define SIEVE_OK (0)

#include "arrayu64.h"
#include "buf.h"
#include "strarray.h"
#include "util.h"
#include "sieve/sieve_err.h"

/* external sieve types */
Expand Down

0 comments on commit 2d6ee34

Please sign in to comment.