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