198{
199 struct bHelper {char *p; bHelper(const char *bP) : p(bP ? strdup(bP) : 0) {}
200 ~bHelper() {if (p) free(p);}
201 };
202 bHelper prms(parms);
203 const char *oPfx;
204 char *val, *eP;
205 std::string ostr;
206 int fnMax = 0, n;
207 char sChar = '\\';
208
209
210
212 toks.GetLine();
213 while((val = toks.GetToken()) && *val)
214 { if (!strcmp(val, "-slash"))
215 {if (!(val = toks.GetToken()) || !(*val))
216 {
eDest->
Emsg(
"N2No2p",
"-slash argument not specified.");
217 return 0;
218 }
219 if (strlen(val) == 1) {sChar = *val; continue;}
220 n = strtol(val, &eP, 16);
221 if (n & 0xff || *eP)
222 {
eDest->
Emsg(
"N2No2p",
"Invalid -slash argument -",val);
223 return 0;
224 }
225 sChar = static_cast<char>(n);
226 }
227 else if (!strcmp(val, "-maxfnlen"))
228 {if (!(val = toks.GetToken()) || !(*val))
229 {
eDest->
Emsg(
"N2No2p",
"-maxfnlen argument not specified.");
230 return 0;
231 }
232 fnMax = strtol(val, &eP, 16);
233 if (fnMax <= 0 || *eP)
234 {
eDest->
Emsg(
"N2No2p",
"Invalid -maxfnlen argument -",val);
235 return 0;
236 }
237 }
238 else break;
239 }
240
241
242
243 if (!val || !(*val)) oPfx = "/";
244 else {if (*val != '/')
245 {
eDest->
Emsg(
"N2No2p",
"Invalid object ID path prefix -", val);
246 return 0;
247 }
248 oPfx = val;
249 n = strlen(val);
250 if (val[n-1] != '/') {ostr = val; ostr += '/'; oPfx = ostr.c_str();}
251 }
252
253
254
255 if (!fnMax)
256 if ((fnMax =
pathconf(
"/", _PC_NAME_MAX)) < 0)
257 {
eDest->
Emsg(
"N2No2p", errno,
"determine -fnmaxlen for '/'; using 255.");
258 fnMax = 255;
259 }
260
261
262
264}
long pathconf(const char *path, int name)
int Emsg(const char *esfx, int ecode, const char *text1, const char *text2=0)