libini.c
上传用户:dgyhgb
上传日期:2007-01-07
资源大小:676k
文件大小:4k
源码类别:

SQL Server

开发平台:

Unix_Linux

  1. /*
  2.  *  libini.c  - BD objects initialization Library 
  3.  *              Kernel of GNU SQL-server. Recovery utilities     
  4.  *
  5.  *  This file is a part of GNU SQL Server
  6.  *
  7.  *  Copyright (c) 1996, 1997, Free Software Foundation, Inc
  8.  *  Developed at the Institute of System Programming
  9.  *  This file is written by  Vera Ponomarenko
  10.  *
  11.  *  This program is free software; you can redistribute it and/or modify
  12.  *  it under the terms of the GNU General Public License as published by
  13.  *  the Free Software Foundation; either version 2 of the License, or
  14.  *  (at your option) any later version.
  15.  *
  16.  *  This program is distributed in the hope that it will be useful,
  17.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  18.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19.  *  GNU General Public License for more details.
  20.  *
  21.  *  You should have received a copy of the GNU General Public License
  22.  *  along with this program; if not, write to the Free Software
  23.  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  24.  *
  25.  *  Contacts:   gss@ispras.ru
  26.  *
  27.  */
  28. /* $Id: libini.c,v 1.245 1997/03/31 03:46:38 kml Exp $ */
  29. #include "setup_os.h"
  30. #include <sys/types.h>
  31. #include <sys/stat.h>
  32. #if HAVE_FCNTL_H 
  33. #include <fcntl.h>
  34. #endif
  35. #if HAVE_UNISTD_H
  36. #include <unistd.h>
  37. #endif
  38. #include "xmem.h"
  39. #include "destrn.h"
  40. #include "adfstr.h"
  41. #include "admdef.h"
  42. #include "strml.h"
  43. #include "totdecl.h"
  44. #define adfsize sizeof(struct ADF)
  45. void
  46. ini_adm_file (char *name_adm_file)
  47. {
  48.   register i4_t fdaf;
  49.   struct ADF adf;
  50.   
  51.   /* the initialization of the admfile */
  52.   unlink (name_adm_file);    
  53.   if ( (fdaf = open (name_adm_file, O_RDWR|O_CREAT, DEFAULT_ACCESS_RIGHTS)) < 0)
  54.     {
  55.       perror ("ADMFILE: open error");
  56.       exit (1);
  57.     }
  58.   adf.uid = 1;
  59.   adf.uidconst = 1;
  60.   adf.unname = 1;
  61.   adf.sizext = 4 * BD_PAGESIZE;
  62.   adf.maxext = 1024;
  63.   adf.maxfrext = 64;
  64.   adf.maxtrans = 64;
  65.   adf.mjred = 32;
  66.   adf.ljred = 2;
  67.   adf.mjmpage = 2;
  68.   adf.ljmpage = 2;
  69.   adf.sizesc = 2;
  70.   adf.optbufnum = 64;
  71.   adf.maxnbuf = 3 * adf.maxtrans;
  72.   adf.maxtact = 2;
  73.   adf.fshmsegn = 100000;
  74.   if (write (fdaf, (char *)&adf, adfsize) != adfsize)
  75.     {
  76.       perror ("ADMFILE: write error");
  77.       exit (1);
  78.     } 
  79.   close (fdaf);
  80. }
  81. void
  82. ini_mj (char *name_mj_file)
  83. {
  84.   i4_t NV;
  85.   i4_t fdmj;
  86.   char page[RPAGE];
  87.   
  88.   /* the initialization of MJ */
  89.   NV = 0;
  90.   unlink (name_mj_file);
  91.   if ( (fdmj = open (name_mj_file, O_RDWR|O_CREAT, DEFAULT_ACCESS_RIGHTS)) < 0)
  92.     {
  93.       perror ("LIBINI: MJ open error");
  94.       exit (1);
  95.     }
  96.   t4bpack (NV, page);
  97.   if (write (fdmj, page, RPAGE) != RPAGE)
  98.     {
  99.       perror ("MJ: write error");
  100.       exit (1);
  101.     } 
  102.   close (fdmj);
  103. }
  104. void
  105. ini_lj (char *name_lj_file)
  106. {
  107.   i4_t fdlj;
  108.   char page[RPAGE];  
  109.   bzero(page,sizeof(page));
  110.   /* the initialization of LJ */
  111.   unlink (name_lj_file);
  112.   if ( (fdlj = open (name_lj_file, O_RDWR|O_CREAT, DEFAULT_ACCESS_RIGHTS)) < 0)
  113.     {
  114.       perror ("LJ: open error");
  115.       exit (1);
  116.     }
  117.   t2bpack (RTPAGE, page+size4b);
  118.   *(page + size4b + size2b)= SIGN_NOCONT;
  119.   if (write (fdlj, page, RPAGE) != RPAGE)
  120.     {
  121.       perror ("LJ: write error");
  122.       exit (1);
  123.     } 
  124.   close (fdlj);
  125. }
  126. void
  127. ini_BD_seg (char *name_BD_seg, u2_t scsize)
  128. {
  129.   struct ind_page *indph;
  130.   char mch[BD_PAGESIZE];
  131.   char *a;
  132.   struct stat bufstat;
  133.   i4_t fd_seg;
  134.   i4_t i;
  135.   /* the initialization of BD segment */
  136.   unlink (name_BD_seg);
  137.   if ( (fd_seg = open (name_BD_seg, O_RDWR|O_CREAT, DEFAULT_ACCESS_RIGHTS)) < 0)
  138.     {
  139.       perror ("SEG1: open error");
  140.       exit (1);
  141.     }
  142.   assert(scsize < 8);
  143.   for (a = mch + 2 * size4b, *a = 0, i = 0; i <= scsize; i++)
  144.     *a|= BITVL(i);
  145.   for (a += 1, i = 2 * size4b + 1; i < BD_PAGESIZE; i++)
  146.     *a++ = 0;
  147.   if (write (fd_seg, mch, BD_PAGESIZE) != BD_PAGESIZE)
  148.     {
  149.       perror ("SEG1: write error");
  150.       exit (1);
  151.     } 
  152.   for (a = mch, i = 0; i < BD_PAGESIZE; i++)
  153.     *a++ = 0;
  154.   for (i = 1; i < scsize; i++)
  155.     if (write (fd_seg, mch, BD_PAGESIZE) != BD_PAGESIZE)
  156.       {
  157.         perror ("SEG1: write error");
  158.         exit (1);
  159.       }
  160.   indph = (struct ind_page *)mch;
  161.   indph->ind_wpage = LEAF;
  162.   indph->ind_off = indphsize;
  163.   indph->ind_nextpn = (u2_t)~0;
  164.   if (write (fd_seg, mch, indphsize) != indphsize)
  165.     {
  166.       perror ("SEG1: write error");
  167.       exit (1);
  168.     }
  169.   fstat (fd_seg, &bufstat);
  170.   fprintf (stderr, "SEG1_size=%ldn", bufstat.st_size);
  171.   close (fd_seg);
  172. }