mirror of
https://github.com/neovim/neovim.git
synced 2025-10-09 11:26:37 +00:00

The "length-of-one" trick, where the last element of a struct is an array of size 1, but extra size is allocated when calling malloc where it uses more than 1 element in the array, cause problems with some compilers. Some compilers set _FORTIFY_SOURCE=2 by default which incorrectly considers it as an overflow. More information: https://github.com/neovim/neovim/issues/223#issuecomment-1413828554 Using flexible array members allows us to to properly convey to the compiler that its size may be larger than 1. This also enables us to remove lengthy workarounds that are unreliable, as they depend on CMAKE_BUILD_TYPE which isn't defined for multi-config generators. Closes: https://github.com/neovim/neovim/issues/223
55 lines
1.4 KiB
C
55 lines
1.4 KiB
C
#ifndef NVIM_SIGN_DEFS_H
|
|
#define NVIM_SIGN_DEFS_H
|
|
|
|
#include <stdbool.h>
|
|
|
|
#include "nvim/pos.h"
|
|
#include "nvim/types.h"
|
|
|
|
// signs: line annotations
|
|
|
|
// Sign group
|
|
typedef struct signgroup_S {
|
|
int sg_next_sign_id; ///< next sign id for this group
|
|
uint16_t sg_refcount; ///< number of signs in this group
|
|
char sg_name[]; ///< sign group name
|
|
} signgroup_T;
|
|
|
|
// Macros to get the sign group structure from the group name
|
|
#define SGN_KEY_OFF offsetof(signgroup_T, sg_name)
|
|
#define HI2SG(hi) ((signgroup_T *)((hi)->hi_key - SGN_KEY_OFF))
|
|
|
|
typedef struct sign_entry sign_entry_T;
|
|
|
|
struct sign_entry {
|
|
int se_id; // unique identifier for each placed sign
|
|
int se_typenr; // typenr of sign
|
|
int se_priority; // priority for highlighting
|
|
bool se_has_text_or_icon; // has text or icon
|
|
linenr_T se_lnum; // line number which has this sign
|
|
signgroup_T *se_group; // sign group
|
|
sign_entry_T *se_next; // next entry in a list of signs
|
|
sign_entry_T *se_prev; // previous entry -- for easy reordering
|
|
};
|
|
|
|
/// Sign attributes. Used by the screen refresh routines.
|
|
typedef struct {
|
|
char *text;
|
|
int hl_attr_id;
|
|
int priority;
|
|
} SignTextAttrs;
|
|
|
|
#define SIGN_SHOW_MAX 9
|
|
|
|
// Default sign priority for highlighting
|
|
#define SIGN_DEF_PRIO 10
|
|
|
|
// type argument for sign_get_attr()
|
|
typedef enum {
|
|
SIGN_LINEHL,
|
|
SIGN_NUMHL,
|
|
SIGN_TEXT,
|
|
} SignType;
|
|
|
|
#endif // NVIM_SIGN_DEFS_H
|