|
@@ -467,6 +467,11 @@ const cmChar_t* cmFileSysVMakeFn( cmFileSysH_t h, const cmChar_t* dir, const cmC
|
467
|
467
|
return rp;
|
468
|
468
|
}
|
469
|
469
|
|
|
470
|
+const cmChar_t* cmFileSysVMakeUserFn( cmFileSysH_t h, const cmChar_t* dirPrefix, const cmChar_t* fn, const cmChar_t* ext, va_list vl )
|
|
471
|
+{
|
|
472
|
+ return cmFileSysMakeFn(h,cmFileSysUserDir(h),fn,ext,dirPrefix,NULL);
|
|
473
|
+}
|
|
474
|
+
|
470
|
475
|
const cmChar_t* cmFileSysMakeFn( cmFileSysH_t h, const cmChar_t* dir, const cmChar_t* fn, const cmChar_t* ext, ... )
|
471
|
476
|
{
|
472
|
477
|
va_list vl;
|
|
@@ -476,6 +481,41 @@ const cmChar_t* cmFileSysMakeFn( cmFileSysH_t h, const cmChar_t* dir, const cmCh
|
476
|
481
|
return retPtr;
|
477
|
482
|
}
|
478
|
483
|
|
|
484
|
+const cmChar_t* cmFileSysMakeUserFn( cmFileSysH_t h, const cmChar_t* dir, const cmChar_t* fn, const cmChar_t* ext, ... )
|
|
485
|
+{
|
|
486
|
+ va_list vl;
|
|
487
|
+ va_start(vl,ext);
|
|
488
|
+ const cmChar_t* retPtr = cmFileSysVMakeUserFn(h,dir,fn,ext,vl);
|
|
489
|
+ va_end(vl);
|
|
490
|
+ return retPtr;
|
|
491
|
+}
|
|
492
|
+
|
|
493
|
+
|
|
494
|
+const cmChar_t* cmFileSysVMakeDir( cmFileSysH_t h, const cmChar_t* dir, va_list vl )
|
|
495
|
+{ return cmFileSysVMakeFn(h,dir,NULL,NULL,vl); }
|
|
496
|
+
|
|
497
|
+const cmChar_t* cmFileSysMakeDir( cmFileSysH_t h, const cmChar_t* dir, ... )
|
|
498
|
+{
|
|
499
|
+ va_list vl;
|
|
500
|
+ va_start(vl,dir);
|
|
501
|
+ const cmChar_t* retPtr = cmFileSysVMakeFn(h,dir,NULL,NULL,vl);
|
|
502
|
+ va_end(vl);
|
|
503
|
+ return retPtr;
|
|
504
|
+}
|
|
505
|
+
|
|
506
|
+const cmChar_t* cmFileSysVMakeUserDir( cmFileSysH_t h, const cmChar_t* dir, va_list vl )
|
|
507
|
+{ return cmFileSysVMakeUserFn(h,dir,NULL,NULL,vl); }
|
|
508
|
+
|
|
509
|
+const cmChar_t* cmFileSysMakeUserDir( cmFileSysH_t h, const cmChar_t* dir, ... )
|
|
510
|
+{
|
|
511
|
+ va_list vl;
|
|
512
|
+ va_start(vl,dir);
|
|
513
|
+ const cmChar_t* retPtr = cmFileSysVMakeUserFn(h,dir,NULL,NULL,vl);
|
|
514
|
+ va_end(vl);
|
|
515
|
+ return retPtr;
|
|
516
|
+}
|
|
517
|
+
|
|
518
|
+
|
479
|
519
|
void cmFileSysFreeFn( cmFileSysH_t h, const cmChar_t* fn )
|
480
|
520
|
{
|
481
|
521
|
cmFs_t* p = _cmFileSysHandleToPtr(h);
|
|
@@ -535,6 +575,19 @@ cmFsRC_t cmFileSysMkDir( cmFileSysH_t h, const cmChar_t* dir )
|
535
|
575
|
return kOkFsRC;
|
536
|
576
|
}
|
537
|
577
|
|
|
578
|
+cmFsRC_t cmFileSysMkUserDir( cmFileSysH_t h, const cmChar_t* dir0 )
|
|
579
|
+{
|
|
580
|
+ const cmChar_t* dir = cmFileSysMakeUserFn(h,dir0,NULL,NULL,NULL);
|
|
581
|
+
|
|
582
|
+ if( dir == NULL )
|
|
583
|
+ return _cmFileSysError(_cmFileSysHandleToPtr(h),kFormFnFailFsRC,0, "The specified directory string /<user>/%s could not be formed.",cmStringNullGuard(dir0));
|
|
584
|
+
|
|
585
|
+ cmFsRC_t rc = cmFileSysMkDir(h,dir);
|
|
586
|
+ cmFileSysFreeFn(h,dir);
|
|
587
|
+ return rc;
|
|
588
|
+}
|
|
589
|
+
|
|
590
|
+
|
538
|
591
|
cmFsRC_t cmFileSysMkDirAll( cmFileSysH_t h, const cmChar_t* dir )
|
539
|
592
|
{
|
540
|
593
|
cmFsRC_t rc = kOkFsRC;
|
|
@@ -561,6 +614,18 @@ cmFsRC_t cmFileSysMkDirAll( cmFileSysH_t h, const cmChar_t* dir )
|
561
|
614
|
return rc;
|
562
|
615
|
}
|
563
|
616
|
|
|
617
|
+cmFsRC_t cmFileSysMkUserDirAll( cmFileSysH_t h, const cmChar_t* dir0 )
|
|
618
|
+{
|
|
619
|
+ const cmChar_t* dir = cmFileSysMakeUserFn(h,dir0,NULL,NULL,NULL);
|
|
620
|
+
|
|
621
|
+ if( dir == NULL )
|
|
622
|
+ return _cmFileSysError(_cmFileSysHandleToPtr(h),kFormFnFailFsRC,0,"The specified directory string /<user>/%s could not be formed.",cmStringNullGuard(dir0));
|
|
623
|
+
|
|
624
|
+ cmFsRC_t rc = cmFileSysMkDirAll(h,dir);
|
|
625
|
+ cmFileSysFreeFn(h,dir);
|
|
626
|
+ return rc;
|
|
627
|
+}
|
|
628
|
+
|
564
|
629
|
cmFileSysPathPart_t* cmFileSysPathParts( cmFileSysH_t h, const cmChar_t* pathStr )
|
565
|
630
|
{
|
566
|
631
|
|
|
@@ -1171,6 +1236,42 @@ const cmChar_t* cmFsMakeFn( const cmChar_t* dirPrefix, const cmChar_t* fn,
|
1171
|
1236
|
return retPtr;
|
1172
|
1237
|
}
|
1173
|
1238
|
|
|
1239
|
+const cmChar_t* cmFsVMakeUserFn( const cmChar_t* dirPrefix, const cmChar_t* fn, const cmChar_t* ext, va_list vl )
|
|
1240
|
+{ return cmFileSysVMakeUserFn(_cmFsH,dirPrefix,fn,ext,vl); }
|
|
1241
|
+
|
|
1242
|
+const cmChar_t* cmFsMakeUserFn( const cmChar_t* dirPrefix, const cmChar_t* fn, const cmChar_t* ext, ... )
|
|
1243
|
+{
|
|
1244
|
+ va_list vl;
|
|
1245
|
+ va_start(vl,ext);
|
|
1246
|
+ const cmChar_t* retPtr = cmFsVMakeUserFn(dirPrefix,fn,ext,vl);
|
|
1247
|
+ va_end(vl);
|
|
1248
|
+ return retPtr;
|
|
1249
|
+}
|
|
1250
|
+
|
|
1251
|
+const cmChar_t* cmFsVMakeDir( const cmChar_t* dir, va_list vl )
|
|
1252
|
+{ return cmFileSysVMakeDir(_cmFsH,dir,vl); }
|
|
1253
|
+
|
|
1254
|
+const cmChar_t* cmFsMakeDir( const cmChar_t* dir, ... )
|
|
1255
|
+{
|
|
1256
|
+ va_list vl;
|
|
1257
|
+ va_start(vl,dir);
|
|
1258
|
+ const cmChar_t* retPtr = cmFsVMakeDir(dir,vl);
|
|
1259
|
+ va_end(vl);
|
|
1260
|
+ return retPtr;
|
|
1261
|
+}
|
|
1262
|
+
|
|
1263
|
+const cmChar_t* cmFsVMakeUserDir( const cmChar_t* dir, va_list vl )
|
|
1264
|
+{ return cmFileSysVMakeUserDir(_cmFsH,dir,vl); }
|
|
1265
|
+
|
|
1266
|
+const cmChar_t* cmFsMakeUserDir( const cmChar_t* dir, ... )
|
|
1267
|
+{
|
|
1268
|
+ va_list vl;
|
|
1269
|
+ va_start(vl,dir);
|
|
1270
|
+ const cmChar_t* retPtr = cmFsVMakeUserDir(dir,vl);
|
|
1271
|
+ va_end(vl);
|
|
1272
|
+ return retPtr;
|
|
1273
|
+}
|
|
1274
|
+
|
1174
|
1275
|
void cmFsFreeFn( const cmChar_t* fn )
|
1175
|
1276
|
{ cmFileSysFreeFn(_cmFsH, fn); }
|
1176
|
1277
|
|
|
@@ -1183,6 +1284,12 @@ cmFsRC_t cmFsMkDir( const cmChar_t* dir )
|
1183
|
1284
|
cmFsRC_t cmFsMkDirAll( const cmChar_t* dir )
|
1184
|
1285
|
{ return cmFileSysMkDirAll(_cmFsH,dir); }
|
1185
|
1286
|
|
|
1287
|
+cmFsRC_t cmFsMkUserDir( const cmChar_t* dir )
|
|
1288
|
+{ return cmFileSysMkUserDir(_cmFsH,dir); }
|
|
1289
|
+
|
|
1290
|
+cmFsRC_t cmFsMkUserDirAll( const cmChar_t* dir )
|
|
1291
|
+{ return cmFileSysMkUserDirAll(_cmFsH,dir); }
|
|
1292
|
+
|
1186
|
1293
|
cmFileSysPathPart_t* cmFsPathParts( const cmChar_t* pathNameStr )
|
1187
|
1294
|
{ return cmFileSysPathParts(_cmFsH,pathNameStr); }
|
1188
|
1295
|
|
|
@@ -1222,21 +1329,14 @@ cmFsRC_t cmFsErrorCode()
|
1222
|
1329
|
//(
|
1223
|
1330
|
//
|
1224
|
1331
|
// cmFileSysTest() function gives usage and testing examples
|
1225
|
|
-// for some of the cmFileSys functions.
|
1226
|
|
-// Note that the HOME_DIR macro should be set to your true
|
1227
|
|
-// $HOME directroy and SRC_DIR should be set to any existing
|
1228
|
|
-// and accessible directory.
|
|
1332
|
+// for some of the cmFileSys functions. Note that the
|
|
1333
|
+// 'dir0' directory should exist and contain files and
|
|
1334
|
+// a shallow sub-tree in order to exercise the directory
|
|
1335
|
+// tree walking routine.
|
1229
|
1336
|
//
|
1230
|
1337
|
//)
|
1231
|
1338
|
//(
|
1232
|
1339
|
|
1233
|
|
-#if defined(OS_OSX)
|
1234
|
|
-#define HOME_DIR "/Users/kevin"
|
1235
|
|
-#else
|
1236
|
|
-#define HOME_DIR "/home/kevin"
|
1237
|
|
-#endif
|
1238
|
|
-
|
1239
|
|
-#define SRC_DIR HOME_DIR"/src"
|
1240
|
1340
|
|
1241
|
1341
|
void _cmFileSysTestFnParser(
|
1242
|
1342
|
cmFileSysH_t h,
|
|
@@ -1250,10 +1350,10 @@ cmFsRC_t cmFileSysTest( cmCtx_t* ctx )
|
1250
|
1350
|
|
1251
|
1351
|
cmFsRC_t rc = kOkFsRC;
|
1252
|
1352
|
cmFileSysH_t h = cmFileSysNullHandle;
|
1253
|
|
- const char dir0[] = SRC_DIR;
|
1254
|
|
- const char dir1[] = HOME_DIR"/blah";
|
1255
|
|
- const char file0[] = HOME_DIR"/.emacs";
|
1256
|
|
- const char file1[] = HOME_DIR"/blah.txt";
|
|
1353
|
+ const char* dir0 = cmFsMakeUserDir("src/kc",NULL);
|
|
1354
|
+ const char* dir1 = cmFsMakeUserDir("blah",NULL,NULL,NULL);
|
|
1355
|
+ const char* file0 = cmFsMakeUserFn(NULL,".emacs",NULL,NULL);
|
|
1356
|
+ const char* file1 = cmFsMakeUserFn(NULL,"blah","txt",NULL);
|
1257
|
1357
|
const char not[] = " not ";
|
1258
|
1358
|
const char e[] = " ";
|
1259
|
1359
|
bool fl = false;
|
|
@@ -1288,15 +1388,15 @@ cmFsRC_t cmFileSysTest( cmCtx_t* ctx )
|
1288
|
1388
|
//----------------------------------------------------------
|
1289
|
1389
|
// Test the file name creation functions
|
1290
|
1390
|
//
|
1291
|
|
- if((fn = cmFileSysMakeFn(h,HOME_DIR,"cmFileSys",
|
1292
|
|
- "c","src","cm","src",NULL)) != NULL)
|
|
1391
|
+ if((fn = cmFileSysMakeUserFn(h,"src","cmFileSys",
|
|
1392
|
+ "c","cm","src",NULL)) != NULL)
|
1293
|
1393
|
{
|
1294
|
1394
|
printf("File:'%s'\n",fn);
|
1295
|
1395
|
}
|
1296
|
1396
|
cmFileSysFreeFn(h,fn);
|
1297
|
1397
|
|
1298
|
|
- if((fn = cmFileSysMakeFn(h,HOME_DIR,"cmFileSys",
|
1299
|
|
- ".c","/src/","/cm/","/src/",NULL)) != NULL )
|
|
1398
|
+ if((fn = cmFileSysMakeUserFn(h,"src","cmFileSys",
|
|
1399
|
+ ".c","/cm/","/src/",NULL)) != NULL )
|
1300
|
1400
|
{
|
1301
|
1401
|
printf("File:'%s'\n",fn);
|
1302
|
1402
|
}
|
|
@@ -1305,23 +1405,26 @@ cmFsRC_t cmFileSysTest( cmCtx_t* ctx )
|
1305
|
1405
|
//----------------------------------------------------------
|
1306
|
1406
|
// Test the file name parsing functions
|
1307
|
1407
|
//
|
1308
|
|
- _cmFileSysTestFnParser(h,&ctx->rpt,
|
1309
|
|
- HOME_DIR"/src/cm/src/cmFileSys.c");
|
1310
|
|
-
|
1311
|
|
- _cmFileSysTestFnParser(h,&ctx->rpt,
|
1312
|
|
- HOME_DIR"/src/cm/src/cmFileSys");
|
1313
|
1408
|
|
1314
|
|
- _cmFileSysTestFnParser(h,&ctx->rpt,
|
1315
|
|
- HOME_DIR"/src/cm/src/cmFileSys/");
|
|
1409
|
+ const char* fn0 = cmFileSysMakeUserFn(h,"src/cm/src","cmFileSys","c",NULL);
|
|
1410
|
+ const char* fn1 = cmFileSysMakeUserFn(h,"src/cm/src","cmFileSys",NULL,NULL);
|
|
1411
|
+ const char* fn2 = cmFileSysMakeUserDir(h,"src/cm/src/cmFileSys/",NULL);
|
|
1412
|
+
|
|
1413
|
+ _cmFileSysTestFnParser(h,&ctx->rpt,fn0);
|
|
1414
|
+ _cmFileSysTestFnParser(h,&ctx->rpt,fn1);
|
|
1415
|
+ _cmFileSysTestFnParser(h,&ctx->rpt,fn2);
|
1316
|
1416
|
|
1317
|
1417
|
_cmFileSysTestFnParser(h,&ctx->rpt,"cmFileSys.c");
|
1318
|
1418
|
_cmFileSysTestFnParser(h,&ctx->rpt,"/");
|
1319
|
1419
|
_cmFileSysTestFnParser(h,&ctx->rpt," ");
|
1320
|
1420
|
|
|
1421
|
+ cmFileSysFreeFn(h,fn0);
|
|
1422
|
+ cmFileSysFreeFn(h,fn1);
|
|
1423
|
+ cmFileSysFreeFn(h,fn1);
|
|
1424
|
+
|
1321
|
1425
|
//----------------------------------------------------------
|
1322
|
1426
|
// Test the directory tree walking routines.
|
1323
|
1427
|
//
|
1324
|
|
- cmRptPrintf(&ctx->rpt,"Dir Entry Test:\n");
|
1325
|
1428
|
cmFileSysDirEntry_t* dep;
|
1326
|
1429
|
unsigned dirEntCnt;
|
1327
|
1430
|
unsigned filterFlags = kDirFsFl
|
|
@@ -1329,8 +1432,11 @@ cmFsRC_t cmFileSysTest( cmCtx_t* ctx )
|
1329
|
1432
|
| kRecurseFsFl
|
1330
|
1433
|
| kFullPathFsFl;
|
1331
|
1434
|
|
1332
|
|
- if((dep = cmFileSysDirEntries(h,SRC_DIR"/doc",filterFlags,
|
1333
|
|
- &dirEntCnt)) != NULL)
|
|
1435
|
+ const char* src_dir = cmFileSysMakeFn(h,dir0,"doc",NULL,NULL);
|
|
1436
|
+
|
|
1437
|
+ cmRptPrintf(&ctx->rpt,"Dir Entry Test: %s\n",src_dir);
|
|
1438
|
+
|
|
1439
|
+ if((dep = cmFileSysDirEntries(h,src_dir,filterFlags,&dirEntCnt)) != NULL)
|
1334
|
1440
|
{
|
1335
|
1441
|
unsigned i;
|
1336
|
1442
|
for(i=0; i<dirEntCnt; ++i)
|
|
@@ -1339,6 +1445,8 @@ cmFsRC_t cmFileSysTest( cmCtx_t* ctx )
|
1339
|
1445
|
cmFileSysDirFreeEntries(h,dep);
|
1340
|
1446
|
}
|
1341
|
1447
|
|
|
1448
|
+ cmFileSysFreeFn(h,src_dir);
|
|
1449
|
+
|
1342
|
1450
|
//----------------------------------------------------------
|
1343
|
1451
|
// Test the directory parsing/building routines.
|
1344
|
1452
|
//
|
|
@@ -1372,7 +1480,7 @@ cmFsRC_t cmFileSysTest( cmCtx_t* ctx )
|
1372
|
1480
|
//----------------------------------------------------------
|
1373
|
1481
|
// Test the extended mkdir routine.
|
1374
|
1482
|
//
|
1375
|
|
- if( cmFileSysMkDirAll(h, HOME_DIR"/temp/doc/doc" )!=kOkFsRC )
|
|
1483
|
+ if( cmFileSysMkUserDirAll(h, "/temp/doc/doc" )!=kOkFsRC )
|
1376
|
1484
|
{
|
1377
|
1485
|
cmRptPrint(&ctx->rpt,"cmFileSysMkDirAll() failed.\n");
|
1378
|
1486
|
}
|
|
@@ -1383,6 +1491,11 @@ cmFsRC_t cmFileSysTest( cmCtx_t* ctx )
|
1383
|
1491
|
|
1384
|
1492
|
cmRptPrintf(&ctx->rpt,"File Test done\n");
|
1385
|
1493
|
|
|
1494
|
+ cmFsFreeFn(dir0);
|
|
1495
|
+ cmFsFreeFn(dir1);
|
|
1496
|
+ cmFsFreeFn(file0);
|
|
1497
|
+ cmFsFreeFn(file1);
|
|
1498
|
+
|
1386
|
1499
|
return rc;
|
1387
|
1500
|
}
|
1388
|
1501
|
|