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:
François Revol
2004-08-24 15:59:10 +00:00
parent 6bd2c5e573
commit 4c7651ac24
2 changed files with 211 additions and 177 deletions
+210 -177
View File
@@ -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;
}
+1
View File
@@ -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);
} }