Annotation of freem/src/global_bltin.h, revision 1.12
1.1 snw 1: /*
1.12 ! snw 2: * $Id: global_bltin.h,v 1.11 2025/04/11 14:21:03 snw Exp $
1.1 snw 3: * built-in global handler header
4: *
5: *
1.2 snw 6: * Author: Serena Willis <snw@coherent-logic.com>
1.1 snw 7: * Copyright (C) 1998 MUG Deutschland
1.3 snw 8: * Copyright (C) 2020, 2025 Coherent Logic Development LLC
1.1 snw 9: *
10: *
11: * This file is part of FreeM.
12: *
13: * FreeM is free software: you can redistribute it and/or modify
14: * it under the terms of the GNU Affero Public License as published by
15: * the Free Software Foundation, either version 3 of the License, or
16: * (at your option) any later version.
17: *
18: * FreeM is distributed in the hope that it will be useful,
19: * but WITHOUT ANY WARRANTY; without even the implied warranty of
20: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21: * GNU Affero Public License for more details.
22: *
23: * You should have received a copy of the GNU Affero Public License
24: * along with FreeM. If not, see <https://www.gnu.org/licenses/>.
25: *
1.4 snw 26: * $Log: global_bltin.h,v $
1.12 ! snw 27: * Revision 1.11 2025/04/11 14:21:03 snw
! 28: * Make all but one of the read/write calls in global_bltin use gbl_read_block or gbl_write_block
! 29: *
1.11 snw 30: * Revision 1.10 2025/04/11 00:52:40 snw
31: * Replace all lseek/read calls in global handler to use gbl_read_block function
32: *
1.10 snw 33: * Revision 1.9 2025/04/09 14:34:30 snw
34: * Further work on global_bltin.c refactor
35: *
1.9 snw 36: * Revision 1.8 2025/04/09 00:43:07 snw
37: * Exit with fatal error if a header mismatch found
38: *
1.8 snw 39: * Revision 1.7 2025/04/08 21:41:13 snw
40: * Make insert, update, and splitp global handler functions take a ptr to a global_handle instead of a file descriptor
41: *
1.7 snw 42: * Revision 1.6 2025/04/08 20:00:56 snw
43: * Global handler now uses a header file and maintains the last journaling transaction ID
44: *
1.6 snw 45: * Revision 1.5 2025/04/08 16:46:11 snw
46: * Add global file header and offsets
47: *
1.5 snw 48: * Revision 1.4 2025/04/08 14:39:21 snw
49: * Initial work on global handler refactor
50: *
1.4 snw 51: * Revision 1.3 2025/03/09 19:14:25 snw
52: * First phase of REUSE compliance and header reformat
53: *
1.3 snw 54: *
55: * SPDX-FileCopyrightText: (C) 2025 Coherent Logic Development LLC
56: * SPDX-License-Identifier: AGPL-3.0-or-later
1.1 snw 57: **/
1.4 snw 58:
59: #if !defined(__FREEM_GLOBAL_BLTIN_H)
60: # define __FREEM_GLOBAL_BLTIN_H
61:
1.5 snw 62: #include "version.h"
63:
64: #define GBL_FORMAT_VERSION 2
65: #define GBL_MAGIC "FRMGL"
66:
1.6 snw 67: #define GBL_HDR_OK 0
68: #define GBL_HDR_NOTOPEN 1
69: #define GBL_HDR_BADMAGIC 2
70: #define GBL_HDR_BADVERSION 3
71: #define GBL_HDR_BADBLOCKSIZE 4
72:
1.5 snw 73: typedef struct global_header {
74:
75: char magic[5]; /* FRMGL */
76: int format_version;
77: char host_triplet[40];
1.8 snw 78: char host_id[256];
79:
1.5 snw 80: unsigned long block_size;
81: unsigned long last_transaction_id;
82:
83: long created;
84: long last_backup;
85:
86: } global_header;
87:
1.4 snw 88: typedef struct global_handle {
89:
90: int fd; /* file descriptor */
1.5 snw 91:
92: global_header header;
1.9 snw 93:
1.4 snw 94: long age;
1.12 ! snw 95: long last_read_time;
! 96:
1.4 snw 97: short opened;
98: short locked;
99: unsigned long last_block;
1.12 ! snw 100: short have_cached_block;
! 101: unsigned long cached_block_num;
! 102:
! 103: char *last_block_accessed;
1.5 snw 104:
1.9 snw 105: unsigned long use_count; /* how many times has it been accessed? */
1.10 snw 106: unsigned long read_ops;
107: unsigned long write_ops;
1.12 ! snw 108: unsigned long memory_reads;
1.10 snw 109: unsigned long splits;
1.9 snw 110: unsigned long cache_misses;
111: unsigned long cache_hits;
112:
1.4 snw 113: short fast_path;
114:
115: char global_name[256];
116: char global_path[4096];
117:
118:
119: struct global_handle *next;
120:
121: } global_handle;
122:
123: extern global_handle *global_handles_head;
1.9 snw 124: extern unsigned long gbl_cache_misses;
125: extern unsigned long gbl_cache_hits;
1.7 snw 126:
127: extern inline long gbl_path(char *key, char *buf);
1.9 snw 128: extern void gbl_cache_hit(global_handle *g);
129: extern void gbl_cache_miss(global_handle *g);
1.7 snw 130: extern int gbl_lock(global_handle *g, int type);
131: extern int gbl_unlock(global_handle *g);
132: extern void gbl_close(global_handle *g);
133: extern void gbl_close_all(void);
134: extern int gbl_write_initial_header(global_handle *g);
135: extern int gbl_write_header(global_handle *g, global_header *hdr);
136: extern int gbl_read_header(global_handle *g, global_header *h);
137: extern int gbl_update_tid(global_handle *g);
138: extern int gbl_create(global_handle *g);
139: extern short gbl_open(global_handle *g, short action);
1.10 snw 140: extern int gbl_read_block(global_handle *g, unsigned long blocknum, char *block);
1.11 snw 141: extern int gbl_write_block(global_handle *g, unsigned long blocknum, char *block);
1.7 snw 142: extern global_handle *gbl_handle(char *key);
143:
1.4 snw 144: #endif
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>