/*
- * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
+ * Copyright (c) 2000-2002,2005 Silicon Graphics, Inc.
+ * All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like. Any license provided herein, whether implied or
- * otherwise, applies only to this software file. Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA 94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
+ *
+ * This program is distributed in the hope that it would be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include <libxfs.h>
+#include <xfs/libxfs.h>
#include "command.h"
-#include "data.h"
#include "type.h"
#include "faddr.h"
#include "fprint.h"
#include "inode.h"
#include "io.h"
#include "output.h"
-#include "mount.h"
+#include "init.h"
#include "malloc.h"
static int pop_f(int argc, char **argv);
static const cmdinfo_t pop_cmd =
{ "pop", NULL, pop_f, 0, 0, 0, NULL,
- "pop location from the stack", pop_help };
+ N_("pop location from the stack"), pop_help };
static const cmdinfo_t push_cmd =
- { "push", NULL, push_f, 0, 2, 0, "[command]",
- "push location to the stack", push_help };
+ { "push", NULL, push_f, 0, 2, 0, N_("[command]"),
+ N_("push location to the stack"), push_help };
static const cmdinfo_t stack_cmd =
{ "stack", NULL, stack_f, 0, 0, 0, NULL,
- "view the location stack", stack_help };
-static const cmdinfo_t forward_cmd =
+ N_("view the location stack"), stack_help };
+static const cmdinfo_t forward_cmd =
{ "forward", "f", forward_f, 0, 0, 0, NULL,
- "move forward to next entry in the position ring", forward_help };
-static const cmdinfo_t back_cmd =
+ N_("move forward to next entry in the position ring"), forward_help };
+static const cmdinfo_t back_cmd =
{ "back", "b", back_f, 0, 0, 0, NULL,
- "move to the previous location in the position ring", back_help };
-static const cmdinfo_t ring_cmd =
+ N_("move to the previous location in the position ring"), back_help };
+static const cmdinfo_t ring_cmd =
{ "ring", NULL, ring_f, 0, 1, 0, NULL,
- "show position ring or move to a specific entry", ring_help };
+ N_("show position ring or move to a specific entry"), ring_help };
iocur_t *iocur_base;
iocur_t *iocur_top;
int len)
{
if (iocur_top == NULL || off + len > BBTOB(iocur_top->blen))
- dbprintf("can't set block offset to %d\n", off);
+ dbprintf(_("can't set block offset to %d\n"), off);
else {
iocur_top->boff = off;
iocur_top->off = ((xfs_off_t)iocur_top->bb << BBSHIFT) + off;
pop_cur(void)
{
if (iocur_sp < 0) {
- dbprintf("can't pop anything from I/O stack\n");
+ dbprintf(_("can't pop anything from I/O stack\n"));
return;
}
if (iocur_top->buf)
static void
pop_help(void)
{
- dbprintf(
+ dbprintf(_(
"\n"
" Changes the address and data type to the first entry on the stack.\n"
"\n"
- );
+ ));
}
void
int i;
dbprintf("%s\n", tag);
- dbprintf("\tbyte offset %lld, length %d\n", ioc->off, ioc->len);
- dbprintf("\tbuffer block %lld (fsbno %lld), %d bb%s\n", ioc->bb,
+ dbprintf(_("\tbyte offset %lld, length %d\n"), ioc->off, ioc->len);
+ dbprintf(_("\tbuffer block %lld (fsbno %lld), %d bb%s\n"), ioc->bb,
(xfs_dfsbno_t)XFS_DADDR_TO_FSB(mp, ioc->bb), ioc->blen,
ioc->blen == 1 ? "" : "s");
if (ioc->use_bbmap) {
- dbprintf("\tblock map");
+ dbprintf(_("\tblock map"));
for (i = 0; i < ioc->blen; i++)
dbprintf(" %d:%lld", i, ioc->bbmap.b[i]);
dbprintf("\n");
}
- dbprintf("\tinode %lld, dir inode %lld, type %s\n", ioc->ino,
- ioc->dirino, ioc->typ == NULL ? "none" : ioc->typ->name);
+ dbprintf(_("\tinode %lld, dir inode %lld, type %s\n"), ioc->ino,
+ ioc->dirino, ioc->typ == NULL ? _("none") : ioc->typ->name);
}
void
iocur_t *ioc;
if (ring_current == -1) {
- dbprintf("no entries in location ring.\n");
+ dbprintf(_("no entries in location ring.\n"));
return;
}
- dbprintf(" type bblock bblen fsbno inode\n");
+ dbprintf(_(" type bblock bblen fsbno inode\n"));
i = ring_head;
for (;;) {
const cmdinfo_t *ct;
if (argc > 1) {
- /* check we can execute command */
- ct = find_command(argv[1]);
- if (ct == NULL) {
- dbprintf("no such command %s\n", argv[1]);
- return 0;
- }
- if (!ct->canpush) {
- dbprintf("no push form allowed for %s\n", argv[1]);
- return 0;
- }
- }
-
- /* save current state */
- push_cur();
+ /* check we can execute command */
+ ct = find_command(argv[1]);
+ if (ct == NULL) {
+ dbprintf(_("no such command %s\n"), argv[1]);
+ return 0;
+ }
+ if (!ct->canpush) {
+ dbprintf(_("no push form allowed for %s\n"), argv[1]);
+ return 0;
+ }
+ }
+
+ /* save current state */
+ push_cur();
if (iocur_top[-1].typ && iocur_top[-1].typ->typnm == TYP_INODE)
set_cur_inode(iocur_top[-1].ino);
else
set_cur(iocur_top[-1].typ, iocur_top[-1].bb,
- iocur_top[-1].blen, DB_RING_IGN,
+ iocur_top[-1].blen, DB_RING_IGN,
iocur_top[-1].use_bbmap ? &iocur_top[-1].bbmap : NULL);
- /* run requested command */
- if (argc>1)
- (void)command(argc-1, argv+1);
+ /* run requested command */
+ if (argc>1)
+ (void)command(argc-1, argv+1);
return 0;
}
static void
push_help(void)
{
- dbprintf(
+ dbprintf(_(
"\n"
" Allows you to push the current address and data type on the stack for\n"
" later return. 'push' also accepts an additional command to execute after\n"
" storing the current address (ex: 'push a rootino' from the superblock).\n"
"\n"
- );
+ ));
}
/* move forward through the ring */
char **argv)
{
if (ring_current == -1) {
- dbprintf("ring is empty\n");
+ dbprintf(_("ring is empty\n"));
return 0;
}
if (ring_current == ring_head) {
- dbprintf("no further entries\n");
+ dbprintf(_("no further entries\n"));
return 0;
}
static void
forward_help(void)
{
- dbprintf(
+ dbprintf(_(
"\n"
" The 'forward' ('f') command moves to the next location in the position\n"
" ring, updating the current position and data type. If the current location\n"
" is the top entry in the ring, then the 'forward' command will have\n"
" no effect.\n"
"\n"
- );
+ ));
}
/* move backwards through the ring */
char **argv)
{
if (ring_current == -1) {
- dbprintf("ring is empty\n");
+ dbprintf(_("ring is empty\n"));
return 0;
}
if (ring_current == ring_tail) {
- dbprintf("no previous entries\n");
+ dbprintf(_("no previous entries\n"));
return 0;
}
static void
back_help(void)
{
- dbprintf(
+ dbprintf(_(
"\n"
" The 'back' ('b') command moves to the previous location in the position\n"
" ring, updating the current position and data type. If the current location\n"
" is the last entry in the ring, then the 'back' command will have no effect.\n"
"\n"
- );
+ ));
}
/* show or go to specific point in ring */
return 0;
}
- index = (int)strtoul(argv[0], NULL, 0);
+ index = (int)strtoul(argv[1], NULL, 0);
if (index < 0 || index >= RING_ENTRIES)
- dbprintf("invalid entry: %d\n", index);
+ dbprintf(_("invalid entry: %d\n"), index);
ring_current = index;
static void
ring_help(void)
{
- dbprintf(
+ dbprintf(_(
"\n"
" The position ring automatically keeps track of each disk location and\n"
" structure type for each change of position you make during your xfs_db\n"
" Note: Unlike the 'stack', 'push' and 'pop' commands, the ring tracks your\n"
" location implicitly. Use the 'push' and 'pop' commands if you wish to\n"
" store a specific location explicitly for later return.\n"
-"\n",
+"\n"),
RING_ENTRIES);
}
for (j = 0; j < count; j += bbmap ? 1 : count) {
if (bbmap)
bbno = bbmap->b[j];
- if (lseek64(xfsargs.dfd, bbno << BBSHIFT, SEEK_SET) < 0) {
+ if (lseek64(x.dfd, bbno << BBSHIFT, SEEK_SET) < 0) {
rval = errno;
- dbprintf("can't seek in filesystem at bb %lld\n", bbno);
+ dbprintf(_("can't seek in filesystem at bb %lld\n"), bbno);
return rval;
}
c = BBTOB(bbmap ? 1 : count);
- i = (int)write(xfsargs.dfd, (char *)bufp + BBTOB(j), c);
+ i = (int)write(x.dfd, (char *)bufp + BBTOB(j), c);
if (i < 0) {
rval = errno;
} else if (i < c) {
rval = -1;
- } else
+ } else
rval = 0;
if (rval)
break;
int i;
int j;
int rval = EINVAL;
-
- if (!count)
- return EINVAL;
+
+ if (count <= 0)
+ count = 1;
c = BBTOB(count);
if (*bufp == NULL)
for (j = 0; j < count; j += bbmap ? 1 : count) {
if (bbmap)
bbno = bbmap->b[j];
- if (lseek64(xfsargs.dfd, bbno << BBSHIFT, SEEK_SET) < 0) {
+ if (lseek64(x.dfd, bbno << BBSHIFT, SEEK_SET) < 0) {
rval = errno;
- dbprintf("can't seek in filesystem at bb %lld\n", bbno);
+ dbprintf(_("can't seek in filesystem at bb %lld\n"), bbno);
if (*bufp == NULL)
xfree(buf);
buf = NULL;
} else {
c = BBTOB(bbmap ? 1 : count);
- i = (int)read(xfsargs.dfd, (char *)buf + BBTOB(j), c);
+ i = (int)read(x.dfd, (char *)buf + BBTOB(j), c);
if (i < 0) {
rval = errno;
if (*bufp == NULL)
if (*bufp == NULL)
xfree(buf);
buf = NULL;
- } else
+ } else
rval = 0;
}
if (buf == NULL)
int ret;
if (iocur_sp < 0) {
- dbprintf("nothing to write\n");
+ dbprintf(_("nothing to write\n"));
return;
}
ret = write_bbs(iocur_top->bb, iocur_top->blen, iocur_top->buf,
iocur_top->use_bbmap ? &iocur_top->bbmap : NULL);
if (ret == -1)
- dbprintf("incomplete write, block: %lld\n",
+ dbprintf(_("incomplete write, block: %lld\n"),
(iocur_base + iocur_sp)->bb);
else if (ret != 0)
- dbprintf("write error: %s\n", strerror(ret));
+ dbprintf(_("write error: %s\n"), strerror(ret));
/* re-read buffer from disk */
ret = read_bbs(iocur_top->bb, iocur_top->blen, &iocur_top->buf,
iocur_top->use_bbmap ? &iocur_top->bbmap : NULL);
if (ret == -1)
- dbprintf("incomplete read, block: %lld\n",
+ dbprintf(_("incomplete read, block: %lld\n"),
(iocur_base + iocur_sp)->bb);
else if (ret != 0)
- dbprintf("read error: %s\n", strerror(ret));
+ dbprintf(_("read error: %s\n"), strerror(ret));
}
void
set_cur(
const typ_t *t,
- __int64_t d,
+ __int64_t d,
int c,
int ring_flag,
bbmap_t *bbmap)
__uint16_t mode;
if (iocur_sp < 0) {
- dbprintf("set_cur no stack element to set\n");
+ dbprintf(_("set_cur no stack element to set\n"));
return;
}
#ifdef DEBUG
if (bbmap)
- printf("xfs_db got a bbmap for %lld\n", (long long)d);
+ printf(_("xfs_db got a bbmap for %lld\n"), (long long)d);
#endif
ino = iocur_top->ino;
dirino = iocur_top->dirino;
static void
stack_help(void)
{
- dbprintf(
+ dbprintf(_(
"\n"
" The stack is used to explicitly store your location and data type\n"
" for later return. The 'push' operation stores the current address\n"
" The 'stack' allows explicit location saves, see 'ring' for implicit\n"
" position tracking.\n"
"\n"
- );
+ ));
}
/*ARGSUSED*/