source: main/trunk/greenstone2/common-src/src/gdbmedit/db2txt/db2txt.cpp@ 27597

Last change on this file since 27597 was 27597, checked in by davidb, 11 years ago

Additional header file included -- to help with finding the Unix mkdir function

  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 3.8 KB
RevLine 
[535]1/**********************************************************************
2 *
3 * db2txt.cpp --
4 * Copyright (C) 1999 The New Zealand Digital Library Project
5 *
6 * A component of the Greenstone digital library software
7 * from the New Zealand Digital Library Project at the
8 * University of Waikato, New Zealand.
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23 *
24 *********************************************************************/
25
[26650]26#ifdef _MSC_VER
[203]27#include "autoconf.h"
28#include "systems.h"
29#include "gdbmconst.h"
30#include "gdbm.h"
31
32#else
[27597]33
34/* header file for mkdir */
35#include <sys/stat.h>
36
[203]37#include <gdbm.h>
38#endif
39
40#include "gsdlconf.h"
41#include <stdlib.h>
42
43#if defined(GSDL_USE_OBJECTSPACE)
44#include <ospace\std\iostream>
45#elif defined(GSDL_USE_IOS_H)
46#include <iostream.h>
47#else
48#include <iostream>
49#endif
50
[2499]51// use the standard namespace
52#if !defined (GSDL_NAMESPACE_BROKEN)
53#if defined(GSDL_USE_OBJECTSPACE)
54using namespace ospace::std;
55#else
56using namespace std;
57#endif
58#endif
59
[203]60void print_usage (char *program_name) {
[17782]61 cerr << "usage: " << program_name << " database-name" << endl << endl;
[203]62}
63
64
[27597]65#ifdef _MSC32_
66// Windows implementation
67HANDLE hFile = CreateFile(_T("c:\\file.txt"), GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
68
69#else
70// assume Unix
71// lock a file on linux
72// [hs, 2 july 2010]
73// - modified to create a locl file local to the collection [jmt12]
74int lock ()
75{
76 string file_path ("");
77 char *collect_dir = getenv ("GSDLCOLLECTDIR");
78 if (collect_dir != NULL)
79 {
80 file_path += collect_dir;
81 }
82 file_path += "/tmp";
83 if ( access( file_path.c_str(), 00 ) != 0 )
84 {
85 mkdir(file_path.c_str(), 00777);
86 }
87 file_path += "/gdb.lock";
88 ///out << "txt2dbl::lock(" << file_path << ") => ";
89 int fd2 = open (file_path.c_str(), O_CREAT|O_RDWR, 00644);
90 close (fd2);
91 int fd = open (file_path.c_str(), O_RDWR);
92 flock lock = {F_WRLCK, SEEK_SET, 0, 0, 0};
93 fcntl (fd, F_SETLKW, &lock);
94 ///out << "locked!" << endl;
95 return fd;
96}
97
98// unlock a file on linux
99// [hs, 2 july 2010]
100int unlock ( int fd )
101{
102 flock lock1 = {F_UNLCK, SEEK_SET, 0, 0, 0};
103 fcntl (fd, F_SETLKW, &lock1);
104 return 0;
105}
106#endif
107
108
[203]109int main (int argc, char *argv[]) {
110 int block_size = 0, i;
111 GDBM_FILE dbf;
[15694]112 datum key, value, nextkey;
[203]113
114 // sanity check
115 if (argc != 2) {
116 print_usage (argv[0]);
117 exit (0);
118 }
119
120 // open the database
[26650]121#ifdef _MSC_VER
[982]122 dbf = gdbm_open (argv[1], block_size, GDBM_READER, 00664, NULL, 0);
123#else
[203]124 dbf = gdbm_open (argv[1], block_size, GDBM_READER, 00664, NULL);
[982]125#endif
[203]126 if (dbf == NULL) {
[22039]127 cerr << argv[0] << ": couldn't open " << argv[1] << endl;
[203]128 exit (0);
129 }
130
131 key = gdbm_firstkey (dbf);
132 while (key.dptr != NULL) {
133 cout << "[";
[9596]134 for (i = 0; i < key.dsize; ++i)
[203]135 cout << key.dptr[i];
[17782]136 cout << "]" << endl;
[203]137 value = gdbm_fetch (dbf, key);
[9596]138 for (i = 0; i < value.dsize; ++i)
[203]139 cout << value.dptr[i];
[17782]140 cout << endl << "----------------------------------------------------------------------" << endl;
[15218]141 free(value.dptr);
142
[15694]143 /* get next key */
144 nextkey = gdbm_nextkey (dbf, key);
145
146 /* free old key's dptr, otherwise causes memory leak */
147 free(key.dptr);
148
149 /* can now safely copy content of nextkey into key */
150 key = nextkey;
[203]151 }
152
153 gdbm_close (dbf);
154 return 0;
155}
Note: See TracBrowser for help on using the repository browser.