1 /*
2  * Copyright (c) 1998,1999,2000
3  *      Traakan, Inc., Los Altos, CA
4  *      All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice unmodified, this list of conditions, and the following
11  *    disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26  * SUCH DAMAGE.
27  */
28 
29 /*
30  * Project:  NDMJOB
31  * Ident:    $Id: $
32  *
33  * Description:
34  *
35  */
36 
37 #include "ndmjob.h"
38 
39 #ifndef NDMOS_OPTION_NO_CONTROL_AGENT
start_index_file(void)40 int start_index_file(void)
41 {
42   if (I_index_file && strcmp(I_index_file, "-") != 0) {
43     FILE* ifp;
44 
45     if (atoi(I_index_file) != 0) {
46       ndmjob_log(1, "Writing index (-I%s)", I_index_file);
47       ifp = fdopen(atoi(I_index_file), "w");
48     } else {
49       ndmjob_log(1, "Writing index (-I%s)", I_index_file);
50       ifp = fopen(I_index_file, "w");
51     }
52     if (!ifp) { error_byebye("can't open -I logfile"); }
53     index_fp = ifp;
54     fprintf(ifp, "##ndmjob -I\n");
55   } else {
56     index_fp = stderr;
57   }
58 
59   return 0;
60 }
61 
sort_index_file(void)62 int sort_index_file(void)
63 {
64   if (I_index_file && strcmp(I_index_file, "-") != 0 &&
65       atoi(I_index_file) == 0) {
66     char cmd[512];
67 
68     fprintf(index_fp, "##ndmjob -J\n"); /* sorts to 2nd line */
69     fclose(index_fp);
70     index_fp = stderr; /* in case anything else happens */
71 
72     snprintf(cmd, sizeof(cmd), "LC_ALL=C sort %s -o %s\n", I_index_file,
73              I_index_file);
74     ndmjob_log(3, "sort command: %s", cmd);
75     ndmjob_log(1, "sorting index");
76     if (system(cmd) < 0) error_byebye("sort index failed");
77     ndmjob_log(1, "sort index done");
78   }
79 
80   return 0;
81 }
82 #endif /* !NDMOS_OPTION_NO_CONTROL_AGENT */
83 
error_byebye(char * fmt,...)84 void error_byebye(char* fmt, ...)
85 {
86   va_list ap;
87   char buf[4096];
88 
89   va_start(ap, fmt);
90   vsnprintf(buf, sizeof(buf), fmt, ap);
91   va_end(ap);
92   ndmjob_log(0, "FATAL: %s", buf);
93   fprintf(stderr, "%s: %s\n", progname, buf);
94   exit(1);
95 }
96 
ndmjob_log_deliver(struct ndmlog * log,char * tag,int lev,char * msg)97 void ndmjob_log_deliver(struct ndmlog* log, char* tag, int lev, char* msg)
98 {
99   char tagbuf[32];
100 
101   if (the_mode == 'D') {
102     char buf[32];
103 
104     snprintf(buf, sizeof(buf), "%s(%d)", tag, (int)getpid());
105     snprintf(tagbuf, sizeof(tagbuf), "%-11s", buf);
106   } else {
107     snprintf(tagbuf, sizeof(tagbuf), "%-4s", tag);
108   }
109 
110   if (d_debug >= lev) {
111     if (!o_no_time_stamps) {
112       fprintf(log_fp, "%s %s %s\n", tagbuf, ndmlog_time_stamp(), msg);
113     } else {
114       fprintf(log_fp, "%s t[x] %s\n", tagbuf, msg);
115     }
116     fflush(log_fp);
117   }
118 
119   if (v_verbose >= lev) {
120     printf("%s\n", msg);
121     fflush(stdout);
122   }
123 }
124 
125 #ifndef NDMOS_OPTION_NO_CONTROL_AGENT
ndmjob_ixlog_deliver(struct ndmlog * log,char * tag,int lev,char * msg)126 void ndmjob_ixlog_deliver(struct ndmlog* log, char* tag, int lev, char* msg)
127 {
128   fprintf(index_fp, "%s %s\n", tag, msg);
129   fflush(index_fp); /* this doesn't change the run time */
130 }
131 #endif /* !NDMOS_OPTION_NO_CONTROL_AGENT */
132 
ndmjob_log(int lev,char * fmt,...)133 void ndmjob_log(int lev, char* fmt, ...)
134 {
135   va_list ap;
136   char buf[4096];
137 
138   va_start(ap, fmt);
139   vsnprintf(buf, sizeof(buf), fmt, ap);
140   va_end(ap);
141 
142   ndmjob_log_deliver(&the_param.log, the_param.log_tag, lev, buf);
143 }
144