dox Submit an ELog entry.
129{
132 text, reply_to, encoding,
133 afilename1, buffer1, buffer_size1,
134 afilename2, buffer2, buffer_size2, afilename3, buffer3, buffer_size3, tag, tag_size);
135
136#ifdef LOCAL_ROUTINES
137 {
140 char afile_name[3][256+256];
141 char dir[256];
142 char start_str[80], end_str[80], last[80], date[80],
thread[80], attachment[256];
144 time_t now;
145 char *p;
147 size_t message_size = 0;
150
152
153 bedit = (tag[0] != 0);
154
155
159 cm_msg(
MERROR,
"el_submit",
"Cannot lock experiment semaphore, ss_semaphore_wait_for() status %d",
status);
160 abort();
161 }
162
163
166 else {
167
171 }
172
175 abort();
176 }
177
178 for (idx = 0; idx < 3; idx++) {
179
181
182 char afilename[256];
183 const char* buffer = NULL;
184 int buffer_size = 0;
185
186 if (idx == 0) {
187 mstrlcpy(afilename, afilename1, sizeof(afilename));
188 buffer = buffer1;
189 buffer_size = buffer_size1;
190 } else if (idx == 1) {
191 mstrlcpy(afilename, afilename2, sizeof(afilename));
192 buffer = buffer2;
193 buffer_size = buffer_size2;
194 } else if (idx == 2) {
195 mstrlcpy(afilename, afilename3, sizeof(afilename));
196 buffer = buffer3;
197 buffer_size = buffer_size3;
198 }
199
200 if (afilename[0]) {
203 while (strchr(p, ':'))
204 p = strchr(p, ':') + 1;
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
212
213 if (p[0]) {
214 dir[0] = 0;
216 size = sizeof(dir);
217 memset(dir, 0, size);
221
224 }
225
227 time(&now);
228 localtime_r(&now, &tms);
229
231 mstrlcpy(
str, p,
sizeof(
str));
232 sprintf(afile_name[idx], "%02d%02d%02d_%02d%02d%02d_%s",
233 tms.tm_year % 100, tms.tm_mon + 1, tms.tm_mday,
234 tms.tm_hour, tms.tm_min, tms.tm_sec,
str);
235 sprintf(
file_name,
"%s%02d%02d%02d_%02d%02d%02d_%s", dir,
236 tms.tm_year % 100, tms.tm_mon + 1, tms.tm_mday,
237 tms.tm_hour, tms.tm_min, tms.tm_sec,
str);
238
239
241 if (fh < 0) {
242 cm_msg(
MERROR,
"el_submit",
"Cannot write attachment file \"%s\", open() returned %d, errno %d (%s)",
file_name, fh, errno, strerror(errno));
243 } else {
245 close(fh);
246 }
247 }
248 }
249 }
250
251
253
254 size = sizeof(dir);
255 memset(dir, 0, size);
259
262
264
265 char* buffer = NULL;
266
267 if (bedit) {
268
270 mstrlcpy(
str, tag,
sizeof(
str));
271 if (strchr(
str,
'.')) {
273 *strchr(
str,
'.') = 0;
274 }
277 if (fh < 0) {
280 }
281 lseek(fh,
offset, SEEK_SET);
283
284 if (strncmp(
str,
"$Start$", 7) != 0) {
286 close(fh);
288 }
289
290 size = atoi(
str + 9);
291
292 if (size < 1) {
293 cm_msg(
MERROR,
"el_submit",
"cannot read from \'%s\', corrupted file: bad size %d in \"%s\"",
file_name, size,
str);
294 close(fh);
296 }
297
299
301 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));
302 close(fh);
304 }
305
310 }
311
315
318
319
320 lseek(fh, 0, SEEK_END);
322
323 if (tail_size > 0) {
325
326 buffer = (
char *)
M_MALLOC(tail_size);
327 if (buffer == NULL) {
328 close(fh);
331 }
332
333 lseek(fh,
offset + size, SEEK_SET);
337 }
338 lseek(fh,
offset, SEEK_SET);
339 } else {
340
342 time(&now);
343 localtime_r(&now, &tms);
344
345 sprintf(
file_name,
"%s%02d%02d%02d.log", dir, tms.tm_year % 100, tms.tm_mon + 1, tms.tm_mday);
346
348 if (fh < 0) {
351 }
352
353 assert(sizeof(date) >= 32);
354 ctime_r(&now, date);
355 date[24] = 0;
356
357 if (reply_to[0])
358 sprintf(
thread,
"%16s %16s", reply_to,
"0");
359 else
360 sprintf(
thread,
"%16s %16s",
"0",
"0");
361
362 lseek(fh, 0, SEEK_END);
363 }
364
365 message_size = 1000;
366 message_size += strlen(date);
367 message_size += strlen(author);
368 message_size += strlen(
type);
369 message_size += strlen(syst);
370 message_size += strlen(subject);
371 message_size += strlen(attachment);
372 message_size += strlen(afile_name[0]);
373 message_size += strlen(afile_name[1]);
374 message_size += strlen(afile_name[2]);
375 message_size += strlen(encoding);
376 message_size += strlen(text);
377
378
379
380 message = (
char*)malloc(message_size);
381
383 cm_msg(
MERROR,
"el_submit",
"cannot malloc() %d bytes: errno %d (%s)", size, errno, strerror(errno));
384 close(fh);
386 }
387
388
389
390 sprintf(
message,
"Date: %s\n", date);
397
398
399 if (bedit && afile_name[0][0] == 0 && afile_name[1][0] == 0 && afile_name[2][0] == 0)
401 else {
402 sprintf(
message + strlen(
message),
"Attachment: %s", afile_name[0]);
403 if (afile_name[1][0])
405 if (afile_name[2][0])
407 }
409
411 sprintf(
message + strlen(
message),
"========================================\n");
413
414 assert(strlen(
message) < message_size);
415
416 size = 0;
417 sprintf(start_str, "$Start$: %6d\n", size);
418 sprintf(end_str, "$End$: %6d\n\f", size);
419
420 size = strlen(
message) + strlen(start_str) + strlen(end_str);
421
422 if (tag != NULL && !bedit) {
423 sprintf(tag,
"%02d%02d%02d.%d", tms.tm_year % 100, tms.tm_mon + 1, tms.tm_mday, (
int)
TELL(fh));
424 }
425
426
427 assert(size < 999999);
428
429 sprintf(start_str, "$Start$: %6d\n", size);
430 sprintf(end_str, "$End$: %6d\n\f", size);
431
435
438 message_size = 0;
439
440 if (bedit) {
441 if (tail_size > 0) {
444 }
445
446
447#ifdef OS_WINNT
448 chsize(fh,
TELL(fh));
449#else
451#endif
452 }
453
454 close(fh);
455
456
457 if (reply_to[0] && !bedit) {
458 strcpy(last, reply_to);
459 do {
460 char filename[256];
463
464 lseek(fh, 72, SEEK_CUR);
466 memset(
str, 0,
sizeof(
str));
468 lseek(fh, -16, SEEK_CUR);
469
470
471 if (atoi(
str) == 0) {
472 sprintf(
str,
"%16s", tag);
474 close(fh);
475 break;
476 } else {
477
478 strcpy(last, strtok(
str,
" "));
479 close(fh);
480 }
481 } else
482
483 break;
484
486 }
487
488
490 }
491#endif
492
494}
INT rpc_call(DWORD routine_id,...)