comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

FileManager C

  • 0 Respuestas
  • 1755 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Conectado ANTRAX

  • *
  • Administrator
  • Mensajes: 5380
  • Actividad:
    81.67%
  • Reputación 31
  • ANTRAX
    • Ver Perfil
    • Underc0de
    • Email
  • Skype: underc0de.org
  • Twitter: @Underc0de
« en: Mayo 22, 2011, 09:50:21 pm »
Código: C
  1. #include <netinet/in.h>
  2. #include <netdb.h>
  3. #include <stdint.h>
  4. #include <unistd.h>
  5. #include <inttypes.h>
  6. #include "FieldPrinter.h"
  7. #include "Command.h"
  8. #include "BSD.h"                // for kTextEncodingEnums
  9.  
  10. /////////////////////////////////////////////////////////////////
  11.  
  12. #pragma mark ***** Utilities Routines
  13.  
  14. static void FPAFPString(
  15.     const char *    fieldName,
  16.     size_t          fieldSize,
  17.     const void *    fieldPtr,
  18.     uint32_t        indent,
  19.     size_t          nameWidth,
  20.     uint32_t        verbose,
  21.     const void *    info
  22. )
  23.  
  24.     // Prints an AFP-style Pascal string field, where the field holds
  25.     // the offset from the start of the record to the Pascal string data.
  26.     // info supplies the offset from fieldPtr to the base of the record.
  27.     // The string is assumed to be MacRoman (not my favourite design
  28.     // decision, but offset is already being used and it was too painful
  29.     // to add an extra parameter, or break it out into a record).
  30.     //
  31.     // See definition of FPPrinter for a parameter description.
  32. {
  33.     short           fieldValue;
  34.     const UInt8 *   pstrPtr;
  35.     char *          strBuf;
  36.  
  37.     #pragma unused(fieldSize)
  38.     #pragma unused(verbose)
  39.     No tienes permisos para ver links. Registrate o Entra con tu cuenta( FPStandardPreCondition() );
  40.     fieldValue = *((const short *) fieldPtr);
  41.     pstrPtr = ((const UInt8 *) fieldPtr) - ((size_t) info) + fieldValue;
  42.     strBuf = FPPStringToUTFCString(pstrPtr, kCFStringEncodingMacRoman);
  43.     No tienes permisos para ver links. Registrate o Entra con tu cuenta(strBuf != NULL);
  44.     if (strBuf != NULL) {
  45.         No tienes permisos para ver links. Registrate o Entra con tu cuenta(stdout, "%*s%-*s = %hd ('%s')\n", (int) indent, "", (int) nameWidth, fieldName, fieldValue, strBuf);
  46.     }
  47.     No tienes permisos para ver links. Registrate o Entra con tu cuenta(strBuf);
  48. }
  49.  
  50. static void FPFSFileSecurityRef(
  51.     const char *    fieldName,
  52.     size_t          fieldSize,
  53.     const void *    fieldPtr,
  54.     uint32_t        indent,
  55.     size_t          nameWidth,
  56.     uint32_t        verbose,
  57.     const void *    info
  58. )
  59. {
  60.     #pragma unused(fieldSize)
  61.     #pragma unused(info)
  62.     OSStatus            err;
  63.     int                 junk;
  64.     FSFileSecurityRef   fileSec;
  65.     CFUUIDBytes         uuid;
  66.     UInt32              id;
  67.     UInt16              mode;
  68.     No tienes permisos para ver links. Registrate o Entra con tu cuenta( FPStandardPreCondition() );
  69.     No tienes permisos para ver links. Registrate o Entra con tu cuenta(fieldSize == sizeof(FSFileSecurityRef));
  70.     fileSec = *((FSFileSecurityRef *) fieldPtr);
  71.     if (fileSec == NULL) {
  72.         No tienes permisos para ver links. Registrate o Entra con tu cuenta(stdout, "%*s%-*s = NULL\n", (int) indent, "", (int) nameWidth, fieldName);
  73.     } else {
  74.         acl_t   acl;
  75.         void *  aclBuf;
  76.         size_t  aclBufSize;
  77.         ssize_t aclActualSize;
  78.         aclBufSize = 0;         // quieten warning
  79.         aclActualSize = 0;      // quieten warning
  80.         acl = NULL;
  81.         aclBuf = NULL;
  82.         No tienes permisos para ver links. Registrate o Entra con tu cuenta(stdout, "%*s%s:\n", (int) indent, "", fieldName);
  83.         err = FSFileSecurityGetOwnerUUID(fileSec, &uuid);
  84.         if (err == noErr) {
  85.             FPGUID("owner UUID", sizeof(uuid), &uuid, indent + kStdIndent, No tienes permisos para ver links. Registrate o Entra con tu cuenta("owner UUID"), verbose, NULL);
  86.         }
  87.         err = FSFileSecurityGetOwner(fileSec, &id);
  88.         if (err == noErr) {
  89.             FPUID("owner UID",  sizeof(id), &id, indent + kStdIndent, No tienes permisos para ver links. Registrate o Entra con tu cuenta("owner UUID"), verbose, NULL);
  90.         }
  91.         err = FSFileSecurityGetGroupUUID(fileSec, &uuid);
  92.         if (err == noErr) {
  93.             FPGUID("group UUID", sizeof(uuid), &uuid, indent + kStdIndent, No tienes permisos para ver links. Registrate o Entra con tu cuenta("owner UUID"), verbose, NULL);
  94.         }
  95.         err = FSFileSecurityGetGroup(fileSec, &id);
  96.         if (err == noErr) {
  97.             FPGID("owning GID", sizeof(id), &id, indent + kStdIndent, No tienes permisos para ver links. Registrate o Entra con tu cuenta("owner UUID"), verbose, NULL);
  98.         }
  99.         err = FSFileSecurityGetMode(fileSec, &mode);
  100.         if (err == noErr) {
  101.             FPModeT("mode",      sizeof(mode), &mode, indent + kStdIndent, No tienes permisos para ver links. Registrate o Entra con tu cuenta("owner UUID"), verbose, NULL);
  102.         }
  103.         err = FSFileSecurityCopyAccessControlList(fileSec, &acl);
  104.         if (err == noErr) {
  105.             aclBufSize = acl_size(acl);
  106.             aclBuf = No tienes permisos para ver links. Registrate o Entra con tu cuenta(aclBufSize);
  107.             if (aclBuf == NULL) {
  108.                 err = memFullErr;
  109.             }
  110.         }
  111.         if (err == noErr) {
  112.             aclActualSize = acl_copy_ext_native(aclBuf, acl, aclBufSize);
  113.             if (aclActualSize < 0) {
  114.                 err = errno;
  115.             } else {
  116.                 No tienes permisos para ver links. Registrate o Entra con tu cuenta( ((size_t) aclActualSize) <= aclBufSize );
  117.             }
  118.         }
  119.         if (err == noErr) {
  120.             FPKauthFileSec("acl", aclActualSize, aclBuf, indent + kStdIndent, No tienes permisos para ver links. Registrate o Entra con tu cuenta("owner UUID"), verbose, NULL);
  121.         }
  122.         No tienes permisos para ver links. Registrate o Entra con tu cuenta(aclBuf);
  123.         if (acl != NULL) {
  124.             junk = acl_free(acl);
  125.             No tienes permisos para ver links. Registrate o Entra con tu cuenta(junk == 0);
  126.         }
  127.     }
  128. }
  129.  
  130. #pragma mark *     FSGetVolumeInfo
  131.  
  132. // FSVolumeInfoBitmap
  133.  
  134. static const FPFlagDesc kFSGetVolumeInfoOptions[] = {
  135.     {kFSVolInfoCreateDate,  "kFSVolInfoCreateDate"},
  136.     {kFSVolInfoModDate,     "kFSVolInfoModDate"},
  137.     {kFSVolInfoBackupDate,  "kFSVolInfoBackupDate"},
  138.     {kFSVolInfoCheckedDate, "kFSVolInfoCheckedDate"},
  139.     {kFSVolInfoFileCount,   "kFSVolInfoFileCount"},
  140.     {kFSVolInfoDirCount,    "kFSVolInfoDirCount"},
  141.     {kFSVolInfoSizes,       "kFSVolInfoSizes"},
  142.     {kFSVolInfoBlocks,      "kFSVolInfoBlocks"},
  143.     {kFSVolInfoNextAlloc,   "kFSVolInfoNextAlloc"},
  144.     {kFSVolInfoRsrcClump,   "kFSVolInfoRsrcClump"},
  145.     {kFSVolInfoDataClump,   "kFSVolInfoDataClump"},
  146.     {kFSVolInfoNextID,      "kFSVolInfoNextID"},
  147.     {kFSVolInfoFinderInfo,  "kFSVolInfoFinderInfo"},
  148.     {kFSVolInfoFlags,       "kFSVolInfoFlags"},
  149.     {kFSVolInfoFSInfo,      "kFSVolInfoFSInfo"},
  150.     {kFSVolInfoDriveInfo,   "kFSVolInfoDriveInfo"},
  151.     {0, NULL}
  152. };
  153.  
  154. // Flags in the flags field of FSVolumeInfo.
  155.  
  156. static const FPFlagDesc kVolAttrFlags[] = {
  157.     {kFSVolFlagDefaultVolumeMask,       "kFSVolFlagDefaultVolumeMask"   },
  158.     {kFSVolFlagFilesOpenMask,           "kFSVolFlagFilesOpenMask"       },
  159.     {kFSVolFlagHardwareLockedMask,      "kFSVolFlagHardwareLockedMask"  },
  160.     {kFSVolFlagJournalingActiveMask,    "kFSVolFlagJournalingActiveMask"},
  161.     {kFSVolFlagSoftwareLockedMask,      "kFSVolFlagSoftwareLockedMask"  },
  162.     {0, NULL}
  163. };
  164.  
  165. // Size multipliers for fields in the FSVolumeInfo structure.  See
  166. // FPSize for a description of what this is about.
  167.  
  168. static const FPSizeMultiplier kFSGetVolumeInfoTotalBlocksMultiplier = {
  169.     No tienes permisos para ver links. Registrate o Entra con tu cuenta(FSVolumeInfo, blockSize) - No tienes permisos para ver links. Registrate o Entra con tu cuenta(FSVolumeInfo, totalBlocks),
  170.     sizeof(UInt32)
  171. };
  172.  
  173. static const FPSizeMultiplier kFSGetVolumeInfoFreeBlocksMultiplier = {
  174.     No tienes permisos para ver links. Registrate o Entra con tu cuenta(FSVolumeInfo, blockSize) - No tienes permisos para ver links. Registrate o Entra con tu cuenta(FSVolumeInfo, freeBlocks),
  175.     sizeof(UInt32)
  176. };
  177.  
  178. static void PrintVolumeInfo(
  179.     const HFSUniStr255 *    volName,
  180.     FSVolumeInfoBitmap      options,
  181.     const FSVolumeInfo *    volInfo,
  182.     uint32_t                indent,
  183.     uint32_t                verbose
  184. )
  185.  
  186.     // The core of the FSGetVolumeInfo command.
  187. {
  188.     const size_t kNameSpacer = No tienes permisos para ver links. Registrate o Entra con tu cuenta("nextAllocation");
  189.     No tienes permisos para ver links. Registrate o Entra con tu cuenta(volName != NULL);
  190.     No tienes permisos para ver links. Registrate o Entra con tu cuenta(volInfo != NULL);
  191.     HFSUniStr255FieldPrinter("volumeName", sizeof(*volName), volName, indent, kNameSpacer, verbose, NULL);
  192.     if (options & kFSVolInfoCreateDate) {
  193.         FPUTCDateTime("createDate",  sizeof(volInfo->createDate),  &volInfo->createDate,  indent, kNameSpacer, verbose, NULL);
  194.     }
  195.     if (options & kFSVolInfoModDate) {
  196.         FPUTCDateTime("modifyDate",  sizeof(volInfo->modifyDate),  &volInfo->modifyDate,  indent, kNameSpacer, verbose, NULL);
  197.     }
  198.     if (options & kFSVolInfoBackupDate) {
  199.         FPUTCDateTime("backupDate",  sizeof(volInfo->backupDate),  &volInfo->backupDate,  indent, kNameSpacer, verbose, NULL);
  200.     }
  201.     if (options & kFSVolInfoCheckedDate) {
  202.         FPUTCDateTime("checkedDate", sizeof(volInfo->checkedDate), &volInfo->checkedDate, indent, kNameSpacer, verbose, NULL);
  203.     }
  204.     if (options & kFSVolInfoFileCount) {
  205.         FPUDec("fileCount", sizeof(volInfo->fileCount), &volInfo->fileCount, indent, kNameSpacer, verbose, NULL);
  206.     }
  207.     if (options & kFSVolInfoDirCount) {
  208.         FPUDec("folderCount", sizeof(volInfo->folderCount), &volInfo->folderCount, indent, kNameSpacer, verbose, NULL);
  209.     }
  210.     if (options & kFSVolInfoSizes) {
  211.         FPSize("totalBytes", sizeof(volInfo->totalBytes), &volInfo->totalBytes, indent, kNameSpacer, verbose, NULL);
  212.         FPSize("freeBytes",  sizeof(volInfo->freeBytes),  &volInfo->freeBytes,  indent, kNameSpacer, verbose, NULL);
  213.     }
  214.     if (options & kFSVolInfoBlocks) {
  215.         FPSize("blockSize",   sizeof(volInfo->blockSize),   &volInfo->blockSize,   indent, kNameSpacer, verbose, NULL);
  216.         FPSize("totalBlocks", sizeof(volInfo->totalBlocks), &volInfo->totalBlocks, indent, kNameSpacer, verbose, &kFSGetVolumeInfoTotalBlocksMultiplier);
  217.         FPSize("freeBlocks",  sizeof(volInfo->freeBlocks),  &volInfo->freeBlocks,  indent, kNameSpacer, verbose, &kFSGetVolumeInfoFreeBlocksMultiplier);
  218.     }
  219.     if (options & kFSVolInfoNextAlloc) {
  220.         FPUDec("nextAllocation", sizeof(volInfo->nextAllocation), &volInfo->nextAllocation, indent, kNameSpacer, verbose, NULL);
  221.     }
  222.     if (options & kFSVolInfoRsrcClump) {
  223.         FPSize("rsrcClumpSize", sizeof(volInfo->rsrcClumpSize), &volInfo->rsrcClumpSize, indent, kNameSpacer, verbose, NULL);
  224.     }
  225.     if (options & kFSVolInfoDataClump) {
  226.         FPSize("dataClumpSize", sizeof(volInfo->dataClumpSize), &volInfo->dataClumpSize, indent, kNameSpacer, verbose, NULL);
  227.     }
  228.     if (options & kFSVolInfoNextID) {
  229.         FPUDec("nextCatalogID", sizeof(volInfo->nextCatalogID), &volInfo->nextCatalogID, indent, kNameSpacer, verbose, NULL);
  230.     }
  231.     if (options & kFSVolInfoFinderInfo) {
  232.         FPFinderInfo("finderInfo", sizeof(volInfo->finderInfo), &volInfo->finderInfo, indent, kNameSpacer, verbose, (void *) (uintptr_t) kVolumeInfo);
  233.     }
  234.     if (options & kFSVolInfoFlags) {
  235.         FPFlags("flags", sizeof(volInfo->flags), &volInfo->flags, indent, kNameSpacer, verbose, kVolAttrFlags);
  236.     }
  237.     if (options & kFSVolInfoFSInfo) {
  238.         FPSignature("filesystemID", sizeof(volInfo->filesystemID), &volInfo->filesystemID, indent, kNameSpacer, verbose, (const void *) (uintptr_t) kFPValueHostEndian);
  239.         FPSignature("signature",    sizeof(volInfo->signature),    &volInfo->signature,    indent, kNameSpacer, verbose, (const void *) (uintptr_t) kFPValueHostEndian);
  240.     }
  241.     if (options & kFSVolInfoDriveInfo) {
  242.         FPUDec("driveNumber",  sizeof(volInfo->driveNumber),  &volInfo->driveNumber,  indent, kNameSpacer, verbose, NULL);
  243.         FPUDec("driverRefNum", sizeof(volInfo->driverRefNum), &volInfo->driverRefNum, indent, kNameSpacer, verbose, NULL);
  244.     }
  245. }
  246.  
  247. static CommandError PrintFSGetVolumeInfo(CommandArgsRef args, uint32_t indent, uint32_t verbose)
  248.     // Uses FSGetVolumeInfo to get information about the specified volume and
  249.     // prints the result.
  250.     //
  251.     // indent and verbose are as per the comments for FPPrinter.
  252. {
  253.     OSStatus        err;
  254.     int             options;
  255.     ItemCount       volIndex;
  256.     FSVolumeRefNum  volRefNum;
  257.     FSVolumeInfo    volInfo;
  258.     HFSUniStr255    volName;
  259.     No tienes permisos para ver links. Registrate o Entra con tu cuenta( CommandArgsValid(args) );
  260.     volIndex = 0;               // quieten warning
  261.     if (CommandArgsIsOption(args)) {
  262.         err = CommandArgsGetFlagListInt(args, kFSGetVolumeInfoOptions, &options);
  263.     } else {
  264.         options = kFSVolInfoGettableInfo;
  265.         err = noErr;
  266.     }
  267.     if (err == noErr) {
  268.         if ( CommandArgsGetOptionalConstantString(args, "all") ) {
  269.             volIndex  = 1;
  270.             volRefNum = 0;
  271.         } else {
  272.             volIndex = 0;
  273.             err = CommandArgsGetVRefNum(args, &volRefNum);
  274.         }
  275.     }
  276.  
  277.     if (err == noErr) {
  278.         do {
  279.             FSVolumeRefNum      realVolRefNum;
  280.             err = FSGetVolumeInfo(volRefNum, volIndex, &realVolRefNum, options, &volInfo, &volName, NULL);
  281.             if (err == noErr) {
  282.                 if (volIndex > 0) {
  283.                     // We're printing all volumes
  284.                     if ( (volIndex > 1) && (options != 0) ) {
  285.                         No tienes permisos para ver links. Registrate o Entra con tu cuenta(stdout, "\n");
  286.                     }
  287.                     No tienes permisos para ver links. Registrate o Entra con tu cuenta(stdout, "%*svRefNum = %d\n", (int) indent, "", (int) realVolRefNum);    
  288.                     PrintVolumeInfo(&volName, options, &volInfo, indent + kStdIndent, verbose);
  289.                 } else {
  290.                     // We're printing just one volume
  291.                     PrintVolumeInfo(&volName, options, &volInfo, indent, verbose);
  292.                 }
  293.             }
  294.             volIndex += 1;
  295.         } while ( (err == noErr) && (volIndex > 1) );
  296.         if ( (volIndex > 1) && (err == nsvErr) ) {
  297.             err = noErr;
  298.         }
  299.     }
  300.     return CommandErrorMakeWithOSStatus(err);
  301. }
  302. static const CommandHelpEntry kFSGetVolumeInfoCommandHelp[] = {
  303.     {CommandHelpString, "-options Volume information to get; default is kFSVolInfoGettableInfo"},
  304.     {CommandHelpFlags,  kFSGetVolumeInfoOptions},
  305.     {NULL, NULL}
  306. };
  307. const CommandInfo kFSGetVolumeInfoCommand = {
  308.     PrintFSGetVolumeInfo,
  309.     "FSGetVolumeInfo",
  310.     "[ -options ] ( all | itemPath )",
  311.     "Print information from FSGetVolumeInfo.",
  312.     kFSGetVolumeInfoCommandHelp
  313. };
  314. #pragma mark *     PBHGetVolParmsSync
  315. // Flags for the vMAttrib field of the GetVolParmsInfoBuffer structure.
  316. static const FPFlagDesc kVolParmsFlags[] = {
  317.     {1L << bLimitFCBs, "bLimitFCBs"},
  318.     {1L << bLocalWList, "bLocalWList"},
  319.     {1L << bNoMiniFndr, "bNoMiniFndr"},
  320.     {1L << bNoVNEdit, "bNoVNEdit"},
  321.     {1L << bNoLclSync, "bNoLclSync"},
  322.     {1L << bTrshOffLine, "bTrshOffLine"},
  323.     {1L << bNoSwitchTo, "bNoSwitchTo"},
  324.     {1L << bNoDeskItems, "bNoDeskItems"},
  325.     {1L << bNoBootBlks, "bNoBootBlks"},
  326.     {1L << bAccessCntl, "bAccessCntl"},
  327.     {1L << bNoSysDir, "bNoSysDir"},
  328.     {1L << bHasExtFSVol, "bHasExtFSVol"},
  329.     {1L << bHasOpenDeny, "bHasOpenDeny"},
  330.     {1L << bHasCopyFile, "bHasCopyFile"},
  331.     {1L << bHasMoveRename, "bHasMoveRename"},
  332.     {1L << bHasDesktopMgr, "bHasDesktopMgr"},
  333.     {1L << bHasShortName, "bHasShortName"},
  334.     {1L << bHasFolderLock, "bHasFolderLock"},
  335.     {1L << bHasPersonalAccessPrivileges, "bHasPersonalAccessPrivileges"},
  336.     {1L << bHasUserGroupList, "bHasUserGroupList"},
  337.     {1L << bHasCatSearch, "bHasCatSearch"},
  338.     {1L << bHasFileIDs, "bHasFileIDs"},
  339.     {1L << bHasBTreeMgr, "bHasBTreeMgr"},
  340.     {1L << bHasBlankAccessPrivileges, "bHasBlankAccessPrivileges"},
  341.     {1L << bSupportsAsyncRequests, "bSupportsAsyncRequests"},
  342.     {1L << bSupportsTrashVolumeCache, "bSupportsTrashVolumeCache"},
  343.     {1L << bHasDirectIO, "bHasDirectIO"},
  344.     {0, NULL}
  345. };
  346.  
  347. // Flags for the vMExtendedAttributes field of the GetVolParmsInfoBuffer structure.
  348. static const FPFlagDesc kVolParmsExtendedFlags[] = {
  349.     {1L << bSupportsExtendedFileSecurity, "bSupportsExtendedFileSecurity"},
  350.     {1L << bIsOnExternalBus, "bIsOnExternalBus"},
  351.     {1L << bNoRootTimes, "bNoRootTimes"},
  352.     {1L << bIsRemovable, "bIsRemovable"},
  353.     {1L << bDoNotDisplay, "bDoNotDisplay"},
  354.     {1L << bIsCasePreserving, "bIsCasePreserving"},
  355.     {1L << bIsCaseSensitive, "bIsCaseSensitive"},
  356.     {1L << bIsOnInternalBus, "bIsOnInternalBus"},
  357.     {1L << bNoVolumeSizes, "bNoVolumeSizes"},
  358.     {1L << bSupportsJournaling, "bSupportsJournaling"},
  359.     {1L << bSupportsExclusiveLocks, "bSupportsExclusiveLocks"},
  360.     {1L << bAllowCDiDataHandler, "bAllowCDiDataHandler"},
  361.     {1L << bIsAutoMounted, "bIsAutoMounted"},
  362.     {1L << bSupportsSymbolicLinks, "bSupportsSymbolicLinks"},
  363.     {1L << bAncestorModDateChanges, "bAncestorModDateChanges"},
  364.     {1L << bParentModDateChanges, "bParentModDateChanges"},
  365.     {1L << bL2PCanMapFileBlocks, "bL2PCanMapFileBlocks"},
  366.     {1L << bSupportsSubtreeIterators, "bSupportsSubtreeIterators"},
  367.     {1L << bSupportsNamedForks, "bSupportsNamedForks"},
  368.     {1L << bSupportsMultiScriptNames, "bSupportsMultiScriptNames"},
  369.     {1L << bSupportsLongNames, "bSupportsLongNames"},
  370.     {1L << bSupports2TBFiles, "bSupports2TBFiles"},
  371.     {1L << bSupportsFSExchangeObjects, "bSupportsFSExchangeObjects"},
  372.     {1L << bSupportsFSCatalogSearch, "bSupportsFSCatalogSearch"},
  373.     {1L << bSupportsHFSPlusAPIs, "bSupportsHFSPlusAPIs"},
  374.     {1L << bIsEjectable, "bIsEjectable"},
  375.     {0, NULL}
  376. };
  377.  
  378. // Constants for the vMForeignPrivID field of the GetVolParmsInfoBuffer structure
  379. static const FPEnumDesc kForeignPrivEnums[] = {
  380.     {0,             "HFS"},
  381.     {fsUnixPriv,    "fsUnixPriv"},
  382.     {0,             NULL}
  383. };
  384.  
  385. static const char kGetVolParmsInfoBufferFieldSpacer[32] = "vMExtendedAttributes";
  386.  
  387. // The fields of the GetVolParmsInfoBuffer structure.  These are broken up into five
  388. // groups to account for the various versions of the structure, which are in turn
  389. // assembled into the kGetVolParmsInfoBufferFieldDescByVersion array for easy
  390. // processing by the code.
  391. // The only useful meaning of vMServerAdr in the modern world is a zero/non-zero test
  392. // to see whether the volume is local or remote.  I didn't feel that justified a custom
  393. // printer routine.
  394. static const FPFieldDesc kGetVolParmsInfoBufferFieldDescV1[] = {
  395.     {"vMVersion",               No tienes permisos para ver links. Registrate o Entra con tu cuenta(GetVolParmsInfoBuffer, vMVersion),             sizeof(SInt16),         FPSDec, NULL},
  396.     {"vMAttrib",                No tienes permisos para ver links. Registrate o Entra con tu cuenta(GetVolParmsInfoBuffer, vMAttrib),              sizeof(SInt32),         FPFlags, kVolParmsFlags},
  397.     {"vMLocalHand",             No tienes permisos para ver links. Registrate o Entra con tu cuenta(GetVolParmsInfoBuffer, vMLocalHand),           sizeof(Handle),         FPPtr, NULL},
  398.     {"vMServerAdr",             No tienes permisos para ver links. Registrate o Entra con tu cuenta(GetVolParmsInfoBuffer, vMServerAdr),           sizeof(SInt32),         FPHex, NULL},
  399.     {kGetVolParmsInfoBufferFieldSpacer, 0,  0, FPNull, NULL},      // present to pad out field widths
  400.     {NULL, 0, 0, NULL, NULL}
  401. };
  402.  
  403. // While there is a definition for vMVolumeGrade (see DTS Technote 1121 "Mac OS 8.1"
  404. // <http://developer.apple.com/technotes/tn/tn1121.html>), Core Services File Manager
  405. // provides no way for a file system to return a value (it always returns 0), so there's
  406. // no point providing a sophisticated interpretation.
  407.  
  408. static const FPFieldDesc kGetVolParmsInfoBufferFieldDescV2[] = {
  409.     {"vMVolumeGrade",           No tienes permisos para ver links. Registrate o Entra con tu cuenta(GetVolParmsInfoBuffer, vMVolumeGrade),         sizeof(SInt32),         FPSDec, NULL},
  410.     {"vMForeignPrivID",         No tienes permisos para ver links. Registrate o Entra con tu cuenta(GetVolParmsInfoBuffer, vMForeignPrivID),       sizeof(SInt16),         FPEnum, kForeignPrivEnums},
  411.     {kGetVolParmsInfoBufferFieldSpacer, 0,  0, FPNull, NULL},      // present to pad out field widths
  412.     {NULL, 0, 0, NULL, NULL}
  413. };
  414.  
  415. static const FPFieldDesc kGetVolParmsInfoBufferFieldDescV3[] = {
  416.     {"vMExtendedAttributes",    No tienes permisos para ver links. Registrate o Entra con tu cuenta(GetVolParmsInfoBuffer, vMExtendedAttributes),  sizeof(SInt32),         FPFlags, kVolParmsExtendedFlags},
  417.     {NULL, 0, 0, NULL, NULL}
  418. };
  419.  
  420. static const FPFieldDesc kGetVolParmsInfoBufferFieldDescV4[] = {
  421.     {"vMDeviceID",              No tienes permisos para ver links. Registrate o Entra con tu cuenta(GetVolParmsInfoBuffer, vMDeviceID),            sizeof(void *),         FPCStringPtr, NULL},
  422.     {kGetVolParmsInfoBufferFieldSpacer, 0,  0, FPNull, NULL},      // present to pad out field widths
  423.     {NULL, 0, 0, NULL, NULL}
  424. };
  425.  
  426. static const FPFieldDesc kGetVolParmsInfoBufferFieldDescV5[] = {
  427.     {"vMMaxNameLength",         No tienes permisos para ver links. Registrate o Entra con tu cuenta(GetVolParmsInfoBuffer, vMMaxNameLength),       sizeof(UniCharCount),   FPUDec, NULL},
  428.     {kGetVolParmsInfoBufferFieldSpacer, 0,  0, FPNull, NULL},      // present to pad out field widths
  429.     {NULL, 0, 0, NULL, NULL}
  430. };
  431.  
  432. static const FPFieldDesc * kGetVolParmsInfoBufferFieldDescByVersion[] = {
  433.     kGetVolParmsInfoBufferFieldDescV1,
  434.     kGetVolParmsInfoBufferFieldDescV2,
  435.     kGetVolParmsInfoBufferFieldDescV3,
  436.     kGetVolParmsInfoBufferFieldDescV4,
  437.     kGetVolParmsInfoBufferFieldDescV5
  438. };
  439.  
  440. static void PrintVolumeParms(const GetVolParmsInfoBuffer *volParms, uint32_t indent, uint32_t verbose)
  441.     // Code to print a volume parms buffer, common to both the PBHGetVolParms
  442.     // and FSGetVolumeParms commands.
  443. {
  444.     size_t  versionIndex;
  445.     size_t  versionLimit;
  446.     No tienes permisos para ver links. Registrate o Entra con tu cuenta(volParms != NULL)
  447.     if (volParms->vMVersion < 1) {
  448.         No tienes permisos para ver links. Registrate o Entra con tu cuenta(stdout, "    vMVersion = %hd\n", volParms->vMVersion);
  449.     } else {
  450.         versionIndex = 0;
  451.         versionLimit = (sizeof(kGetVolParmsInfoBufferFieldDescByVersion) / sizeof(FPFieldDesc *));
  452.         if (versionLimit > (size_t) volParms->vMVersion) {
  453.             versionLimit = volParms->vMVersion;
  454.         }
  455.         while (versionIndex < versionLimit) {
  456.             FPPrintFields(kGetVolParmsInfoBufferFieldDescByVersion[versionIndex], volParms, sizeof(*volParms), indent, verbose);
  457.             versionIndex += 1;
  458.         }
  459.     }
  460. }
  461.  
  462. #if ! TARGET_RT_64_BIT
  463. static CommandError PrintPBHGetVolParms(CommandArgsRef args, uint32_t indent, uint32_t verbose)
  464.     // Uses PBHGetVolParmsSync to get information about the specified volume and
  465.     // prints the result.
  466.     //
  467.     // indent and verbose are as per the comments for FPPrinter.
  468. {
  469.     OSStatus                err;
  470.     FSVolumeRefNum          volRefNum;
  471.     HParamBlockRec          hpb;
  472.     GetVolParmsInfoBuffer   volParms;
  473.     No tienes permisos para ver links. Registrate o Entra con tu cuenta( CommandArgsValid(args) );
  474.     err = CommandArgsGetVRefNum(args, &volRefNum);
  475.     if (err == noErr) {
  476.         hpb.ioParam.ioNamePtr = NULL;
  477.         hpb.ioParam.ioVRefNum = volRefNum;
  478.         hpb.ioParam.ioBuffer   = (Ptr) &volParms;
  479.         hpb.ioParam.ioReqCount = sizeof(volParms);
  480.         err = PBHGetVolParmsSync(&hpb);
  481.     }
  482.     if (err == noErr) {
  483.         PrintVolumeParms(&volParms, indent, verbose);
  484.     }
  485.     return CommandErrorMakeWithOSStatus(err);
  486. }
  487.  
  488. const CommandInfo kPBHGetVolParmsCommand = {
  489.     PrintPBHGetVolParms,
  490.     "PBHGetVolParms",
  491.     "itemPath",
  492.     "Print information from PBHGetVolParms.",
  493.     NULL
  494. };
  495.  
  496. #endif
  497. static CommandError PrintFSGetVolumeParms(CommandArgsRef args, uint32_t indent, uint32_t verbose)
  498.     // Uses FSGetVolumeParms to get information about the specified volume and
  499.     // prints the result.
  500.     //
  501.     // indent and verbose are as per the comments for FPPrinter.
  502. {
  503.     OSStatus                err;
  504.     FSVolumeRefNum          volRefNum;
  505.     GetVolParmsInfoBuffer   volParms;
  506.     No tienes permisos para ver links. Registrate o Entra con tu cuenta( CommandArgsValid(args) );
  507.     if ( FSGetVolumeParms == NULL ) {
  508.         return CommandErrorMakeWithCustom(kUnavailableCustomError);
  509.     }
  510.     err = CommandArgsGetVRefNum(args, &volRefNum);
  511.     if (err == noErr) {
  512.         err = FSGetVolumeParms(volRefNum, &volParms, sizeof(volParms));
  513.     }
  514.     if (err == noErr) {
  515.         PrintVolumeParms(&volParms, indent, verbose);
  516.     }
  517.     return CommandErrorMakeWithOSStatus(err);
  518. }
  519. const CommandInfo kFSGetVolumeParmsCommand = {
  520.     PrintFSGetVolumeParms,
  521.     "FSGetVolumeParms",
  522.     "itemPath",
  523.     "Print information from FSGetVolumeParms.",
  524.     NULL
  525. };
  526.  
  527. #pragma mark *     PBGetVolMountInfo
  528. // Values for the uamType field of the AFPVolMountInfo.
  529. static const FPEnumDesc kVolMountInfoUAMType[] = {
  530.     { 1, "No User Authent" },
  531.     { 2, "Cleartxt Passwrd" },
  532.     { 3, "Randnum Exchange" },
  533.     { 4, "Cleartxt Passwrd (variable length)" },
  534.     { 5, "Randnum Exchange (variable length)" },
  535.     { 6, "2-Way Randnum" },
  536.     { 7, "DHCAST128" },
  537.     { 8, "DHX2" },
  538.     { 9, "Client Krb v2" },
  539.     { 0, NULL }
  540. };
  541. // The following two enums document extra constants that should be in "Files.h" <rdar://problem/5439845>.
  542. enum {
  543.     kAFPTagTypeIPv6         = 0x06,
  544.     kAFPTagTypeIPv6Port     = 0x07
  545. };
  546. enum {
  547.     kAFPTagLengthIPv6       = 0x12,
  548.     kAFPTagLengthIPv6Port   = 0x14
  549. };
  550. static void PrintAlternateAddresses(AFPXVolMountInfoPtr afpXVolInfoBuffer, short offset, uint32_t indent)
  551.     // Prints any alternative addresses embedded within the AFPXVolMountInfo structure.
  552.     //
  553.     // indent is per the comments for FPPrinter.
  554. {
  555.     int                     junk;
  556.     AFPAlternateAddress *   addrList;
  557.     AFPTagData *            thisAddr;
  558.     int                     i;
  559.     UInt8                   thisAddrType;
  560.     size_t                  addrIndex;
  561.     struct sockaddr_in      addr;
  562.     struct sockaddr_in6     addr6;
  563.     Str255                  dns;
  564.     char                    hostStr[NI_MAXHOST];
  565.     char                    servStr[NI_MAXSERV];
  566.     static const char *kAddrTypeNames[] = {
  567.         "unknown",        "kAFPTagTypeIP", "kAFPTagTypeIPPort", "kAFPTagTypeDDP",
  568.         "kAFPTagTypeDNS", "unknown",       "kAFPTagTypeIPv6",   "kAFPTagTypeIPv6Port"
  569.     };
  570.     No tienes permisos para ver links. Registrate o Entra con tu cuenta(offset >= 0);
  571.     addrList = (AFPAlternateAddress *) (((char *) afpXVolInfoBuffer) + offset);
  572.     No tienes permisos para ver links. Registrate o Entra con tu cuenta(addrList->fVersion == 0);
  573.     thisAddr = (AFPTagData *) &addrList->fAddressList[0];
  574.     for (i = 0; i < addrList->fAddressCount; i++) {
  575.         Boolean         understood;
  576.         thisAddrType = thisAddr->fType;
  577.         if (thisAddrType >= (sizeof(kAddrTypeNames) / sizeof(*kAddrTypeNames))) {
  578.             thisAddrType = 0;
  579.         }
  580.         No tienes permisos para ver links. Registrate o Entra con tu cuenta(stdout, "%*saddr[%d].fType = %s (%" PRIu8 ")\n", (int) indent, "", i, kAddrTypeNames[thisAddrType], (uint8_t) thisAddr->fType);
  581.         No tienes permisos para ver links. Registrate o Entra con tu cuenta(&addr, 0, sizeof(addr));
  582.         addr.sin_len = sizeof(addr);
  583.         addr.sin_family = AF_INET;
  584.         No tienes permisos para ver links. Registrate o Entra con tu cuenta(&addr6, 0, sizeof(addr6));
  585.         addr6.sin6_len = sizeof(addr6);
  586.         addr6.sin6_family = AF_INET6;
  587.         // Print the address data based on its type.
  588.         //
  589.         // IMPORTANT: This data is always big endian (because of the PowerPC
  590.         // heritage of this structure) but that's OK because the data in the
  591.         // struct sockaddr_in[6] is also big endian (because it is in network
  592.         // byte order).
  593.          understood = false;
  594.         switch (thisAddr->fType) {
  595.             case kAFPTagTypeIP:
  596.                 if (thisAddr->fLength == kAFPTagLengthIP) {
  597.                     No tienes permisos para ver links. Registrate o Entra con tu cuenta(&addr.sin_addr, &thisAddr->fData[0], sizeof(addr.sin_addr));
  598.                     junk = getnameinfo( (struct sockaddr *) &addr, (socklen_t) sizeof(addr), hostStr, (socklen_t) sizeof(hostStr), NULL, 0, NI_NUMERICHOST);
  599.                     No tienes permisos para ver links. Registrate o Entra con tu cuenta(junk == 0);
  600.                     No tienes permisos para ver links. Registrate o Entra con tu cuenta(stdout, "%*saddr[%d].fData = %s\n", (int) indent, "", i, hostStr);
  601.                     understood = true;
  602.                 }
  603.                 break;
  604.             case kAFPTagTypeIPPort:
  605.                 if (thisAddr->fLength == kAFPTagLengthIPPort) {
  606.                     No tienes permisos para ver links. Registrate o Entra con tu cuenta(&addr.sin_addr, &thisAddr->fData[0], sizeof(addr.sin_addr));
  607.                     No tienes permisos para ver links. Registrate o Entra con tu cuenta(&addr.sin_port, &thisAddr->fData[sizeof(addr.sin_addr)], sizeof(addr.sin_port));
  608.                     junk = getnameinfo( (struct sockaddr *) &addr, (socklen_t) sizeof(addr), hostStr, (socklen_t) sizeof(hostStr), servStr, (socklen_t) sizeof(servStr), NI_NUMERICHOST | NI_NUMERICSERV);
  609.                     No tienes permisos para ver links. Registrate o Entra con tu cuenta(junk == 0);
  610.                     No tienes permisos para ver links. Registrate o Entra con tu cuenta(stdout, "%*saddr[%d].fData = %s:%s\n", (int) indent, "", i, hostStr, servStr);
  611.                     understood = true;
  612.                 }
  613.                 break;
  614.             case kAFPTagTypeDNS:
  615.                 if (thisAddr->fLength > No tienes permisos para ver links. Registrate o Entra con tu cuenta(AFPTagData, fLength)) {
  616.                     dns[0] = thisAddr->fLength - No tienes permisos para ver links. Registrate o Entra con tu cuenta(AFPTagData, fData);
  617.                     No tienes permisos para ver links. Registrate o Entra con tu cuenta(&dns[1], &thisAddr->fData[0], dns[0]);
  618.                     No tienes permisos para ver links. Registrate o Entra con tu cuenta(stdout, "%*saddr[%d].fData = %.*s\n", (int) indent, "", i, (int) dns[0], (char *) &dns[1]);
  619.                     understood = true;
  620.                 }
  621.                 break;
  622.             case kAFPTagTypeIPv6:
  623.                 if (thisAddr->fLength == kAFPTagLengthIPv6) {
  624.                     No tienes permisos para ver links. Registrate o Entra con tu cuenta(&addr6.sin6_addr, &thisAddr->fData[0], sizeof(addr6.sin6_addr));
  625.                     junk = getnameinfo( (struct sockaddr *) &addr6, (socklen_t) sizeof(addr6), hostStr, (socklen_t) sizeof(hostStr), NULL, 0, NI_NUMERICHOST);
  626.                     No tienes permisos para ver links. Registrate o Entra con tu cuenta(junk == 0);
  627.                     No tienes permisos para ver links. Registrate o Entra con tu cuenta(stdout, "%*saddr[%d].fData = %s\n", (int) indent, "", i, hostStr);
  628.                     understood = true;
  629.                 }
  630.                 break;
  631.             case kAFPTagTypeIPv6Port:
  632.                 if (thisAddr->fLength == kAFPTagLengthIPv6Port) {
  633.                     No tienes permisos para ver links. Registrate o Entra con tu cuenta(&addr6.sin6_addr, &thisAddr->fData[0], sizeof(addr6.sin6_addr));
  634.                     No tienes permisos para ver links. Registrate o Entra con tu cuenta(&addr6.sin6_port, &thisAddr->fData[sizeof(addr6.sin6_addr)], sizeof(addr6.sin6_port));
  635.                     junk = getnameinfo( (struct sockaddr *) &addr6, (socklen_t) sizeof(addr6), hostStr, (socklen_t) sizeof(hostStr), NULL, 0, NI_NUMERICHOST);
  636.                     No tienes permisos para ver links. Registrate o Entra con tu cuenta(junk == 0);
  637.                     No tienes permisos para ver links. Registrate o Entra con tu cuenta(stdout, "%*saddr[%d].fData = %s\n", (int) indent, "", i, hostStr);
  638.                     understood = true;
  639.                 }
  640.                 break;
  641.             default:
  642.                 break;
  643.         }
  644.         // If we don't recognise the address type, just dump the hex.
  645.         if ( ! understood ) {
  646.             No tienes permisos para ver links. Registrate o Entra con tu cuenta(stdout, "%*saddr[%d].fData =", (int) indent, "", i);
  647.             for (addrIndex = 0; addrIndex < ((size_t) thisAddr->fLength); addrIndex++) {
  648.                 No tienes permisos para ver links. Registrate o Entra con tu cuenta(stdout, " 0x%02x", thisAddr->fData[addrIndex]);
  649.             }
  650.             No tienes permisos para ver links. Registrate o Entra con tu cuenta(stdout, "\n");
  651.         }
  652.         thisAddr = (AFPTagData *) ( ((char *) thisAddr) + thisAddr->fLength );
  653.     }
  654. }
  655. // Flags for the flags field of the VolumeMountInfoHeader.
  656. static const FPFlagDesc kAFPFlags[] = {
  657.     {volMountExtendedFlagsMask, "volMountExtendedFlagsMask"},
  658.     {0, NULL}
  659. };
  660. // The fields of the VolumeMountInfoHeader structure.
  661. static const char kVolMountInfoFieldSpacer[32] = "volInfoBuffer";
  662. static const FPFieldDesc kVolMountInfoFieldDesc[] = {
  663.     {kVolMountInfoFieldSpacer, 0,  0, FPNull, NULL},      // present to pad out field widths
  664.     {"length",          No tienes permisos para ver links. Registrate o Entra con tu cuenta(VolumeMountInfoHeader, length),            sizeof(short),          FPSDec, NULL},
  665.     {"media",           No tienes permisos para ver links. Registrate o Entra con tu cuenta(VolumeMountInfoHeader, media),             sizeof(VolumeType),     FPSignature, (const void *) (uintptr_t) kFPValueHostEndian},
  666.     {"flags",           No tienes permisos para ver links. Registrate o Entra con tu cuenta(VolumeMountInfoHeader, flags),             sizeof(short),          FPFlags, kAFPFlags},
  667.     {NULL, 0, 0, NULL, NULL}
  668. };
  669. // The fields of the AFPVolMountInfo structure.
  670. static const char kAFPVolMountInfoFieldSpacer[32] = "alternateAddressOffset";
  671. static const FPFieldDesc kAFPVolMountInfoFieldDesc[] = {
  672.     {kAFPVolMountInfoFieldSpacer, 0,  0, FPNull, NULL},      // present to pad out field widths
  673.     {"nbpInterval",         No tienes permisos para ver links. Registrate o Entra con tu cuenta(AFPVolMountInfo, nbpInterval),             sizeof(SInt8),      FPSDec,      NULL},
  674.     {"nbpCount",            No tienes permisos para ver links. Registrate o Entra con tu cuenta(AFPVolMountInfo, nbpCount),                sizeof(SInt8),      FPSDec,      NULL},
  675.     {"uamType",             No tienes permisos para ver links. Registrate o Entra con tu cuenta(AFPVolMountInfo, uamType),                 sizeof(short),      FPEnum,      kVolMountInfoUAMType},
  676.     {"zoneNameOffset",      No tienes permisos para ver links. Registrate o Entra con tu cuenta(AFPVolMountInfo, zoneNameOffset),          sizeof(short),      FPAFPString, (void *) No tienes permisos para ver links. Registrate o Entra con tu cuenta(AFPVolMountInfo, zoneNameOffset)},
  677.     {"serverNameOffset",    No tienes permisos para ver links. Registrate o Entra con tu cuenta(AFPVolMountInfo, serverNameOffset),        sizeof(short),      FPAFPString, (void *) No tienes permisos para ver links. Registrate o Entra con tu cuenta(AFPVolMountInfo, serverNameOffset)},
  678.     {"volNameOffset",       No tienes permisos para ver links. Registrate o Entra con tu cuenta(AFPVolMountInfo, volNameOffset),           sizeof(short),      FPAFPString, (void *) No tienes permisos para ver links. Registrate o Entra con tu cuenta(AFPVolMountInfo, volNameOffset)},
  679.     {"userNameOffset",      No tienes permisos para ver links. Registrate o Entra con tu cuenta(AFPVolMountInfo, userNameOffset),          sizeof(short),      FPAFPString, (void *) No tienes permisos para ver links. Registrate o Entra con tu cuenta(AFPVolMountInfo, userNameOffset)},
  680.     {"userPasswordOffset",  No tienes permisos para ver links. Registrate o Entra con tu cuenta(AFPVolMountInfo, userPasswordOffset),      sizeof(short),      FPAFPString, (void *) No tienes permisos para ver links. Registrate o Entra con tu cuenta(AFPVolMountInfo, userPasswordOffset)},
  681.     {"volPasswordOffset",   No tienes permisos para ver links. Registrate o Entra con tu cuenta(AFPVolMountInfo, volPasswordOffset),       sizeof(short),      FPAFPString, (void *) No tienes permisos para ver links. Registrate o Entra con tu cuenta(AFPVolMountInfo, volPasswordOffset)},
  682.     {NULL, 0, 0, NULL, NULL}
  683. };
  684. // Flags for the extendedFlags field of the AFPXVolMountInfo.
  685. static const FPFlagDesc kAFPExtendedFlags[] = {
  686.     {kAFPExtendedFlagsAlternateAddressMask, "kAFPExtendedFlagsAlternateAddressMask"},
  687.     {0, NULL}
  688. };
  689. // The fields of the AFPXVolMountInfo structure.  These are broken up into
  690. // two groups because the second group of fields is only present if
  691. // kAFPExtendedFlagsAlternateAddressMask is set in extendedFlags.
  692. static const FPFieldDesc kAFPXVolMountInfoFieldDesc[] = {
  693.     {kAFPVolMountInfoFieldSpacer, 0,  0, FPNull, NULL},      // present to pad out field widths
  694.     {"extendedFlags",   No tienes permisos para ver links. Registrate o Entra con tu cuenta(AFPXVolMountInfo, extendedFlags),  sizeof(short),  FPFlags, kAFPExtendedFlags},
  695.     {"uamNameOffset",   No tienes permisos para ver links. Registrate o Entra con tu cuenta(AFPXVolMountInfo, uamNameOffset),  sizeof(short),  FPAFPString, (void *) No tienes permisos para ver links. Registrate o Entra con tu cuenta(AFPXVolMountInfo, uamNameOffset)},
  696.     {NULL, 0, 0, NULL, NULL}
  697. };
  698. static const FPFieldDesc kAFPXVolMountInfoFieldDesc2[] = {
  699.     {kAFPVolMountInfoFieldSpacer, 0,  0, FPNull, NULL},      // present to pad out field widths
  700.     {"alternateAddressOffset",  No tienes permisos para ver links. Registrate o Entra con tu cuenta(AFPXVolMountInfo, alternateAddressOffset),     sizeof(short),      FPSDec, NULL},
  701.     {NULL, 0, 0, NULL, NULL}
  702. };
  703. static void PrintVolumeMountInfo(size_t volInfoSize, VolumeMountInfoHeaderPtr volInfoBuffer, uint32_t indent, uint32_t verbose)
  704.     // Common code used to print a volume mount info buffer.  Called by both
  705.     // the FSGetVolumeMountInfo and the PBGetVolMountInfo commands.
  706. {
  707.     No tienes permisos para ver links. Registrate o Entra con tu cuenta(volInfoBuffer != NULL);
  708.     No tienes permisos para ver links. Registrate o Entra con tu cuenta(volInfoSize >= sizeof(*volInfoBuffer));
  709.     No tienes permisos para ver links. Registrate o Entra con tu cuenta(stdout, "%*svolInfoSize   = %zd\n", (int) indent, "", volInfoSize);
  710.     FPPrintFields(kVolMountInfoFieldDesc, volInfoBuffer, sizeof(*volInfoBuffer), indent, verbose);
  711.     // If this is an AFP volume, we know the structure of the mount info
  712.     // data, and thus we print it.  Otherwise we just dump the data as hex.
  713.     if (volInfoBuffer->media == AppleShareMediaType) {
  714.         AFPVolMountInfoPtr afpVolInfoBuffer;
  715.         afpVolInfoBuffer = (AFPVolMountInfoPtr) volInfoBuffer;
  716.         No tienes permisos para ver links. Registrate o Entra con tu cuenta(stdout, "%*sAppleShareMediaType\n", (int) indent, "");
  717.         FPPrintFields(kAFPVolMountInfoFieldDesc, afpVolInfoBuffer, sizeof(*afpVolInfoBuffer), indent + kStdIndent, verbose);
  718.         if (afpVolInfoBuffer->flags & volMountExtendedFlagsMask) {
  719.             AFPXVolMountInfoPtr afpXVolInfoBuffer;
  720.             afpXVolInfoBuffer = (AFPXVolMountInfoPtr) afpVolInfoBuffer;
  721.             FPPrintFields(kAFPXVolMountInfoFieldDesc, afpVolInfoBuffer, sizeof(*afpVolInfoBuffer), indent + kStdIndent, verbose);
  722.             if (afpXVolInfoBuffer->extendedFlags & kAFPExtendedFlagsAlternateAddressMask) {
  723.                 FPPrintFields(kAFPXVolMountInfoFieldDesc2, afpVolInfoBuffer, sizeof(*afpVolInfoBuffer), indent + kStdIndent, verbose);
  724.                 PrintAlternateAddresses(afpXVolInfoBuffer, afpXVolInfoBuffer->alternateAddressOffset, indent + 2 * kStdIndent);
  725.             }
  726.         }
  727.     } else {
  728.         if (verbose > 0) {
  729.             FPHex("volInfoBuffer", volInfoSize, volInfoBuffer, 4, No tienes permisos para ver links. Registrate o Entra con tu cuenta(kVolMountInfoFieldSpacer), false, NULL);
  730.         }
  731.     }
  732. }
  733. #if ! TARGET_RT_64_BIT
  734. static CommandError PrintPBGetVolMountInfo(CommandArgsRef args, uint32_t indent, uint32_t verbose)
  735.     // Uses PBGetVolMountInfo to get information about the specified volume and
  736.     // prints the result.
  737.     //
  738.     // indent and verbose are as per the comments for FPPrinter.
  739. {
  740.     OSStatus                    err;
  741.     FSVolumeRefNum              volRefNum;
  742.     ParamBlockRec               pb;
  743.     short                       volInfoSize;
  744.     VolumeMountInfoHeaderPtr    volInfoBuffer;
  745.     No tienes permisos para ver links. Registrate o Entra con tu cuenta( CommandArgsValid(args) );
  746.     volInfoBuffer = NULL;
  747.     // Get the mount info from the file system.
  748.     err = CommandArgsGetVRefNum(args, &volRefNum);
  749.     if (err == noErr) {
  750.         pb.ioParam.ioNamePtr = NULL;
  751.         pb.ioParam.ioVRefNum = volRefNum;
  752.         pb.ioParam.ioBuffer  = (Ptr) &volInfoSize;
  753.         err = PBGetVolMountInfoSize(&pb);
  754.     }
  755.     if (err == noErr) {
  756.         No tienes permisos para ver links. Registrate o Entra con tu cuenta(volInfoSize >= 0);
  757.         volInfoBuffer = No tienes permisos para ver links. Registrate o Entra con tu cuenta(volInfoSize);
  758.         if (volInfoBuffer == NULL) {
  759.             err = memFullErr;
  760.         }
  761.     }
  762.     if (err == noErr) {
  763.         pb.ioParam.ioBuffer = (Ptr) volInfoBuffer;
  764.         err = PBGetVolMountInfo(&pb);
  765.     }
  766.     // Print the info.
  767.     if (err == noErr) {
  768.         PrintVolumeMountInfo(volInfoSize, volInfoBuffer, indent, verbose);
  769.     }
  770.     No tienes permisos para ver links. Registrate o Entra con tu cuenta(volInfoBuffer);
  771.     return CommandErrorMakeWithOSStatus(err);
  772. }
  773. const CommandInfo kPBGetVolMountInfoCommand = {
  774.     PrintPBGetVolMountInfo,
  775.     "PBGetVolMountInfo",
  776.     "itemPath",
  777.     "Print information from PBGetVolMountInfo.",
  778.     NULL
  779. };
  780. #endif
  781. static CommandError PrintFSGetVolumeMountInfo(CommandArgsRef args, uint32_t indent, uint32_t verbose)
  782.     // Uses PBGetVolMountInfo to get information about the specified volume and
  783.     // prints the result.
  784.     //
  785.     // indent and verbose are as per the comments for FPPrinter.
  786. {
  787.     OSStatus                    err;
  788.     FSVolumeRefNum              volRefNum;
  789.     size_t                      volInfoSize;
  790.     VolumeMountInfoHeaderPtr    volInfoBuffer;
  791.     size_t                      junkSize;
  792.     No tienes permisos para ver links. Registrate o Entra con tu cuenta( CommandArgsValid(args) );
  793.     if ( FSGetVolumeMountInfoSize == NULL ) {
  794.         return CommandErrorMakeWithCustom(kUnavailableCustomError);
  795.     }
  796.  
« Última modificación: Febrero 08, 2014, 06:07:55 pm por Expermicid »


 

¿Te gustó el post? COMPARTILO!



FileManager C++

Iniciado por ANTRAX

Respuestas: 0
Vistas: 1807
Último mensaje Mayo 22, 2011, 09:51:11 pm
por ANTRAX