* Added some more types that are printed as string in catattr, and listattr.
* catattr no longer pretends B_MIME_STRING to be of type string. * Added message output for both listattr, and catattr. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34438 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
+1
-1
@@ -23,7 +23,6 @@ AddResources checkitout : checkitout.rdef ;
|
||||
StdBinCommands
|
||||
badblocks.c
|
||||
cal.c
|
||||
catattr.cpp
|
||||
chop.c
|
||||
clear.c
|
||||
clockconfig.c
|
||||
@@ -77,6 +76,7 @@ StdBinCommands
|
||||
# standard commands that need libbe.so
|
||||
StdBinCommands
|
||||
beep.cpp
|
||||
catattr.cpp
|
||||
checkfs.cpp
|
||||
clipboard.cpp
|
||||
df.cpp
|
||||
|
||||
+50
-20
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright 2005, Stephan Aßmus, [email protected].
|
||||
* Copyright 2004, Axel Dörfler, [email protected].
|
||||
* Copyright 2004-2009, Axel Dörfler, [email protected].
|
||||
* Copyright 2002, Sebastian Nozzi.
|
||||
*
|
||||
* Distributed under the terms of the MIT license.
|
||||
@@ -20,8 +20,7 @@
|
||||
#include <unistd.h>
|
||||
|
||||
|
||||
/** Used to present the characters in the raw data view */
|
||||
|
||||
/*! Used to present the characters in the raw data view */
|
||||
static void
|
||||
putCharOrDot(uchar c)
|
||||
{
|
||||
@@ -29,12 +28,11 @@ putCharOrDot(uchar c)
|
||||
}
|
||||
|
||||
|
||||
/** Dumps the contents of the attribute in the form of
|
||||
* raw data. This view is used for the type B_RAW_DATA_TYPE,
|
||||
* for custom types and for any type that is not directly
|
||||
* supported by the utility "addattr"
|
||||
*/
|
||||
|
||||
/*! Dumps the contents of the attribute in the form of
|
||||
raw data. This view is used for the type B_RAW_DATA_TYPE,
|
||||
for custom types and for any type that is not directly
|
||||
supported by the utility "addattr"
|
||||
*/
|
||||
static void
|
||||
dumpRawData(const char *buffer, size_t size)
|
||||
{
|
||||
@@ -82,8 +80,11 @@ catAttr(const char *attribute, const char *fileName, bool keepRaw = false)
|
||||
|
||||
// limit size of the attribute, only the first 64k will make it on screen
|
||||
off_t size = info.size;
|
||||
if (size > 64 * 1024)
|
||||
bool cut = false;
|
||||
if (size > 64 * 1024) {
|
||||
size = 64 * 1024;
|
||||
cut = true;
|
||||
}
|
||||
|
||||
char* buffer = (char*)malloc(size);
|
||||
if (!buffer) {
|
||||
@@ -98,7 +99,8 @@ catAttr(const char *attribute, const char *fileName, bool keepRaw = false)
|
||||
}
|
||||
|
||||
if (bytesRead != size) {
|
||||
fprintf(stderr, "Could only read %ld bytes from attribute!\n", bytesRead);
|
||||
fprintf(stderr, "Could only read %ld bytes from attribute!\n",
|
||||
bytesRead);
|
||||
free(buffer);
|
||||
return B_ERROR;
|
||||
}
|
||||
@@ -112,21 +114,28 @@ catAttr(const char *attribute, const char *fileName, bool keepRaw = false)
|
||||
// check for write error
|
||||
if (written < bytesRead) {
|
||||
if (written >= 0) {
|
||||
fprintf(stderr, "Could only write %ld bytes to stream!\n", written);
|
||||
fprintf(stderr, "Could only write %ld bytes to stream!\n",
|
||||
written);
|
||||
written = B_ERROR;
|
||||
} else
|
||||
fprintf(stderr, "Failed to write to stream: %s\n", strerror(written));
|
||||
} else {
|
||||
fprintf(stderr, "Failed to write to stream: %s\n",
|
||||
strerror(written));
|
||||
}
|
||||
break;
|
||||
}
|
||||
// read next chunk of data at pos
|
||||
pos += bytesRead;
|
||||
bytesRead = fs_read_attr(fd, attribute, info.type, pos, buffer, size);
|
||||
bytesRead = fs_read_attr(fd, attribute, info.type, pos, buffer,
|
||||
size);
|
||||
// check for read error
|
||||
if (bytesRead < size && pos + bytesRead < info.size) {
|
||||
if (bytesRead >= 0)
|
||||
fprintf(stderr, "Could only read %ld bytes from attribute!\n", bytesRead);
|
||||
else
|
||||
fprintf(stderr, "Failed to read from attribute: %s\n", strerror(bytesRead));
|
||||
if (bytesRead >= 0) {
|
||||
fprintf(stderr, "Could only read %ld bytes from "
|
||||
"attribute!\n", bytesRead);
|
||||
} else {
|
||||
fprintf(stderr, "Failed to read from attribute: %s\n",
|
||||
strerror(bytesRead));
|
||||
}
|
||||
written = B_ERROR;
|
||||
break;
|
||||
}
|
||||
@@ -172,10 +181,31 @@ catAttr(const char *attribute, const char *fileName, bool keepRaw = false)
|
||||
printf("%s : bool : %d\n", fileName, *((unsigned char *)buffer));
|
||||
break;
|
||||
case B_STRING_TYPE:
|
||||
case B_MIME_STRING_TYPE:
|
||||
printf("%s : string : %s\n", fileName, buffer);
|
||||
break;
|
||||
|
||||
case B_MIME_STRING_TYPE:
|
||||
case 'MSIG':
|
||||
case 'MSDC':
|
||||
case 'MPTH':
|
||||
printf("%s : '%c%c%c%c' : %s\n", fileName,
|
||||
(int)((info.type >> 24) & 0xff),
|
||||
(int)((info.type >> 16) & 0xff),
|
||||
(int)((info.type >> 8) & 0xff), (int)(info.type & 0xff),
|
||||
buffer);
|
||||
break;
|
||||
|
||||
case B_MESSAGE_TYPE:
|
||||
{
|
||||
BMessage message;
|
||||
if (!cut && message.Unflatten(buffer) == B_OK) {
|
||||
printf("%s : message :\n", fileName);
|
||||
message.PrintToStream();
|
||||
break;
|
||||
}
|
||||
// supposed to fall through
|
||||
}
|
||||
|
||||
default:
|
||||
// The rest of the attributes types are displayed as raw data
|
||||
printf("%s : raw_data : \n", fileName);
|
||||
|
||||
+19
-1
@@ -62,9 +62,12 @@ show_attr_contents(BNode& node, const char* attribute, const attr_info& info)
|
||||
// limit size of the attribute, only the first kLimit byte will make it on
|
||||
// screen
|
||||
int kLimit = 256;
|
||||
bool cut = false;
|
||||
off_t size = info.size;
|
||||
if (size > kLimit)
|
||||
if (size > kLimit) {
|
||||
size = kLimit;
|
||||
cut = true;
|
||||
}
|
||||
|
||||
char buffer[kLimit];
|
||||
ssize_t bytesRead = node.ReadAttr(attribute, info.type, 0, buffer, size);
|
||||
@@ -110,9 +113,24 @@ show_attr_contents(BNode& node, const char* attribute, const attr_info& info)
|
||||
break;
|
||||
case B_STRING_TYPE:
|
||||
case B_MIME_STRING_TYPE:
|
||||
case 'MSIG':
|
||||
case 'MSDC':
|
||||
case 'MPTH':
|
||||
printf("%s\n", buffer);
|
||||
break;
|
||||
|
||||
case B_MESSAGE_TYPE:
|
||||
{
|
||||
BMessage message;
|
||||
if (!cut && message.Unflatten(buffer) == B_OK) {
|
||||
putchar('\n');
|
||||
message.PrintToStream();
|
||||
putchar('\n');
|
||||
break;
|
||||
}
|
||||
// supposed to fall through
|
||||
}
|
||||
|
||||
default:
|
||||
// The rest of the attributes types are displayed as raw data
|
||||
putchar('\n');
|
||||
|
||||
Reference in New Issue
Block a user