X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fsrc%2Fqueue.c;h=fa4fc0aeccfbaae90a3a3ee593a7c6d4ea4de04e;hb=refs%2Fheads%2Ffix_isis_typos;hp=d01cde655d6b0dfdd126684c3c33c585b8a093e8;hpb=1e835086d1592bdfbcd8577133965b78470840ac;p=user%2Fhenk%2Fcode%2Fexim.git diff --git a/src/src/queue.c b/src/src/queue.c index d01cde655..fa4fc0aec 100644 --- a/src/src/queue.c +++ b/src/src/queue.c @@ -54,8 +54,13 @@ queue_filename **append = &first; while (a && b) { int d; - if ((d = Ustrncmp(a->text, b->text, 6)) == 0) - d = Ustrcmp(a->text + 14, b->text + 14); + if ((d = Ustrncmp(a->text, b->text, MESSAGE_ID_TIME_LEN)) == 0) + { + BOOL a_old = is_old_message_id(a->text), b_old = is_old_message_id(b->text); + /* Do not worry over the sub-second sorting wrt. old vs. new */ + d = Ustrcmp(a->text + (a_old ? 6+1+6+1 : MESSAGE_ID_TIME_LEN + 1 + MESSAGE_ID_PID_LEN + 1), + b->text + (b_old ? 6+1+6+1 : MESSAGE_ID_TIME_LEN + 1 + MESSAGE_ID_PID_LEN + 1)); + } if (d < 0) { *append = a; @@ -188,9 +193,9 @@ for (; i <= *subcount; i++) /* Now scan the directory. */ - for (struct dirent *ent; ent = readdir(dd); ) + for (struct dirent * ent; ent = readdir(dd); ) { - uschar *name = US ent->d_name; + uschar * name = US ent->d_name; int len = Ustrlen(name); /* Count entries */ @@ -209,14 +214,15 @@ for (; i <= *subcount; i++) /* Otherwise, if it is a header spool file, add it to the list */ - if (len == SPOOL_NAME_LENGTH && - Ustrcmp(name + SPOOL_NAME_LENGTH - 2, "-H") == 0) + if ( (len == SPOOL_NAME_LENGTH || len == SPOOL_NAME_LENGTH_OLD) + && Ustrcmp(name + len - 2, "-H") == 0 + ) if (pcount) (*pcount)++; else { queue_filename * next = - store_get(sizeof(queue_filename) + Ustrlen(name), name); + store_get(sizeof(queue_filename) + len, name); Ustrcpy(next->text, name); next->dir_uschar = subdirchar; @@ -657,8 +663,8 @@ for (int i = queue_run_in_order ? -1 : 0; /* Now deliver the message; get the id by cutting the -H off the file name. The return of the process is zero if a delivery was attempted. */ + fq->text[Ustrlen(fq->text)-2] = 0; set_process_info("running queue: %s", fq->text); - fq->text[SPOOL_NAME_LENGTH-2] = 0; #ifdef MEASURE_TIMING report_time_since(×tamp_startup, US"queue msg selected"); #endif @@ -913,7 +919,7 @@ Returns: nothing */ void -queue_list(int option, uschar **list, int count) +queue_list(int option, uschar ** list, int count) { int subcount; int now = (int)time(NULL); @@ -942,21 +948,25 @@ if (count > 0) else qf = queue_get_spool_list( - -1, /* entire queue */ - subdirs, /* for holding sub list */ - &subcount, /* for subcount */ - option >= 8, /* randomize if required */ - NULL); /* don't just count */ + -1, /* entire queue */ + subdirs, /* for holding sub list */ + &subcount, /* for subcount */ + option >= QL_UNSORTED, /* randomize if required */ + NULL); /* don't just count */ -if (option >= 8) option -= 8; +option &= ~QL_UNSORTED; /* Now scan the chain and print information, resetting store used each time. */ -for (; - qf && (reset_point = store_mark()); - spool_clear_header_globals(), store_reset(reset_point), qf = qf->next - ) +if (option == QL_MSGID_ONLY) /* Print only the message IDs from the chain */ + for (; qf; qf = qf->next) + fprintf(stdout, "%.*s\n", MESSAGE_ID_LENGTH, qf->text); + +else for (; + qf && (reset_point = store_mark()); + spool_clear_header_globals(), store_reset(reset_point), qf = qf->next + ) { int rc, save_errno; int size = 0; @@ -986,7 +996,7 @@ for (; that precedes the data. */ if (Ustat(fname, &statbuf) == 0) - size = message_size + statbuf.st_size - SPOOL_DATA_START_OFFSET + 1; + size = message_size + statbuf.st_size - spool_data_start_offset(qf->text) + 1; i = (now - received_time.tv_sec)/60; /* minutes on queue */ if (i > 90) { @@ -1010,8 +1020,8 @@ for (; } } - fprintf(stdout, "%s ", string_format_size(size, big_buffer)); - for (int i = 0; i < 16; i++) fputc(qf->text[i], stdout); + fprintf(stdout, "%s %.*s", + string_format_size(size, big_buffer), MESSAGE_ID_LENGTH, qf->text); if (env_read && sender_address) { @@ -1048,14 +1058,14 @@ for (; { for (int i = 0; i < recipients_count; i++) { - tree_node *delivered = + tree_node * delivered = tree_search(tree_nonrecipients, recipients_list[i].address); - if (!delivered || option != 1) + if (!delivered || option != QL_UNDELIVERED_ONLY) printf(" %s %s\n", delivered ? "D" : " ", recipients_list[i].address); if (delivered) delivered->data.val = TRUE; } - if (option == 2 && tree_nonrecipients) + if (option == QL_PLUS_GENERATED && tree_nonrecipients) queue_list_extras(tree_nonrecipients); printf("\n"); } @@ -1083,7 +1093,8 @@ Returns: FALSE if there was any problem */ BOOL -queue_action(uschar *id, int action, uschar **argv, int argc, int recipients_arg) +queue_action(uschar * id, int action, uschar ** argv, int argc, + int recipients_arg) { BOOL yield = TRUE; BOOL removed = FALSE; @@ -1152,7 +1163,7 @@ if (action >= MSG_SHOW_BODY) } while((rc = read(fd, big_buffer, big_buffer_size)) > 0) - rc = write(fileno(stdout), big_buffer, rc); + rc = write(fileno(stdout), big_buffer, rc); /*XXX why not fwrite() ? */ (void)close(fd); return TRUE; @@ -1295,11 +1306,9 @@ switch(action) case MSG_REMOVE: { - uschar suffix[3]; + uschar suffix[3] = { [0]='-', [2]=0 }; - suffix[0] = '-'; - suffix[2] = 0; - message_subdir[0] = id[5]; + message_subdir[0] = id[MESSAGE_ID_TIME_LEN - 1]; for (int j = 0; j < 2; message_subdir[0] = 0, j++) {