From 39adbc58e082cb9a0776948ea8ff2be88050d1a3 Mon Sep 17 00:00:00 2001 From: cmelnulabs Date: Sat, 7 Feb 2026 14:44:04 +0100 Subject: [PATCH 1/2] Modernized documentation and removed obsolete files - Removed obsolete CVS files (.cvsignore) and libmigdb.epr - Renamed DJGPP.why to DJGPP.why.obsolete (historical reference) - Replaced old README with modern README.md (Markdown format) * Removed outdated contact info and GDB version references * Updated build instructions with safer defaults * Added clearer structure and navigation - Created CONTRIBUTING.md with comprehensive coding standards * Defined function size limits, naming conventions * Added examples of good/bad practices * Documented commit message format - Updated FSF address in LICENSE and GPL-license (moved 2005) - Updated FSF address in all source file headers - Preserved both license files (no license changes) - Added .gitignore for build artifacts --- .cvsignore | 3 - .gitignore | 4 + CONTRIBUTING.md | 252 ++++++++++++++++++++++++++++++++ DJGPP.why => DJGPP.why.obsolete | 0 GPL-license | 2 +- LICENSE | 2 +- README | 124 ---------------- README.md | 108 ++++++++++++++ examples/.cvsignore | 16 -- libmigdb.epr | Bin 2707 -> 0 bytes src/.cvsignore | 3 - src/alloc.c | 2 +- src/breakpoint.c | 2 +- src/connect.c | 2 +- src/data_man.c | 2 +- src/error.c | 2 +- src/get_free_pty.c | 2 +- src/get_free_vt.c | 2 +- src/mi_gdb.h | 2 +- src/misc.c | 2 +- src/parse.c | 2 +- src/prg_control.c | 2 +- src/stack_man.c | 2 +- src/symbol_query.c | 2 +- src/target_man.c | 2 +- src/thread.c | 2 +- src/var_obj.c | 2 +- 27 files changed, 382 insertions(+), 164 deletions(-) delete mode 100644 .cvsignore create mode 100644 .gitignore create mode 100644 CONTRIBUTING.md rename DJGPP.why => DJGPP.why.obsolete (100%) delete mode 100644 README create mode 100644 README.md delete mode 100644 examples/.cvsignore delete mode 100644 libmigdb.epr delete mode 100644 src/.cvsignore diff --git a/.cvsignore b/.cvsignore deleted file mode 100644 index a36664c..0000000 --- a/.cvsignore +++ /dev/null @@ -1,3 +0,0 @@ -*.dst -.*.dst -version diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7fac2a7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +*.o +*.a +*.so +*.so.* diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..1d0eeaf --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,252 @@ +# Contributing to libmigdb + +Thank you for your interest in contributing to libmigdb! This document outlines the guidelines and standards for contributing to this project. + +## Code of Conduct + +* Be respectful and constructive in all interactions +* Focus on improving the library for everyone +* Welcome newcomers and help them get started + +## How to Contribute + +### Reporting Issues + +* Use the GitHub issue tracker +* Provide clear description of the problem +* Include steps to reproduce +* Mention your GDB version and platform + +### Submitting Changes + +1. Fork the repository +2. Create a feature branch: `git checkout -b feature/your-feature-name` or `bug/fix-description` +3. Make your changes following the coding standards below +4. Test your changes thoroughly +5. Commit with clear, descriptive messages (use past participle: "Fixed bug" not "Fix bug") +6. Push to your fork and submit a pull request + +## Coding Standards + +### General Principles + +* **No chunky functions**: Keep functions under 50-60 lines +* **No magic numbers**: Use named constants for all literals (except 0, 1, -1) +* **No uninitialized variables**: Always initialize variables at declaration +* **No ambiguous names**: Avoid single-letter variables (except loop counters), generic names like `tmp`, `data`, `handle()` +* **Maximum nesting**: Keep nesting to 3 levels or less +* **Single Responsibility**: Each function should do one thing well + +### Naming Conventions + +**Variables:** +```c +int frame_count = 0; // Good: descriptive +int n = 0; // Bad: ambiguous (except in tight loops) + +char *result_buffer = NULL; // Good: clear purpose +char *tmp = NULL; // Bad: generic + +mi_h *gdb_handle = NULL; // Good: context clear +mi_h *h = NULL; // Bad: abbreviated +``` + +**Functions:** +```c +mi_parse_frame() // Good: clear action +process_data() // Bad: vague verb +handle() // Bad: too generic +``` + +**Constants:** +```c +#define MI_BUFFER_SIZE 1024 // Good +#define MI_MAX_RETRY_COUNT 5 // Good +#define MI_TIMEOUT_SECONDS 10 // Good + +// Usage: for (i = 0; i < 10; i++) // OK: small literal in obvious context +// Usage: buffer[1024] // Bad: should use MI_BUFFER_SIZE +``` + +**Booleans:** +```c +int is_running = 0; // Good: prefix 'is_' +int has_breakpoint = 0; // Good: prefix 'has_' +int flag = 0; // Bad: unclear meaning +``` + +### Code Style + +**Indentation:** Tabs (width 8) or 4 spaces (be consistent with existing code) + +**Braces:** +```c +if (condition) { + do_something(); +} + +while (running) { + process(); +} +``` + +**Error Handling:** +```c +char *buffer = malloc(size); +if (!buffer) { + return MI_ERROR_MEMORY; +} +``` + +**Always check:** +* `malloc()`, `calloc()`, `realloc()` return values +* File operations +* String operations that can fail + +### Function Structure + +**Keep functions focused:** +```c +// Good: single responsibility +static int validate_connection(mi_h *handle) { + if (!handle) { + return 0; + } + if (!handle->connected) { + return 0; + } + return 1; +} + +// Bad: doing too many things +int process_and_validate_and_send(...) { + // 150 lines of mixed responsibilities +} +``` + +**Extract helpers for complex logic:** +```c +// Instead of deeply nested conditions: +if (condition1) { + if (condition2) { + if (condition3) { + // deep nesting... + } + } +} + +// Extract to helper: +static int check_preconditions() { + return condition1 && condition2 && condition3; +} + +if (check_preconditions()) { + // cleaner logic +} +``` + +### Memory Management + +* **Always free** what you allocate +* **Document ownership** in function comments +* **Use consistent patterns** for allocation/deallocation +* **NULL check** before freeing (though `free(NULL)` is safe) + +```c +/** + * parse_result - Parse MI result string + * @str: Input string + * + * Returns: Allocated result structure or NULL on error. + * Caller must free with mi_free_result(). + */ +mi_result *parse_result(const char *str); +``` + +### Comments + +**Function documentation:** +```c +/** + * mi_parse_frame - Parse stack frame information + * @handle: GDB handle + * @frame_str: MI frame string + * + * Parses a GDB/MI frame response into a structured format. + * + * Returns: Allocated mi_frame structure or NULL on error. + * Caller is responsible for freeing with mi_free_frame(). + */ +``` + +**Inline comments:** +* Explain *why*, not *what* +* Keep them concise +* Update comments when code changes + +```c +// Good: explains reasoning +// Use exponential backoff to avoid overwhelming the connection +sleep_time *= 2; + +// Bad: states the obvious +// Multiply sleep_time by 2 +sleep_time *= 2; +``` + +### Testing + +* Test your changes on Linux (minimum) +* Verify with multiple GDB versions if possible +* Check for memory leaks with Valgrind +* Ensure examples still compile and run + +### Commit Messages + +Use past participle (completed action): + +**Good:** +``` +Fixed buffer overflow in mi_parse_frame + +- Added bounds checking for frame buffer +- Replaced magic number with MI_FRAME_BUFFER_SIZE constant +- Added test case for oversized frame data +``` + +**Bad:** +``` +Fix stuff +Update code +Changes +``` + +**Format:** +``` +: (max 50 chars) + + + + + +Closes #123 +``` + +**Types:** Fixed, Added, Changed, Removed, Improved, Refactored + +## Pull Request Process + +1. Update documentation if you change behavior +2. Add/update tests if applicable +3. Ensure all tests pass +4. Update README.md if you add features +5. Reference related issues in PR description +6. Wait for review and address feedback + +## Questions? + +Open an issue with the `question` label or start a discussion. + +--- + +Thank you for contributing to libmigdb! diff --git a/DJGPP.why b/DJGPP.why.obsolete similarity index 100% rename from DJGPP.why rename to DJGPP.why.obsolete diff --git a/GPL-license b/GPL-license index d60c31a..e06ff8d 100644 --- a/GPL-license +++ b/GPL-license @@ -2,7 +2,7 @@ Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. diff --git a/LICENSE b/LICENSE index d60c31a..e06ff8d 100644 --- a/LICENSE +++ b/LICENSE @@ -2,7 +2,7 @@ Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. diff --git a/README b/README deleted file mode 100644 index 0f61c6f..0000000 --- a/README +++ /dev/null @@ -1,124 +0,0 @@ -Introduction: ------------- - -This library is an attempt to support the GDB/MI interface. MI stands for -machine interface. In this mode gdb sends responses that are "machine -readable" instead of "human readable" - -Objetive: --------- - -To implement a C and C++ interface to talk with gdb using it. - -Advantages: ----------- - -* The responses should be i18n independent and with less problems to be parsed. -* New versions shouldn't break the parser. - -Disadvantages: -------------- - -* The responses are quite complex. -* The responses can't be easily read by a human. - -Motivation: ----------- - -To add remote debugging to SETEdit. RHIDE lacks it. - -Currently supported platcforms: ------------------------------- - -Currently we support: - -* Linux console -* Linux X11 - -The code should be usable by other systems that provides POSIX API and where -gdb is available. - -How to compile and install: --------------------------- - -Change to the "src" directory and run "make". Change to root and run "make -install". -The "Makefile" could need changes. The PREFIX is /usr you most probably will -want to change it to /usr/local. - -How to run examples: -------------------- - -Switch to the "examples" directory and run "make". Read the comments at the -beggining of the examples. -They show how to use the library for different targets. - -* linux_test: Linux console. Shows how to set breakpoints and watchpoints. -* remote_test: Remote debugging using TCP/IP connection. Shows breakpoints. -* x11_cpp_test: Shows how to use the C++ wrapper. The examples is for X11. -* x11_fr_test: Linux X11. Shows how to use "frames" and "variable objects". -* x11_test: Linux X11. Shows how to set breakpoints and watchpoints. -* x11_wp_test: Linux X11. Shows how to set watchpoints. - -Function reference and help: ---------------------------- - -An incomplete reference can be found in the "doc" directory. I suggest -looking at the examples with the reference at hand. - - -Author: ------- - -Salvador E. Tropea -Email: user: set, server: users.sf.net - - Telephone: (+5411) 4759-0013 - Postal Address: - Salvador E. Tropea - Curapaligue 2124 - (1678) Caseros - 3 de Febrero - Prov: Buenos Aires - Argentina - ------------------------------------------------------------------------------ - -Random notes: ------------- - -Debug strategies: - -1) Remote using TCP/IP: This methode is quite limited. One amazing thing I -noticed is that you can't set watchpoints. Other important differences are -that the remote target starts "running", it means you have to use continue -instead of run and it also means that command line arguments must be provided -at the remote end. -The way that's implemented you need a full gdb on the local end. That's ok -when you want to release the remote end from some of the heavy tasks (like -loading all the debug info), but doesn't help if what you want is just -control gdb from a remote machine sending the commands throu TCP/IP. The last -could allow debugging DOS applications under Windows exploting the Windows -multitasking. - -2) Local under X: We start an xterm child that runs: - -<--- /tmp/xxxxxx.sh -tty > /tmp/yyyyyy -sleep 100d -<--- - -That's "xterm -e /bin/sh /tmp/xxxxxx.sh &" -Then we read /tmp/yyyyyy file to know the ttyname, delete both files and -tell gdb to use this terminal. -This is implemented by: gmi_start_xterm() - -3) Local for Linux console: We can open a new terminal (as X and Allegro -does with tty8 and higher). -This is implemented by: gmi_look_for_free_vt() - -4) Local for Linux console, same terminal: We tell gdb to use the current -terminal, but before sending an async command we so Suspend and when we get -an async response "stopped" we Resume. This is less functional and more -complex. - - diff --git a/README.md b/README.md new file mode 100644 index 0000000..c9140f5 --- /dev/null +++ b/README.md @@ -0,0 +1,108 @@ +# libmigdb - GDB Machine Interface Library + +A C/C++ library for interfacing with GDB's Machine Interface (MI) protocol. + +## About + +This library provides a programmatic interface to control GDB through its MI protocol. MI responses are machine-readable (unlike the standard CLI), making them suitable for IDE integration, automated testing, and debugging tools. + +### Advantages + +* Internationalization (i18n) independent responses +* Structured, parseable output format +* Version-stable API across GDB updates +* Suitable for programmatic control + +### Disadvantages + +* Complex response structure +* Not human-readable +* Requires parsing logic + +## Supported Platforms + +* Linux (console and X11) +* Any POSIX-compliant system with GDB support + +## Building and Installation + +### Prerequisites + +* GCC or compatible C compiler +* Make +* GDB (tested with GDB 6.x through 14.x) +* For X11 examples: X11 development libraries + +### Build + +```bash +cd src +make +``` + +### Install + +```bash +cd src +sudo make install PREFIX=/usr/local +``` + +**Note:** Default `PREFIX` is `/usr`. For user installations, use `/usr/local` or `~/.local`. + +## Examples + +Switch to the `examples/` directory and run `make`. Each example demonstrates different debugging scenarios: + +* **linux_test**: Linux console - breakpoints and watchpoints +* **remote_test**: Remote debugging via TCP/IP +* **x11_cpp_test**: C++ wrapper usage (X11) +* **x11_fr_test**: Stack frames and variable objects (X11) +* **x11_test**: Breakpoints and watchpoints (X11) +* **x11_wp_test**: Watchpoints (X11) + +Read the comments at the beginning of each example for usage details. + +## Documentation + +An API reference is available in the `doc/` directory. Review the examples alongside the reference for best results. + +## Debugging Strategies + +### 1. Remote Debugging (TCP/IP) +Use `gdbserver` on the remote machine and connect via TCP/IP. Note: watchpoints may have limited support in remote mode. + +### 2. X11 Local Debugging +The library spawns an xterm child process for inferior program I/O. See `gmi_start_xterm()`. + +### 3. Linux Console Debugging +Opens a new virtual terminal (VT) for the debugged program. See `gmi_look_for_free_vt()`. + +### 4. Same-Terminal Debugging +Uses the current terminal with suspend/resume for I/O handling. More complex, less functional. + +## License + +This project is licensed under the **GNU General Public License v2.0 (GPLv2)**. + +See [LICENSE](LICENSE) for full details. + +## Contributing + +Contributions are welcome! Please: + +1. Fork the repository +2. Create a feature branch +3. Follow the existing code style +4. Submit a pull request + +## Project Status + +This library supports GDB's MI protocol and is actively maintained. The MI protocol has remained relatively stable across GDB versions 6.x through 14.x. + +## Contact + +For issues, feature requests, or contributions, please use the GitHub issue tracker. + +--- + +**Historical Note:** This library was originally created to add remote debugging support to SETEdit. Legacy platform notes (DJGPP, RHIDE) have been moved to `DJGPP.why.obsolete` for historical reference. diff --git a/examples/.cvsignore b/examples/.cvsignore deleted file mode 100644 index 4bea798..0000000 --- a/examples/.cvsignore +++ /dev/null @@ -1,16 +0,0 @@ -*.dst -.*.dst -*.epr* -test_target -x11_test -remote_test -linux_test -x11_wp_test -x11_cpp_test -target_frames -x11_fr_test -pty_test -ticepic -icepic -*.cod -*.lst diff --git a/libmigdb.epr b/libmigdb.epr deleted file mode 100644 index f6ee0e79548ad0872ee8c3e3262a41f7466d5089..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2707 zcmchZ&2G~`5XaZ0w2+361`17!P}K`3+(zmR4txr6K^!V7Q59>m*(6SEue;uq^und$ z3>E4-aN&x01#Tem2p}PG`n{rNvL|C!|S!FQ6kpr zu18nSAcRiP4K%Y`*nSYTciiA9Z^<=uT|Gc(UfySRi`#Pfv7r8a=6ToT5}c>yxe#%( zfjy5Ao1i&l$t8K*xmA(7lFxbGxCoFcr??$5HxNUllKhT5 zBy|*tXi|YRanPW)#~RjLyi4x;Bwq+(5!ze7w=#I=qXC3DSNO&YLX;0WH zUo=R$JUaBN%yafTluzRFZ<Oh?A z7$;`N($Xc+GRMr{UmB=7M>ORquNf}O*UrV`cyyKqvRpz#cesO=Gfm-ZmYU`Vm^-Z6 znn2QBjag14bt@Hz$gv*Jn8~X+a6b_1{NL`+9u-ft!a-{SFPVVpI%dP3X_zVQWj|VD z79zBjS%v;@DtvM8EL>1i_?}(oBHlZ_>mwRajs>mRqT8I_YZ2>AJ=7^iH~cCvoMoxM Vjqp(UPyH2C7prIWdTJBg{{S%!OK|`I diff --git a/src/.cvsignore b/src/.cvsignore deleted file mode 100644 index a2bee77..0000000 --- a/src/.cvsignore +++ /dev/null @@ -1,3 +0,0 @@ -*.dst -.*.dst -*.epr* diff --git a/src/alloc.c b/src/alloc.c index 08e75a0..7386206 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Module: Allocator. Comments: diff --git a/src/breakpoint.c b/src/breakpoint.c index 0663057..8fa74ca 100644 --- a/src/breakpoint.c +++ b/src/breakpoint.c @@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Module: Breakpoint table commands. Comments: diff --git a/src/connect.c b/src/connect.c index bc070db..7c4f84f 100644 --- a/src/connect.c +++ b/src/connect.c @@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Module: Connect. Comments: diff --git a/src/data_man.c b/src/data_man.c index a30291e..6684192 100644 --- a/src/data_man.c +++ b/src/data_man.c @@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Module: Data manipulation. Comments: diff --git a/src/error.c b/src/error.c index 7046a2d..d0dce05 100644 --- a/src/error.c +++ b/src/error.c @@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Module: Error. Comment: diff --git a/src/get_free_pty.c b/src/get_free_pty.c index 3e314e0..a70c1de 100644 --- a/src/get_free_pty.c +++ b/src/get_free_pty.c @@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Module: pseudo terminal Comments: diff --git a/src/get_free_vt.c b/src/get_free_vt.c index 299ebbf..d832605 100644 --- a/src/get_free_vt.c +++ b/src/get_free_vt.c @@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Module: Linux VT. Comments: diff --git a/src/mi_gdb.h b/src/mi_gdb.h index 9456023..d0c6939 100644 --- a/src/mi_gdb.h +++ b/src/mi_gdb.h @@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Comments: Main header for libmigdb. diff --git a/src/misc.c b/src/misc.c index 4c6198c..e988e16 100644 --- a/src/misc.c +++ b/src/misc.c @@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Module: Miscellaneous commands. Comments: diff --git a/src/parse.c b/src/parse.c index 975dc47..1c89146 100644 --- a/src/parse.c +++ b/src/parse.c @@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Module: Parser. Comments: diff --git a/src/prg_control.c b/src/prg_control.c index eee9fc7..6a18ece 100644 --- a/src/prg_control.c +++ b/src/prg_control.c @@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Module: Program control. Comments: diff --git a/src/stack_man.c b/src/stack_man.c index e474fd0..677bece 100644 --- a/src/stack_man.c +++ b/src/stack_man.c @@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Module: Stack manipulation. Comments: diff --git a/src/symbol_query.c b/src/symbol_query.c index 7335313..8308382 100644 --- a/src/symbol_query.c +++ b/src/symbol_query.c @@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Module: Symbol query. Comments: diff --git a/src/target_man.c b/src/target_man.c index b12c3cd..34e6731 100644 --- a/src/target_man.c +++ b/src/target_man.c @@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Module: Target manipulation. Comments: diff --git a/src/thread.c b/src/thread.c index 92825d0..1d08816 100644 --- a/src/thread.c +++ b/src/thread.c @@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Module: Thread commands. Comments: diff --git a/src/var_obj.c b/src/var_obj.c index c329fde..c29280a 100644 --- a/src/var_obj.c +++ b/src/var_obj.c @@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Module: Variable objects. Comments: From 424fe3105daf5a67d20e9367dd948241d9fafb53 Mon Sep 17 00:00:00 2001 From: cmelnulabs Date: Sat, 7 Feb 2026 14:47:22 +0100 Subject: [PATCH 2/2] Added original author credit to README - Added Salvador E. Tropea as original creator - Removed obsolete contact information - Preserves historical attribution --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index c9140f5..1371035 100644 --- a/README.md +++ b/README.md @@ -86,6 +86,10 @@ This project is licensed under the **GNU General Public License v2.0 (GPLv2)**. See [LICENSE](LICENSE) for full details. +## Author + +**Salvador E. Tropea** - Original creator and maintainer + ## Contributing Contributions are welcome! Please: