finddir: added -l option; removed DOS CRLF; fixed coding style.
sysinfo: dump port info too by default git-svn-id: file:///srv/svn/repos/haiku/trunk/current@8632 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
+210
-177
@@ -1,177 +1,210 @@
|
|||||||
/*
|
/*
|
||||||
* finddir.c -
|
* finddir.c -
|
||||||
* (c) 2002, Sebastian Nozzi <[email protected]>
|
* (c) 2002, Sebastian Nozzi <[email protected]>
|
||||||
*/
|
* 08/24/2004 - Francois Revol - added -l option.
|
||||||
|
*/
|
||||||
#include <FindDirectory.h>
|
|
||||||
#include <fs_info.h>
|
#include <FindDirectory.h>
|
||||||
|
#include <fs_info.h>
|
||||||
#include <stdio.h>
|
|
||||||
#include <string.h>
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
typedef struct
|
|
||||||
{
|
typedef struct
|
||||||
const char *key;
|
{
|
||||||
directory_which value;
|
const char *key;
|
||||||
} directoryType;
|
directory_which value;
|
||||||
|
} directoryType;
|
||||||
#define KEYVALUE_PAIR(key) {#key,key}
|
|
||||||
|
#define KEYVALUE_PAIR(key) {#key,key}
|
||||||
directoryType directoryTypes[] = {
|
|
||||||
KEYVALUE_PAIR(B_DESKTOP_DIRECTORY),
|
directoryType directoryTypes[] = {
|
||||||
KEYVALUE_PAIR(B_TRASH_DIRECTORY),
|
KEYVALUE_PAIR(B_DESKTOP_DIRECTORY),
|
||||||
KEYVALUE_PAIR(B_APPS_DIRECTORY),
|
KEYVALUE_PAIR(B_TRASH_DIRECTORY),
|
||||||
KEYVALUE_PAIR(B_PREFERENCES_DIRECTORY),
|
KEYVALUE_PAIR(B_APPS_DIRECTORY),
|
||||||
KEYVALUE_PAIR(B_BEOS_DIRECTORY),
|
KEYVALUE_PAIR(B_PREFERENCES_DIRECTORY),
|
||||||
KEYVALUE_PAIR(B_BEOS_SYSTEM_DIRECTORY),
|
KEYVALUE_PAIR(B_BEOS_DIRECTORY),
|
||||||
KEYVALUE_PAIR(B_BEOS_ADDONS_DIRECTORY),
|
KEYVALUE_PAIR(B_BEOS_SYSTEM_DIRECTORY),
|
||||||
KEYVALUE_PAIR(B_BEOS_BOOT_DIRECTORY),
|
KEYVALUE_PAIR(B_BEOS_ADDONS_DIRECTORY),
|
||||||
KEYVALUE_PAIR(B_BEOS_FONTS_DIRECTORY),
|
KEYVALUE_PAIR(B_BEOS_BOOT_DIRECTORY),
|
||||||
KEYVALUE_PAIR(B_BEOS_LIB_DIRECTORY),
|
KEYVALUE_PAIR(B_BEOS_FONTS_DIRECTORY),
|
||||||
KEYVALUE_PAIR(B_BEOS_SERVERS_DIRECTORY),
|
KEYVALUE_PAIR(B_BEOS_LIB_DIRECTORY),
|
||||||
KEYVALUE_PAIR(B_BEOS_APPS_DIRECTORY),
|
KEYVALUE_PAIR(B_BEOS_SERVERS_DIRECTORY),
|
||||||
KEYVALUE_PAIR(B_BEOS_BIN_DIRECTORY),
|
KEYVALUE_PAIR(B_BEOS_APPS_DIRECTORY),
|
||||||
KEYVALUE_PAIR(B_BEOS_ETC_DIRECTORY),
|
KEYVALUE_PAIR(B_BEOS_BIN_DIRECTORY),
|
||||||
KEYVALUE_PAIR(B_BEOS_DOCUMENTATION_DIRECTORY),
|
KEYVALUE_PAIR(B_BEOS_ETC_DIRECTORY),
|
||||||
KEYVALUE_PAIR(B_BEOS_PREFERENCES_DIRECTORY),
|
KEYVALUE_PAIR(B_BEOS_DOCUMENTATION_DIRECTORY),
|
||||||
KEYVALUE_PAIR(B_COMMON_DIRECTORY),
|
KEYVALUE_PAIR(B_BEOS_PREFERENCES_DIRECTORY),
|
||||||
KEYVALUE_PAIR(B_COMMON_SYSTEM_DIRECTORY),
|
KEYVALUE_PAIR(B_COMMON_DIRECTORY),
|
||||||
KEYVALUE_PAIR(B_COMMON_ADDONS_DIRECTORY),
|
KEYVALUE_PAIR(B_COMMON_SYSTEM_DIRECTORY),
|
||||||
KEYVALUE_PAIR(B_COMMON_BOOT_DIRECTORY),
|
KEYVALUE_PAIR(B_COMMON_ADDONS_DIRECTORY),
|
||||||
KEYVALUE_PAIR(B_COMMON_FONTS_DIRECTORY),
|
KEYVALUE_PAIR(B_COMMON_BOOT_DIRECTORY),
|
||||||
KEYVALUE_PAIR(B_COMMON_LIB_DIRECTORY),
|
KEYVALUE_PAIR(B_COMMON_FONTS_DIRECTORY),
|
||||||
KEYVALUE_PAIR(B_COMMON_SERVERS_DIRECTORY),
|
KEYVALUE_PAIR(B_COMMON_LIB_DIRECTORY),
|
||||||
KEYVALUE_PAIR(B_COMMON_BIN_DIRECTORY),
|
KEYVALUE_PAIR(B_COMMON_SERVERS_DIRECTORY),
|
||||||
KEYVALUE_PAIR(B_COMMON_ETC_DIRECTORY),
|
KEYVALUE_PAIR(B_COMMON_BIN_DIRECTORY),
|
||||||
KEYVALUE_PAIR(B_COMMON_DOCUMENTATION_DIRECTORY),
|
KEYVALUE_PAIR(B_COMMON_ETC_DIRECTORY),
|
||||||
KEYVALUE_PAIR(B_COMMON_SETTINGS_DIRECTORY),
|
KEYVALUE_PAIR(B_COMMON_DOCUMENTATION_DIRECTORY),
|
||||||
KEYVALUE_PAIR(B_COMMON_DEVELOP_DIRECTORY),
|
KEYVALUE_PAIR(B_COMMON_SETTINGS_DIRECTORY),
|
||||||
KEYVALUE_PAIR(B_COMMON_LOG_DIRECTORY),
|
KEYVALUE_PAIR(B_COMMON_DEVELOP_DIRECTORY),
|
||||||
KEYVALUE_PAIR(B_COMMON_SPOOL_DIRECTORY),
|
KEYVALUE_PAIR(B_COMMON_LOG_DIRECTORY),
|
||||||
KEYVALUE_PAIR(B_COMMON_TEMP_DIRECTORY),
|
KEYVALUE_PAIR(B_COMMON_SPOOL_DIRECTORY),
|
||||||
KEYVALUE_PAIR(B_COMMON_VAR_DIRECTORY),
|
KEYVALUE_PAIR(B_COMMON_TEMP_DIRECTORY),
|
||||||
KEYVALUE_PAIR(B_USER_DIRECTORY),
|
KEYVALUE_PAIR(B_COMMON_VAR_DIRECTORY),
|
||||||
KEYVALUE_PAIR(B_USER_CONFIG_DIRECTORY),
|
KEYVALUE_PAIR(B_USER_DIRECTORY),
|
||||||
KEYVALUE_PAIR(B_USER_ADDONS_DIRECTORY),
|
KEYVALUE_PAIR(B_USER_CONFIG_DIRECTORY),
|
||||||
KEYVALUE_PAIR(B_USER_BOOT_DIRECTORY),
|
KEYVALUE_PAIR(B_USER_ADDONS_DIRECTORY),
|
||||||
KEYVALUE_PAIR(B_USER_FONTS_DIRECTORY),
|
KEYVALUE_PAIR(B_USER_BOOT_DIRECTORY),
|
||||||
KEYVALUE_PAIR(B_USER_LIB_DIRECTORY),
|
KEYVALUE_PAIR(B_USER_FONTS_DIRECTORY),
|
||||||
KEYVALUE_PAIR(B_USER_SETTINGS_DIRECTORY),
|
KEYVALUE_PAIR(B_USER_LIB_DIRECTORY),
|
||||||
KEYVALUE_PAIR(B_USER_DESKBAR_DIRECTORY),
|
KEYVALUE_PAIR(B_USER_SETTINGS_DIRECTORY),
|
||||||
{NULL,B_USER_DESKBAR_DIRECTORY}
|
KEYVALUE_PAIR(B_USER_DESKBAR_DIRECTORY),
|
||||||
};
|
/* some more */
|
||||||
|
KEYVALUE_PAIR(B_BEOS_MEDIA_NODES_DIRECTORY),
|
||||||
bool retrieveDirValue( directoryType *list, const char *key, directory_which *value_out )
|
KEYVALUE_PAIR(B_BEOS_SOUNDS_DIRECTORY),
|
||||||
{
|
KEYVALUE_PAIR(B_BEOS_TRANSLATORS_DIRECTORY),
|
||||||
unsigned i = 0;
|
KEYVALUE_PAIR(B_COMMON_MEDIA_NODES_DIRECTORY),
|
||||||
|
KEYVALUE_PAIR(B_COMMON_SOUNDS_DIRECTORY),
|
||||||
while( list[i].key != NULL )
|
KEYVALUE_PAIR(B_COMMON_TRANSLATORS_DIRECTORY),
|
||||||
{
|
KEYVALUE_PAIR(B_USER_MEDIA_NODES_DIRECTORY),
|
||||||
if( strcmp( list[i].key, key ) == 0 )
|
KEYVALUE_PAIR(B_USER_PRINTERS_DIRECTORY),
|
||||||
{
|
KEYVALUE_PAIR(B_USER_SOUNDS_DIRECTORY),
|
||||||
*value_out = list[i].value;
|
KEYVALUE_PAIR(B_USER_TRANSLATORS_DIRECTORY),
|
||||||
return true;
|
KEYVALUE_PAIR(B_UTILITIES_DIRECTORY),
|
||||||
}
|
#ifdef B_BEOS_VERSION_DANO
|
||||||
|
/* Dano specific */
|
||||||
i++;
|
KEYVALUE_PAIR(B_ROOT_DIRECTORY),
|
||||||
}
|
#endif /* B_BEOS_VERSION_DANO */
|
||||||
|
{NULL,B_USER_DESKBAR_DIRECTORY}
|
||||||
return false;
|
};
|
||||||
}
|
|
||||||
|
void listDirectoryWhich(void)
|
||||||
void usageMsg(){
|
{
|
||||||
printf("usage: /bin/finddir [ -v volume ] directory_which\n" );
|
int i;
|
||||||
printf("\t-v <file> use the specified volume for directory\n" );
|
|
||||||
printf("\t\t constants that are volume-specific.\n");
|
for (i = 0; directoryTypes[i].key; i++) {
|
||||||
printf("\t\t <file> can be any file on that volume.\n");
|
printf("%s\n", directoryTypes[i].key);
|
||||||
printf("\t\t defaults to the boot volume.\n");
|
}
|
||||||
printf(" For a description of recognized directory_which constants,\n");
|
}
|
||||||
printf(" see the find_directory(...) documentation in the Be Book.\n");
|
|
||||||
}
|
bool retrieveDirValue(directoryType *list, const char *key, directory_which *value_out)
|
||||||
|
{
|
||||||
#define NO_ERRORS 0
|
unsigned i = 0;
|
||||||
#define ARGUMENT_MISSING 1
|
|
||||||
#define WRONG_DIR_TYPE 2
|
while (list[i].key != NULL)
|
||||||
|
{
|
||||||
int main(int argc, char *argv[])
|
if (strcmp(list[i].key, key) == 0)
|
||||||
{
|
{
|
||||||
int directoryArgNr;
|
*value_out = list[i].value;
|
||||||
int status;
|
return true;
|
||||||
dev_t volume;
|
}
|
||||||
directory_which dirType;
|
|
||||||
int returnCode;
|
i++;
|
||||||
|
}
|
||||||
status = NO_ERRORS;
|
|
||||||
directoryArgNr = 1;
|
return false;
|
||||||
returnCode = 0;
|
}
|
||||||
|
|
||||||
dirType = B_BEOS_DIRECTORY; /* so that it compiles */
|
void usageMsg()
|
||||||
|
{
|
||||||
/* By default use boot volume*/
|
printf("usage: /bin/finddir -l | [ -v volume ] directory_which\n");
|
||||||
volume = dev_for_path( "/boot" );
|
printf("\t-l\t list valid which constants to use\n");
|
||||||
|
printf("\t-v <file> use the specified volume for directory\n");
|
||||||
if( argc <= 1 ){
|
printf("\t\t constants that are volume-specific.\n");
|
||||||
status = ARGUMENT_MISSING;
|
printf("\t\t <file> can be any file on that volume.\n");
|
||||||
} else {
|
printf("\t\t defaults to the boot volume.\n");
|
||||||
if( strcmp(argv[1], "-v") == 0 ){
|
printf(" For a description of recognized directory_which constants,\n");
|
||||||
if( argc >= 3 ){
|
printf(" see the find_directory(...) documentation in the Be Book.\n");
|
||||||
dev_t temp_volume;
|
}
|
||||||
/* get volume from second arg */
|
|
||||||
temp_volume = dev_for_path( argv[2] );
|
#define NO_ERRORS 0
|
||||||
|
#define ARGUMENT_MISSING 1
|
||||||
/* Keep default value in case of error */
|
#define WRONG_DIR_TYPE 2
|
||||||
if( temp_volume >= 0 )
|
|
||||||
volume = temp_volume;
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
/* two arguments were used for volume */
|
int directoryArgNr;
|
||||||
directoryArgNr+=2;
|
int status;
|
||||||
} else {
|
dev_t volume;
|
||||||
/* set status to argument missing */
|
directory_which dirType;
|
||||||
status = ARGUMENT_MISSING;
|
int returnCode;
|
||||||
}
|
|
||||||
}
|
status = NO_ERRORS;
|
||||||
}
|
directoryArgNr = 1;
|
||||||
|
returnCode = 0;
|
||||||
if( status == NO_ERRORS && argc > directoryArgNr ){
|
|
||||||
/* get directory constant from next argument */
|
dirType = B_BEOS_DIRECTORY; /* so that it compiles */
|
||||||
|
|
||||||
if( retrieveDirValue( directoryTypes, argv[directoryArgNr], &dirType ) == false ){
|
/* By default use boot volume*/
|
||||||
status = WRONG_DIR_TYPE;
|
volume = dev_for_path("/boot");
|
||||||
}
|
|
||||||
|
if (argc <= 1) {
|
||||||
} else {
|
status = ARGUMENT_MISSING;
|
||||||
status = ARGUMENT_MISSING;
|
} else {
|
||||||
}
|
if (strcmp(argv[1], "-l") == 0 ) {
|
||||||
|
listDirectoryWhich();
|
||||||
/* Do the actual directoy finding */
|
return 0;
|
||||||
|
}
|
||||||
if( status == NO_ERRORS ){
|
if (strcmp(argv[1], "-v") == 0 ) {
|
||||||
/* Question: would B_PATH_NAME_LENGTH alone have been enough? */
|
if (argc >= 3) {
|
||||||
char buffer[B_PATH_NAME_LENGTH+B_FILE_NAME_LENGTH];
|
dev_t temp_volume;
|
||||||
status_t result;
|
/* get volume from second arg */
|
||||||
|
temp_volume = dev_for_path(argv[2]);
|
||||||
result = find_directory( dirType, volume, /*create it*/ false, buffer, sizeof(buffer) );
|
|
||||||
|
/* Keep default value in case of error */
|
||||||
if( result == B_OK ){
|
if (temp_volume >= 0)
|
||||||
printf( "%s\n", buffer );
|
volume = temp_volume;
|
||||||
}else{
|
|
||||||
/* else what? */
|
/* two arguments were used for volume */
|
||||||
/* this can not happen! */
|
directoryArgNr+=2;
|
||||||
printf("Serious internal error; contact support\n");
|
} else {
|
||||||
}
|
/* set status to argument missing */
|
||||||
}
|
status = ARGUMENT_MISSING;
|
||||||
|
}
|
||||||
/* Error messages and return code setting */
|
}
|
||||||
|
}
|
||||||
if( status == WRONG_DIR_TYPE ) {
|
|
||||||
printf("%s: unrecognized directory_which constant \'%s\'\n", argv[0], argv[directoryArgNr] );
|
if (status == NO_ERRORS && argc > directoryArgNr) {
|
||||||
returnCode = 252;
|
/* get directory constant from next argument */
|
||||||
}
|
|
||||||
|
if (retrieveDirValue(directoryTypes, argv[directoryArgNr], &dirType) == false) {
|
||||||
if( status == ARGUMENT_MISSING ){
|
status = WRONG_DIR_TYPE;
|
||||||
usageMsg();
|
}
|
||||||
returnCode = 255;
|
|
||||||
}
|
} else {
|
||||||
|
status = ARGUMENT_MISSING;
|
||||||
return returnCode;
|
}
|
||||||
}
|
|
||||||
|
/* Do the actual directoy finding */
|
||||||
|
|
||||||
|
if (status == NO_ERRORS) {
|
||||||
|
/* Question: would B_PATH_NAME_LENGTH alone have been enough? */
|
||||||
|
char buffer[B_PATH_NAME_LENGTH+B_FILE_NAME_LENGTH];
|
||||||
|
status_t result;
|
||||||
|
|
||||||
|
result = find_directory (dirType, volume, /*create it*/ false, buffer, sizeof(buffer));
|
||||||
|
|
||||||
|
if (result == B_OK) {
|
||||||
|
printf("%s\n", buffer);
|
||||||
|
} else {
|
||||||
|
/* else what? */
|
||||||
|
/* this can not happen! */
|
||||||
|
printf("Serious internal error; contact support\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Error messages and return code setting */
|
||||||
|
|
||||||
|
if (status == WRONG_DIR_TYPE) {
|
||||||
|
printf("%s: unrecognized directory_which constant \'%s\'\n", argv[0], argv[directoryArgNr]);
|
||||||
|
returnCode = 252;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (status == ARGUMENT_MISSING) {
|
||||||
|
usageMsg();
|
||||||
|
returnCode = 255;
|
||||||
|
}
|
||||||
|
|
||||||
|
return returnCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -412,6 +412,7 @@ static void dump_system_info(system_info *info)
|
|||||||
dump_cpu(info);
|
dump_cpu(info);
|
||||||
dump_mem(info);
|
dump_mem(info);
|
||||||
dump_sem(info);
|
dump_sem(info);
|
||||||
|
dump_ports(info);
|
||||||
dump_thread(info);
|
dump_thread(info);
|
||||||
dump_team(info);
|
dump_team(info);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user