dox Submit an ELog entry.
134 text, reply_to, encoding,
135 afilename1, buffer1, buffer_size1,
136 afilename2, buffer2, buffer_size2, afilename3, buffer3, buffer_size3, tag, tag_size);
138 #ifdef LOCAL_ROUTINES
142 char afile_name[3][256+256];
144 char start_str[80], end_str[80], last[80], date[80],
thread[80], attachment[256];
149 size_t message_size = 0;
155 bedit = (tag[0] != 0);
161 cm_msg(
MERROR,
"el_submit",
"Cannot lock experiment semaphore, ss_semaphore_wait_for() status %d",
status);
180 for (idx = 0; idx < 3; idx++) {
185 const char* buffer = NULL;
189 strlcpy(afilename, afilename1,
sizeof(afilename));
191 buffer_size = buffer_size1;
192 }
else if (idx == 1) {
193 strlcpy(afilename, afilename2,
sizeof(afilename));
195 buffer_size = buffer_size2;
196 }
else if (idx == 2) {
197 strlcpy(afilename, afilename3,
sizeof(afilename));
199 buffer_size = buffer_size3;
205 while (strchr(p,
':'))
206 p = strchr(p,
':') + 1;
207 while (strchr(p,
'\\'))
208 p = strchr(p,
'\\') + 1;
209 while (strchr(p,
'/'))
210 p = strchr(p,
'/') + 1;
211 while (strchr(p,
']'))
212 p = strchr(p,
']') + 1;
219 memset(dir, 0, size);
230 localtime_r(&now, &tms);
234 sprintf(afile_name[idx],
"%02d%02d%02d_%02d%02d%02d_%s",
235 tms.tm_year % 100, tms.tm_mon + 1, tms.tm_mday,
236 tms.tm_hour, tms.tm_min, tms.tm_sec,
str);
237 sprintf(
file_name,
"%s%02d%02d%02d_%02d%02d%02d_%s", dir,
238 tms.tm_year % 100, tms.tm_mon + 1, tms.tm_mday,
239 tms.tm_hour, tms.tm_min, tms.tm_sec,
str);
244 cm_msg(
MERROR,
"el_submit",
"Cannot write attachment file \"%s\", open() returned %d, errno %d (%s)",
file_name, fh, errno, strerror(errno));
257 memset(dir, 0, size);
273 if (strchr(
str,
'.')) {
275 *strchr(
str,
'.') = 0;
283 lseek(fh,
offset, SEEK_SET);
286 if (strncmp(
str,
"$Start$", 7) != 0) {
292 size = atoi(
str + 9);
295 cm_msg(
MERROR,
"el_submit",
"cannot read from \'%s\', corrupted file: bad size %d in \"%s\"",
file_name, size,
str);
303 cm_msg(
MERROR,
"el_submit",
"cannot read from \'%s\', corrupted file: bad size %d in \"%s\", cannot malloc(%d): errno %d (%s)",
file_name, size,
str, size, errno, strerror(errno));
322 lseek(fh, 0, SEEK_END);
328 buffer = (
char *)
M_MALLOC(tail_size);
329 if (buffer == NULL) {
335 lseek(fh,
offset + size, SEEK_SET);
340 lseek(fh,
offset, SEEK_SET);
345 localtime_r(&now, &tms);
347 sprintf(
file_name,
"%s%02d%02d%02d.log", dir, tms.tm_year % 100, tms.tm_mon + 1, tms.tm_mday);
355 assert(
sizeof(date) >= 32);
360 sprintf(
thread,
"%16s %16s", reply_to,
"0");
362 sprintf(
thread,
"%16s %16s",
"0",
"0");
364 lseek(fh, 0, SEEK_END);
368 message_size += strlen(date);
369 message_size += strlen(author);
370 message_size += strlen(
type);
371 message_size += strlen(syst);
372 message_size += strlen(subject);
373 message_size += strlen(attachment);
374 message_size += strlen(afile_name[0]);
375 message_size += strlen(afile_name[1]);
376 message_size += strlen(afile_name[2]);
377 message_size += strlen(encoding);
378 message_size += strlen(text);
382 message = (
char*)malloc(message_size);
385 cm_msg(
MERROR,
"el_submit",
"cannot malloc() %d bytes: errno %d (%s)", size, errno, strerror(errno));
392 sprintf(
message,
"Date: %s\n", date);
401 if (bedit && afile_name[0][0] == 0 && afile_name[1][0] == 0 && afile_name[2][0] == 0)
404 sprintf(
message + strlen(
message),
"Attachment: %s", afile_name[0]);
405 if (afile_name[1][0])
407 if (afile_name[2][0])
413 sprintf(
message + strlen(
message),
"========================================\n");
416 assert(strlen(
message) < message_size);
419 sprintf(start_str,
"$Start$: %6d\n", size);
420 sprintf(end_str,
"$End$: %6d\n\f", size);
422 size = strlen(
message) + strlen(start_str) + strlen(end_str);
424 if (tag != NULL && !bedit) {
425 sprintf(tag,
"%02d%02d%02d.%d", tms.tm_year % 100, tms.tm_mon + 1, tms.tm_mday, (
int)
TELL(fh));
429 assert(size < 999999);
431 sprintf(start_str,
"$Start$: %6d\n", size);
432 sprintf(end_str,
"$End$: %6d\n\f", size);
450 chsize(fh,
TELL(fh));
459 if (reply_to[0] && !bedit) {
460 strcpy(last, reply_to);
466 lseek(fh, 72, SEEK_CUR);
468 memset(
str, 0,
sizeof(
str));
470 lseek(fh, -16, SEEK_CUR);
473 if (atoi(
str) == 0) {
474 sprintf(
str,
"%16s", tag);
480 strcpy(last, strtok(
str,
" "));
INT rpc_call(DWORD routine_id,...)