dox Submit an ELog entry.
131{
134 text, reply_to, encoding,
135 afilename1, buffer1, buffer_size1,
136 afilename2, buffer2, buffer_size2, afilename3, buffer3, buffer_size3, tag, tag_size);
137
138#ifdef LOCAL_ROUTINES
139 {
142 char afile_name[3][256+256];
143 char dir[256];
144 char start_str[80], end_str[80], last[80], date[80],
thread[80], attachment[256];
146 time_t now;
147 char *p;
149 size_t message_size = 0;
152
154
155 bedit = (tag[0] != 0);
156
157
161 cm_msg(
MERROR,
"el_submit",
"Cannot lock experiment semaphore, ss_semaphore_wait_for() status %d",
status);
162 abort();
163 }
164
165
168 else {
169
173 }
174
177 abort();
178 }
179
180 for (idx = 0; idx < 3; idx++) {
181
183
184 char afilename[256];
185 const char* buffer = NULL;
186 int buffer_size = 0;
187
188 if (idx == 0) {
189 mstrlcpy(afilename, afilename1, sizeof(afilename));
190 buffer = buffer1;
191 buffer_size = buffer_size1;
192 } else if (idx == 1) {
193 mstrlcpy(afilename, afilename2, sizeof(afilename));
194 buffer = buffer2;
195 buffer_size = buffer_size2;
196 } else if (idx == 2) {
197 mstrlcpy(afilename, afilename3, sizeof(afilename));
198 buffer = buffer3;
199 buffer_size = buffer_size3;
200 }
201
202 if (afilename[0]) {
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;
213
214
215 if (p[0]) {
216 dir[0] = 0;
218 size = sizeof(dir);
219 memset(dir, 0, size);
223
226 }
227
229 time(&now);
230 localtime_r(&now, &tms);
231
233 mstrlcpy(
str, p,
sizeof(
str));
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);
240
241
243 if (fh < 0) {
244 cm_msg(
MERROR,
"el_submit",
"Cannot write attachment file \"%s\", open() returned %d, errno %d (%s)",
file_name, fh, errno, strerror(errno));
245 } else {
247 close(fh);
248 }
249 }
250 }
251 }
252
253
255
256 size = sizeof(dir);
257 memset(dir, 0, size);
261
264
266
267 char* buffer = NULL;
268
269 if (bedit) {
270
272 mstrlcpy(
str, tag,
sizeof(
str));
273 if (strchr(
str,
'.')) {
275 *strchr(
str,
'.') = 0;
276 }
279 if (fh < 0) {
282 }
283 lseek(fh,
offset, SEEK_SET);
285
286 if (strncmp(
str,
"$Start$", 7) != 0) {
288 close(fh);
290 }
291
292 size = atoi(
str + 9);
293
294 if (size < 1) {
295 cm_msg(
MERROR,
"el_submit",
"cannot read from \'%s\', corrupted file: bad size %d in \"%s\"",
file_name, size,
str);
296 close(fh);
298 }
299
301
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));
304 close(fh);
306 }
307
312 }
313
317
320
321
322 lseek(fh, 0, SEEK_END);
324
325 if (tail_size > 0) {
327
328 buffer = (
char *)
M_MALLOC(tail_size);
329 if (buffer == NULL) {
330 close(fh);
333 }
334
335 lseek(fh,
offset + size, SEEK_SET);
339 }
340 lseek(fh,
offset, SEEK_SET);
341 } else {
342
344 time(&now);
345 localtime_r(&now, &tms);
346
347 sprintf(
file_name,
"%s%02d%02d%02d.log", dir, tms.tm_year % 100, tms.tm_mon + 1, tms.tm_mday);
348
350 if (fh < 0) {
353 }
354
355 assert(sizeof(date) >= 32);
356 ctime_r(&now, date);
357 date[24] = 0;
358
359 if (reply_to[0])
360 sprintf(
thread,
"%16s %16s", reply_to,
"0");
361 else
362 sprintf(
thread,
"%16s %16s",
"0",
"0");
363
364 lseek(fh, 0, SEEK_END);
365 }
366
367 message_size = 1000;
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);
379
380
381
382 message = (
char*)malloc(message_size);
383
385 cm_msg(
MERROR,
"el_submit",
"cannot malloc() %d bytes: errno %d (%s)", size, errno, strerror(errno));
386 close(fh);
388 }
389
390
391
392 sprintf(
message,
"Date: %s\n", date);
399
400
401 if (bedit && afile_name[0][0] == 0 && afile_name[1][0] == 0 && afile_name[2][0] == 0)
403 else {
404 sprintf(
message + strlen(
message),
"Attachment: %s", afile_name[0]);
405 if (afile_name[1][0])
407 if (afile_name[2][0])
409 }
411
413 sprintf(
message + strlen(
message),
"========================================\n");
415
416 assert(strlen(
message) < message_size);
417
418 size = 0;
419 sprintf(start_str, "$Start$: %6d\n", size);
420 sprintf(end_str, "$End$: %6d\n\f", size);
421
422 size = strlen(
message) + strlen(start_str) + strlen(end_str);
423
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));
426 }
427
428
429 assert(size < 999999);
430
431 sprintf(start_str, "$Start$: %6d\n", size);
432 sprintf(end_str, "$End$: %6d\n\f", size);
433
437
440 message_size = 0;
441
442 if (bedit) {
443 if (tail_size > 0) {
446 }
447
448
449#ifdef OS_WINNT
450 chsize(fh,
TELL(fh));
451#else
453#endif
454 }
455
456 close(fh);
457
458
459 if (reply_to[0] && !bedit) {
460 strcpy(last, reply_to);
461 do {
462 char filename[256];
465
466 lseek(fh, 72, SEEK_CUR);
468 memset(
str, 0,
sizeof(
str));
470 lseek(fh, -16, SEEK_CUR);
471
472
473 if (atoi(
str) == 0) {
474 sprintf(
str,
"%16s", tag);
476 close(fh);
477 break;
478 } else {
479
480 strcpy(last, strtok(
str,
" "));
481 close(fh);
482 }
483 } else
484
485 break;
486
488 }
489
490
492 }
493#endif
494
496}
INT rpc_call(DWORD routine_id,...)