util.c revision c6bd0c97e4dc42511015b9a20b3e35dcdc8fd411
1/* 2 * util.c --- utilities for the debugfs program 3 * 4 * Copyright (C) 1993, 1994 Theodore Ts'o. This file may be 5 * redistributed under the terms of the GNU Public License. 6 * 7 */ 8 9#include <stdio.h> 10#include <unistd.h> 11#include <stdlib.h> 12#include <ctype.h> 13#include <string.h> 14#include <time.h> 15 16#include "debugfs.h" 17 18FILE *open_pager(void) 19{ 20 FILE *outfile; 21 char *pager = getenv("PAGER"); 22 23 if (!pager) 24 pager = "more"; 25 26 outfile = popen(pager, "w"); 27 if (!outfile) 28 outfile = stdout; 29 30 return (outfile); 31} 32 33void close_pager(FILE *stream) 34{ 35 if (stream && stream != stdout) fclose(stream); 36} 37 38/* 39 * This routine is used whenever a command needs to turn a string into 40 * an inode. 41 */ 42ino_t string_to_inode(char *str) 43{ 44 ino_t ino; 45 int len = strlen(str); 46 int i; 47 int retval; 48 49 /* 50 * If the string is of the form <ino>, then treat it as an 51 * inode number. 52 */ 53 if ((len > 2) && (str[0] == '<') && (str[len-1] == '>')) { 54 for (i = 1; i < len-1; i++) 55 if (!isdigit(str[i])) 56 break; 57 if (i == len-1) 58 return(atoi(str+1)); 59 } 60 61 retval = ext2fs_namei(current_fs, root, cwd, str, &ino); 62 if (retval) { 63 com_err(str, retval, ""); 64 return 0; 65 } 66 return ino; 67} 68 69/* 70 * This routine returns 1 if the filesystem is not open, and prints an 71 * error message to that effect. 72 */ 73int check_fs_open(char *name) 74{ 75 if (!current_fs) { 76 com_err(name, 0, "Filesystem not open"); 77 return 1; 78 } 79 return 0; 80} 81 82/* 83 * This routine returns 1 if a filesystem is open, and prints an 84 * error message to that effect. 85 */ 86int check_fs_not_open(char *name) 87{ 88 if (current_fs) { 89 com_err(name, 0, 90 "Filesystem %s is still open. Close it first.\n", 91 current_fs->device_name); 92 return 1; 93 } 94 return 0; 95} 96 97/* 98 * This routine returns 1 if a filesystem is not opened read/write, 99 * and prints an error message to that effect. 100 */ 101int check_fs_read_write(char *name) 102{ 103 if (!(current_fs->flags & EXT2_FLAG_RW)) { 104 com_err(name, 0, "Filesystem opened read/only"); 105 return 1; 106 } 107 return 0; 108} 109 110/* 111 * This routine returns 1 if a filesystem is doesn't have its inode 112 * and block bitmaps loaded, and prints an error message to that 113 * effect. 114 */ 115int check_fs_bitmaps(char *name) 116{ 117 if (!current_fs->block_map || !current_fs->inode_map) { 118 com_err(name, 0, "Filesystem bitmaps not loaded"); 119 return 1; 120 } 121 return 0; 122} 123 124/* 125 * This function takes a __u32 time value and converts it to a string, 126 * using ctime 127 */ 128char *time_to_string(__u32 cl) 129{ 130 time_t t = (time_t) cl; 131 132 return ctime(&t); 133} 134 135 136 137 138