本文整理汇总了C++中ArchiveMember::getGroup方法的典型用法代码示例。如果您正苦于以下问题:C++ ArchiveMember::getGroup方法的具体用法?C++ ArchiveMember::getGroup怎么用?C++ ArchiveMember::getGroup使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ArchiveMember
的用法示例。
在下文中一共展示了ArchiveMember::getGroup方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: sprintf
// Fill the ArchiveMemberHeader with the information from a member. If
// TruncateNames is true, names are flattened to 15 chars or less. The sz field
// is provided here instead of coming from the mbr because the member might be
// stored compressed and the compressed size is not the ArchiveMember's size.
// Furthermore compressed files have negative size fields to identify them as
// compressed.
bool
Archive::fillHeader(const ArchiveMember &mbr, ArchiveMemberHeader& hdr,
int sz) const {
// Set the permissions mode, uid and gid
hdr.init();
char buffer[32];
sprintf(buffer, "%-8o", mbr.getMode());
memcpy(hdr.mode,buffer,8);
sprintf(buffer, "%-6u", mbr.getUser());
memcpy(hdr.uid,buffer,6);
sprintf(buffer, "%-6u", mbr.getGroup());
memcpy(hdr.gid,buffer,6);
// Set the last modification date
uint64_t secondsSinceEpoch = mbr.getModTime().toEpochTime();
sprintf(buffer,"%-12u", unsigned(secondsSinceEpoch));
memcpy(hdr.date,buffer,12);
std::string mbrPath = sys::path::filename(mbr.getPath());
// Set the name field in one of its various flavors.
bool writeLongName = false;
if (mbr.isStringTable()) {
memcpy(hdr.name,ARFILE_STRTAB_NAME,16);
} else if (mbr.isSVR4SymbolTable()) {
memcpy(hdr.name,ARFILE_SVR4_SYMTAB_NAME,16);
} else if (mbr.isBSD4SymbolTable()) {
memcpy(hdr.name,ARFILE_BSD4_SYMTAB_NAME,16);
} else if (mbrPath.length() < 16 && mbrPath.find('/') == std::string::npos) {
memcpy(hdr.name,mbrPath.c_str(),mbrPath.length());
hdr.name[mbrPath.length()] = '/';
} else {
std::string nm = "#1/";
nm += utostr(mbrPath.length());
memcpy(hdr.name,nm.data(),nm.length());
if (sz < 0)
sz -= mbrPath.length();
else
sz += mbrPath.length();
writeLongName = true;
}
// Set the size field
if (sz < 0) {
buffer[0] = '-';
sprintf(&buffer[1],"%-9u",(unsigned)-sz);
} else {
sprintf(buffer, "%-10u", (unsigned)sz);
}
memcpy(hdr.size,buffer,10);
return writeLongName;
}
示例2: sprintf
// Fill the ArchiveMemberHeader with the information from a member. If
// TruncateNames is true, names are flattened to 15 chars or less. The sz field
// is provided here instead of coming from the mbr because the member might be
// stored compressed and the compressed size is not the ArchiveMember's size.
// Furthermore compressed files have negative size fields to identify them as
// compressed.
bool
Archive::fillHeader(const ArchiveMember &mbr, ArchiveMemberHeader& hdr,
int sz, bool TruncateNames) const {
// Set the permissions mode, uid and gid
hdr.init();
char buffer[32];
sprintf(buffer, "%-8o", mbr.getMode());
memcpy(hdr.mode,buffer,8);
sprintf(buffer, "%-6u", mbr.getUser());
memcpy(hdr.uid,buffer,6);
sprintf(buffer, "%-6u", mbr.getGroup());
memcpy(hdr.gid,buffer,6);
// Set the last modification date
uint64_t secondsSinceEpoch = mbr.getModTime().toEpochTime();
sprintf(buffer,"%-12u", unsigned(secondsSinceEpoch));
memcpy(hdr.date,buffer,12);
// Get rid of trailing blanks in the name
std::string mbrPath = mbr.getPath().str();
size_t mbrLen = mbrPath.length();
while (mbrLen > 0 && mbrPath[mbrLen-1] == ' ') {
mbrPath.erase(mbrLen-1,1);
mbrLen--;
}
// Set the name field in one of its various flavors.
bool writeLongName = false;
if (mbr.isStringTable()) {
memcpy(hdr.name,ARFILE_STRTAB_NAME,16);
} else if (mbr.isSVR4SymbolTable()) {
memcpy(hdr.name,ARFILE_SVR4_SYMTAB_NAME,16);
} else if (mbr.isBSD4SymbolTable()) {
memcpy(hdr.name,ARFILE_BSD4_SYMTAB_NAME,16);
} else if (mbr.isLLVMSymbolTable()) {
memcpy(hdr.name,ARFILE_LLVM_SYMTAB_NAME,16);
} else if (TruncateNames) {
const char* nm = mbrPath.c_str();
unsigned len = mbrPath.length();
size_t slashpos = mbrPath.rfind('/');
if (slashpos != std::string::npos) {
nm += slashpos + 1;
len -= slashpos +1;
}
if (len > 15)
len = 15;
memcpy(hdr.name,nm,len);
hdr.name[len] = '/';
} else if (mbrPath.length() < 16 && mbrPath.find('/') == std::string::npos) {
memcpy(hdr.name,mbrPath.c_str(),mbrPath.length());
hdr.name[mbrPath.length()] = '/';
} else {
std::string nm = "#1/";
nm += utostr(mbrPath.length());
memcpy(hdr.name,nm.data(),nm.length());
if (sz < 0)
sz -= mbrPath.length();
else
sz += mbrPath.length();
writeLongName = true;
}
// Set the size field
if (sz < 0) {
buffer[0] = '-';
sprintf(&buffer[1],"%-9u",(unsigned)-sz);
} else {
sprintf(buffer, "%-10u", (unsigned)sz);
}
memcpy(hdr.size,buffer,10);
return writeLongName;
}