NeoMutt  2025-12-11-1039-g550ac6
Teaching an old dog new tricks
DOXYGEN
Loading...
Searching...
No Matches
node_conddate.h File Reference

Expando Node for a Conditional Date. More...

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  NodeCondDatePrivate
 Private data for a Conditional Date -. More...

Functions

struct ExpandoNodenode_conddate_parse (const char *str, int did, int uid, const char **parsed_until, struct ExpandoParseError *err)
 Parse a CondDate format string.

Detailed Description

Expando Node for a Conditional Date.

Authors
  • Tóth János
  • Richard Russon

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 node_conddate.h.

Function Documentation

◆ node_conddate_parse()

struct ExpandoNode * node_conddate_parse ( const char * str,
int did,
int uid,
const char ** parsed_until,
struct ExpandoParseError * err )

Parse a CondDate format string.

Parameters
[in]strString to parse
[in]didDomain ID
[in]uidUnique ID
[out]parsed_untilFirst character after parsed string
[out]errBuffer for errors

Definition at line 227 of file node_conddate.c.

230{
231 if (!str || (str[0] == '\0') || !parsed_until || !err)
232 return NULL;
233
234 int count = 0;
235 char period = '\0';
236
237 str++;
238
239 if (mutt_isdigit(*str))
240 {
241 unsigned short number = 0;
242 const char *end_ptr = mutt_str_atous(str, &number);
243
244 // NOTE(g0mb4): str is NOT NUL-terminated
245 if (!end_ptr || (number == USHRT_MAX))
246 {
247 err->position = str;
248 snprintf(err->message, sizeof(err->message), _("Invalid number: %s"), str);
249 return NULL;
250 }
251
252 count = number;
253 str = end_ptr;
254 };
255
256 // Allowed periods: year, month, week, day, hour, minute
257 if (!strchr("ymwdHM", *str))
258 {
259 err->position = str;
260 snprintf(err->message, sizeof(err->message),
261 // L10N: The 'ymwdHM' should not be translated
262 _("Invalid time period: '%c', must be one of 'ymwdHM'"), *str);
263 return NULL;
264 }
265
266 period = *str;
267 *parsed_until = str + 1;
268
269 return node_conddate_new(count, period, did, uid);
270}
const char * mutt_str_atous(const char *str, unsigned short *dst)
Convert ASCII string to an unsigned short.
Definition atoi.c:269
bool mutt_isdigit(int arg)
Wrapper for isdigit(3).
Definition ctype.c:66
#define _(a)
Definition message.h:28
struct ExpandoNode * node_conddate_new(int count, char period, int did, int uid)
Create a new CondDate ExpandoNode.
char message[1024]
Error message.
Definition parse.h:38
const char * position
Position of error in original string.
Definition parse.h:39
Here is the call graph for this function:
Here is the caller graph for this function: