Cross Reference: showdb.c
xref
: /
osnet-11
/
usr
/
src
/
lib
/
libsqlite
/
tool
/
showdb.c
Home
History
Annotate
Line#
Navigate
Download
Search
only in
./
2
N/A
2
N/A
#
pragma
ident
"%Z%%M% %I% %E% SMI"
2
N/A
2
N/A
/*
2
N/A
** A utility for printing all or part of an SQLite database file.
2
N/A
*/
2
N/A
#
include
<
stdio.h
>
2
N/A
#
include
<
ctype.h
>
2
N/A
#
include
<
sys
/
types.h
>
2
N/A
#
include
<
sys
/
stat.h
>
2
N/A
#
include
<
fcntl.h
>
2
N/A
#
include
<
unistd.h
>
2
N/A
#
include
<
stdlib.h
>
2
N/A
2
N/A
2
N/A
static
int
pagesize
=
1024
;
2
N/A
static
int
db
= -
1
;
2
N/A
static
int
mxPage
= 0;
2
N/A
2
N/A
static
void
out_of_memory
(
void
){
2
N/A
fprintf
(
stderr
,
"Out of memory...\n"
);
2
N/A
exit
(
1
);
2
N/A
}
2
N/A
2
N/A
static
print_page
(
int
iPg
){
2
N/A
unsigned
char
*
aData
;
2
N/A
int
i, j;
2
N/A
aData
=
malloc
(
pagesize
);
2
N/A
if
(
aData
==0 )
out_of_memory
();
2
N/A
lseek
(
db
, (
iPg
-
1
)*
pagesize
,
SEEK_SET
);
2
N/A
read
(
db
,
aData
,
pagesize
);
2
N/A
fprintf
(
stdout
,
"Page %d:\n"
,
iPg
);
2
N/A
for
(i=0; i<
pagesize
; i +=
16
){
2
N/A
fprintf
(
stdout
,
" %03x: "
,i);
2
N/A
for
(j=0; j<
16
; j++){
2
N/A
fprintf
(
stdout
,
"%02x "
,
aData
[i+j]);
2
N/A
}
2
N/A
for
(j=0; j<
16
; j++){
2
N/A
fprintf
(
stdout
,
"%c"
,
isprint
(
aData
[i+j]) ?
aData
[i+j] :
'.'
);
2
N/A
}
2
N/A
fprintf
(
stdout
,
"\n"
);
2
N/A
}
2
N/A
free
(
aData
);
2
N/A
}
2
N/A
2
N/A
int
main
(
int
argc
,
char
**
argv
){
2
N/A
struct
stat
sbuf
;
2
N/A
if
(
argc
<
2
){
2
N/A
fprintf
(
stderr
,
"Usage: %s FILENAME ?PAGE? ...\n"
,
argv
[0]);
2
N/A
exit
(
1
);
2
N/A
}
2
N/A
db
=
open
(
argv
[
1
],
O_RDONLY
);
2
N/A
if
(
db
<0 ){
2
N/A
fprintf
(
stderr
,
"%s: can't open %s\n"
,
argv
[0],
argv
[
1
]);
2
N/A
exit
(
1
);
2
N/A
}
2
N/A
fstat
(
db
, &
sbuf
);
2
N/A
mxPage
=
sbuf
.
st_size
/
pagesize
+
1
;
2
N/A
if
(
argc
==
2
){
2
N/A
int
i;
2
N/A
for
(i=
1
; i<=
mxPage
; i++)
print_page
(i);
2
N/A
}
else
{
2
N/A
int
i;
2
N/A
for
(i=
2
; i<
argc
; i++){
2
N/A
int
iStart
,
iEnd
;
2
N/A
char
*
zLeft
;
2
N/A
iStart
=
strtol
(
argv
[i], &
zLeft
, 0);
2
N/A
if
(
zLeft
&&
strcmp
(
zLeft
,
"..end"
)==0 ){
2
N/A
iEnd
=
mxPage
;
2
N/A
}
else
if
(
zLeft
&&
zLeft
[0]==
'.'
&&
zLeft
[
1
]==
'.'
){
2
N/A
iEnd
=
strtol
(&
zLeft
[
2
], 0, 0);
2
N/A
}
else
{
2
N/A
iEnd
=
iStart
;
2
N/A
}
2
N/A
if
(
iStart
<
1
||
iEnd
<
iStart
||
iEnd
>
mxPage
){
2
N/A
fprintf
(
stderr
,
2
N/A
"Page argument should be LOWER?..UPPER?. Range 1 to %d\n"
,
2
N/A
mxPage
);
2
N/A
exit
(
1
);
2
N/A
}
2
N/A
while
(
iStart
<=
iEnd
){
2
N/A
print_page
(
iStart
);
2
N/A
iStart
++;
2
N/A
}
2
N/A
}
2
N/A
}
2
N/A
close
(
db
);
2
N/A
}