NeoMutt  2024-12-12-14-g7b49f7
Teaching an old dog new tricks
DOXYGEN
Loading...
Searching...
No Matches
state.c File Reference

Keep track when processing files. More...

#include "config.h"
#include <inttypes.h>
#include <limits.h>
#include <stdarg.h>
#include <stdio.h>
#include <wchar.h>
#include "state.h"
#include "charset.h"
#include "date.h"
#include "random.h"
+ Include dependency graph for state.c:

Go to the source code of this file.

Functions

const char * state_attachment_marker (void)
 Get a unique (per-run) ANSI string to mark PGP messages in an email.
 
const char * state_protected_header_marker (void)
 Get a unique (per-run) ANSI string to mark protected headers in an email.
 
void state_mark_attach (struct State *state)
 Write a unique marker around content.
 
void state_mark_protected_header (struct State *state)
 Write a unique marker around protected headers.
 
void state_attach_puts (struct State *state, const char *t)
 Write a string to the state.
 
static int state_putwc (struct State *state, wchar_t wc)
 Write a wide character to the state.
 
int state_putws (struct State *state, const wchar_t *ws)
 Write a wide string to the state.
 
void state_prefix_putc (struct State *state, char c)
 Write a prefixed character to the state.
 
int state_printf (struct State *state, const char *fmt,...)
 Write a formatted string to the State.
 
void state_prefix_put (struct State *state, const char *buf, size_t buflen)
 Write a prefixed fixed-string to the State.
 

Detailed Description

Keep track when processing files.

Authors
  • Richard Russon
  • Pietro Cerutti

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

Definition in file state.c.

Function Documentation

◆ state_attachment_marker()

const char * state_attachment_marker ( void  )

Get a unique (per-run) ANSI string to mark PGP messages in an email.

Return values
ptrMarker

Definition at line 45 of file state.c.

46{
47 static char marker[256] = { 0 };
48 if (!marker[0])
49 {
50 snprintf(marker, sizeof(marker), "\033]9;%" PRIu64 "\a", mutt_rand64());
51 }
52 return marker;
53}
uint64_t mutt_rand64(void)
Create a 64-bit random number.
Definition: random.c:123
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ state_protected_header_marker()

const char * state_protected_header_marker ( void  )

Get a unique (per-run) ANSI string to mark protected headers in an email.

Return values
ptrMarker

Definition at line 59 of file state.c.

60{
61 static char marker[256] = { 0 };
62 if (!marker[0])
63 {
64 snprintf(marker, sizeof(marker), "\033]8;%lld\a", (long long) mutt_date_now());
65 }
66 return marker;
67}
time_t mutt_date_now(void)
Return the number of seconds since the Unix epoch.
Definition: date.c:456
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ state_mark_attach()

void state_mark_attach ( struct State state)

Write a unique marker around content.

Parameters
stateState to write to

Definition at line 73 of file state.c.

74{
75 if (!state || !state->fp_out)
76 return;
77
79 {
81 }
82}
const char * state_attachment_marker(void)
Get a unique (per-run) ANSI string to mark PGP messages in an email.
Definition: state.c:45
#define STATE_PAGER
Output will be displayed in the Pager.
Definition: state.h:42
#define state_puts(STATE, STR)
Definition: state.h:58
#define STATE_DISPLAY
Output is displayed to the user.
Definition: state.h:33
StateFlags flags
Flags, e.g. STATE_DISPLAY.
Definition: state.h:52
FILE * fp_out
File to write to.
Definition: state.h:50
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ state_mark_protected_header()

void state_mark_protected_header ( struct State state)

Write a unique marker around protected headers.

Parameters
stateState to write to

Definition at line 88 of file state.c.

89{
90 if (!state || !state->fp_out)
91 return;
92
94 {
96 }
97}
const char * state_protected_header_marker(void)
Get a unique (per-run) ANSI string to mark protected headers in an email.
Definition: state.c:59
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ state_attach_puts()

