Annotation of freem/src/global_bltin.h, revision 1.11
1.1 snw 1: /*
1.11 ! snw 2: * $Id: global_bltin.h,v 1.10 2025/04/11 00:52:40 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.11 ! snw 27: * Revision 1.10 2025/04/11 00:52:40 snw
! 28: * Replace all lseek/read calls in global handler to use gbl_read_block function
! 29: *
1.10 snw 30: * Revision 1.9 2025/04/09 14:34:30 snw
31: * Further work on global_bltin.c refactor
32: *
1.9 snw 33: * Revision 1.8 2025/04/09 00:43:07 snw
34: * Exit with fatal error if a header mismatch found
35: *
1.8 snw 36: * Revision 1.7 2025/04/08 21:41:13 snw
37: * Make insert, update, and splitp global handler functions take a ptr to a global_handle instead of a file descriptor
38: *
1.7 snw 39: * Revision 1.6 2025/04/08 20:00:56 snw
40: * Global handler now uses a header file and maintains the last journaling transaction ID
41: *
1.6 snw 42: * Revision 1.5 2025/04/08 16:46:11 snw
43: * Add global file header and offsets
44: *
1.5 snw 45: * Revision 1.4 2025/04/08 14:39:21 snw
46: * Initial work on global handler refactor
47: *
1.4 snw 48: * Revision 1.3 2025/03/09 19:14:25 snw
49: * First phase of REUSE compliance and header reformat
50: *
1.3 snw 51: *
52: * SPDX-FileCopyrightText: (C) 2025 Coherent Logic Development LLC
53: * SPDX-License-Identifier: AGPL-3.0-or-later
1.1 snw 54: **/
1.4 snw 55:
56: #if !defined(__FREEM_GLOBAL_BLTIN_H)
57: # define __FREEM_GLOBAL_BLTIN_H
58:
1.5 snw 59: #include "version.h"
60:
61: #define GBL_FORMAT_VERSION 2
62: #define GBL_MAGIC "FRMGL"
63:
1.6 snw 64: #define GBL_HDR_OK 0
65: #define GBL_HDR_NOTOPEN 1
66: #define GBL_HDR_BADMAGIC 2
67: #define GBL_HDR_BADVERSION 3
68: #define GBL_HDR_BADBLOCKSIZE 4
69:
1.5 snw 70: typedef struct global_header {
71:
72: char magic[5]; /* FRMGL */
73: int format_version;
74: char host_triplet[40];
1.8 snw 75: char host_id[256];
76:
1.5 snw 77: unsigned long block_size;
78: unsigned long last_transaction_id;
79:
80: long created;
81: long last_backup;
82:
83: } global_header;
84:
1.4 snw 85: typedef struct global_handle {
86:
87: int fd; /* file descriptor */
1.5 snw 88:
89: global_header header;
1.9 snw 90:
1.4 snw 91: long age;
92: short opened;
93: short locked;
94: unsigned long last_block;
1.5 snw 95:
1.9 snw 96: unsigned long use_count; /* how many times has it been accessed? */
1.10 snw 97: unsigned long read_ops;
98: unsigned long write_ops;
99: unsigned long splits;
1.9 snw 100: unsigned long cache_misses;
101: unsigned long cache_hits;
102:
1.4 snw 103: short fast_path;
104:
105: char global_name[256];
106: char global_path[4096];
107:
108:
109: struct global_handle *next;
110:
111: } global_handle;
112:
113: extern global_handle *global_handles_head;
1.9 snw 114: extern unsigned long gbl_cache_misses;
115: extern unsigned long gbl_cache_hits;
1.7 snw 116:
117: extern inline long gbl_path(char *key, char *buf);
1.9 snw 118: extern void gbl_cache_hit(global_handle *g);
119: extern void gbl_cache_miss(global_handle *g);
1.7 snw 120: extern int gbl_lock(global_handle *g, int type);
121: extern int gbl_unlock(global_handle *g);
122: extern void gbl_close(global_handle *g);
123: extern void gbl_close_all(void);
124: extern int gbl_write_initial_header(global_handle *g);
125: extern int gbl_write_header(global_handle *g, global_header *hdr);
126: extern int gbl_read_header(global_handle *g, global_header *h);
127: extern int gbl_update_tid(global_handle *g);
128: extern int gbl_create(global_handle *g);
129: extern short gbl_open(global_handle *g, short action);
1.10 snw 130: extern int gbl_read_block(global_handle *g, unsigned long blocknum, char *block);
1.11 ! snw 131: extern int gbl_write_block(global_handle *g, unsigned long blocknum, char *block);
1.7 snw 132: extern global_handle *gbl_handle(char *key);
133:
1.4 snw 134: #endif
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>