summaryrefslogtreecommitdiffabout
path: root/kmicromail/libetpan/maildir/maildir.c
Unidiff
Diffstat (limited to 'kmicromail/libetpan/maildir/maildir.c') (more/less context) (ignore whitespace changes)
-rw-r--r--kmicromail/libetpan/maildir/maildir.c33
1 files changed, 26 insertions, 7 deletions
diff --git a/kmicromail/libetpan/maildir/maildir.c b/kmicromail/libetpan/maildir/maildir.c
index 320ef81..0e038b1 100644
--- a/kmicromail/libetpan/maildir/maildir.c
+++ b/kmicromail/libetpan/maildir/maildir.c
@@ -430,8 +430,9 @@ static char * libetpan_basename(char * filename)
430#define libetpan_basename(a) basename(a) 430#define libetpan_basename(a) basename(a)
431#endif 431#endif
432 432
433int maildir_message_add(struct maildir * md, 433int maildir_message_add_uid(struct maildir * md,
434 const char * message, size_t size) 434 const char * message, size_t size,
435 char * uid, size_t max_uid_len)
435{ 436{
436 char path_new[PATH_MAX]; 437 char path_new[PATH_MAX];
437 char tmpname[PATH_MAX]; 438 char tmpname[PATH_MAX];
@@ -453,7 +454,8 @@ int maildir_message_add(struct maildir * md,
453 454
454 /* write to tmp/ with a classic temporary file */ 455 /* write to tmp/ with a classic temporary file */
455 456
456 snprintf(tmpname, sizeof(tmpname), "%s/tmp/etpan-maildir-XXXXXX", md->mdir_path); 457 snprintf(tmpname, sizeof(tmpname), "%s/tmp/etpan-maildir-XXXXXX",
458 md->mdir_path);
457 fd = mkstemp(tmpname); 459 fd = mkstemp(tmpname);
458 if (fd < 0) { 460 if (fd < 0) {
459 res = MAILDIR_ERROR_FILE; 461 res = MAILDIR_ERROR_FILE;
@@ -521,7 +523,10 @@ int maildir_message_add(struct maildir * md,
521 res = MAILDIR_ERROR_FILE; 523 res = MAILDIR_ERROR_FILE;
522 goto unlink_tmp; 524 goto unlink_tmp;
523 } 525 }
524 526
527 if (uid != NULL)
528 strncpy(uid, delivery_new_basename, max_uid_len);
529
525 unlink(delivery_tmp_name); 530 unlink(delivery_tmp_name);
526 free(delivery_tmp_name); 531 free(delivery_tmp_name);
527 532
@@ -539,7 +544,15 @@ int maildir_message_add(struct maildir * md,
539 return res; 544 return res;
540} 545}
541 546
542int maildir_message_add_file(struct maildir * md, int fd) 547int maildir_message_add(struct maildir * md,
548 const char * message, size_t size)
549{
550 return maildir_message_add_uid(md, message, size,
551 NULL, 0);
552}
553
554int maildir_message_add_file_uid(struct maildir * md, int fd,
555 char * uid, size_t max_uid_len)
543{ 556{
544 char * message; 557 char * message;
545 struct stat buf; 558 struct stat buf;
@@ -552,13 +565,19 @@ int maildir_message_add_file(struct maildir * md, int fd)
552 if (message == MAP_FAILED) 565 if (message == MAP_FAILED)
553 return MAILDIR_ERROR_FILE; 566 return MAILDIR_ERROR_FILE;
554 567
555 r = maildir_message_add(md, message, buf.st_size); 568 r = maildir_message_add_uid(md, message, buf.st_size, uid, max_uid_len);
556 569
557 munmap(message, buf.st_size); 570 munmap(message, buf.st_size);
558 571
559 return r; 572 return r;
560} 573}
561 574
575int maildir_message_add_file(struct maildir * md, int fd)
576{
577 return maildir_message_add_file_uid(md, fd,
578 NULL, 0);
579}
580
562char * maildir_message_get(struct maildir * md, const char * uid) 581char * maildir_message_get(struct maildir * md, const char * uid)
563{ 582{
564 chashdatum key; 583 chashdatum key;