150{
151 int rc, pnum = 0, xfd;
152 XrdOucTList *tp = pargs.
paths;
153 char buff[2048], blink[2048];
154 struct iovec iovec[2];
155
156
157
158 if (!LogDir) return;
159
160
161
162 while(tp) {pnum++; tp = tp->
next;}
163
164
165
166 snprintf(buff, sizeof(buff)-1, "%s%s_%s_%d_%d", LogDir,
168
169
170
171 if ((xfd =
open(buff, O_WRONLY|O_CREAT|O_TRUNC,0644)) < 0)
172 {eDest->Emsg("Log", errno, "open prep log file", buff);
173 return;
174 }
175
176
177
178 iovec[1].iov_base = (char *)" ";
179 iovec[1].iov_len = 1;
181 while(tp)
182 {
if (tp->
next == 0) iovec[1].iov_base = (
char *)
"\n";
183 iovec[0].iov_base = tp->
text;
184 iovec[0].iov_len = strlen(tp->
text);
185 do {rc =
writev(xfd, (
const struct iovec *)iovec, 2);}
186 while(rc < 0 && errno == EINTR);
187 if (rc < 0)
188 {eDest->Emsg("Log", errno, "write prep log file", buff);
190 return;
191 }
193 }
194
195
196
198 strcpy(blink, LogDir);
200 if (symlink((const char *)buff, (const char *)blink))
201 {eDest->Emsg("Log", errno, "create symlink to prep log file", buff);
202 return;
203 }
204}