void state_attach_puts ( struct State state,
const char *  t 
)

Write a string to the state.

Parameters
stateState to write to
tText to write

Definition at line 104 of file state.c.

105{
106 if (!state || !state->fp_out || !t)
107 return;
108
109 if (*t != '\n')
110 state_mark_attach(state);
111 while (*t)
112 {
113 state_putc(state, *t);
114 if ((*t++ == '\n') && *t)
115 if (*t != '\n')
116 state_mark_attach(state);
117 }
118}
void state_mark_attach(struct State *state)
Write a unique marker around content.
Definition: state.c:73
#define state_putc(STATE, STR)
Definition: state.h:59
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ state_putwc()

static int state_putwc ( struct State state,
wchar_t  wc 
)
static

Write a wide character to the state.

Parameters
stateState to write to
wcWide character to write
Return values
0Success
-1Error

Definition at line 127 of file state.c.

128{
129 char mb[MB_LEN_MAX] = { 0 };
130
131 if (wcrtomb(mb, wc, NULL) == ICONV_ILLEGAL_SEQ)
132 return -1;
133
134 if (fputs(mb, state->fp_out) == EOF)
135 return -1;
136
137 return 0;
138}
#define ICONV_ILLEGAL_SEQ
Error value for iconv() - Illegal sequence.
Definition: charset.h:96
+ Here is the caller graph for this function:

◆ state_putws()

int state_putws ( struct State state,
const wchar_t *  ws 
)

Write a wide string to the state.

Parameters
stateState to write to
wsWide string to write
Return values
0Success
-1Error

Definition at line 147 of file state.c.

148{
149 const wchar_t *p = ws;
150
151 while (p && (*p != L'\0'))
152 {
153 if (state_putwc(state, *p) < 0)
154 return -1;
155 p++;
156 }
157 return 0;
158}
static int state_putwc(struct State *state, wchar_t wc)
Write a wide character to the state.
Definition: state.c:127
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ state_prefix_putc()

void state_prefix_putc ( struct State state,
char  c 
)

Write a prefixed character to the state.

Parameters
stateState to write to
cCharacter to write

Definition at line 165 of file state.c.

166{
167 if (state->flags & STATE_PENDINGPREFIX)
168 {
169 state_reset_prefix(state);
170 if (state->prefix)
171 state_puts(state, state->prefix);
172 }
173
174 state_putc(state, c);
175
176 if (c == '\n')
177 state_set_prefix(state);
178}
#define state_set_prefix(state)
Definition: state.h:56
#define STATE_PENDINGPREFIX
Prefix to write, but character must follow.
Definition: state.h:35
#define state_reset_prefix(state)
Definition: state.h:57
const char * prefix
String to add to the beginning of each output line.
Definition: state.h:51
+ Here is the caller graph for this function:

◆ state_printf()

int state_printf ( struct State state,
const char *  fmt,
  ... 
)

Write a formatted string to the State.

Parameters
stateState to write to
fmtprintf format string
...Arguments to formatting string
Return values
numNumber of characters written

Definition at line 187 of file state.c.

188{
189 int rc;
190 va_list ap;
191
192 va_start(ap, fmt);
193 rc = vfprintf(state->fp_out, fmt, ap);
194 va_end(ap);
195
196 return rc;
197}
+ Here is the caller graph for this function:

◆ state_prefix_put()

void state_prefix_put ( struct State state,
const char *  buf,
size_t  buflen 
)

Write a prefixed fixed-string to the State.

Parameters
stateState to write to
bufString to write
buflenLength of string

Definition at line 205 of file state.c.

206{
207 if (state->prefix)
208 {
209 while (buflen--)
210 state_prefix_putc(state, *buf++);
211 }
212 else
213 {
214 fwrite(buf, buflen, 1, state->fp_out);
215 }
216}
void state_prefix_putc(struct State *state, char c)
Write a prefixed character to the state.
Definition: state.c:165
+ Here is the call graph for this function:
+ Here is the caller graph for this function: