@nockdev/awf 6.2.6 → 6.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agent/config.yaml +2 -2
- package/.agent/core/AGENT_BEHAVIOR.md +1 -1
- package/.agent/core/AUDIT_POLICY.md +1 -1
- package/.agent/core/CACHE.md +1 -1
- package/.agent/core/DATA_SAFETY.md +1 -1
- package/.agent/core/MEMORY_PATHS.yaml +2 -2
- package/.agent/core/PERMISSIONS.md +1 -1
- package/.agent/core/README.md +1 -1
- package/.agent/core/VERSION.yaml +4 -4
- package/.agent/core/archive/ACTIVE_MEMORY.yaml +2 -2
- package/.agent/core/archive/CHECKPOINT.yaml +2 -2
- package/.agent/core/archive/CLEANUP_ENGINE.yaml +2 -2
- package/.agent/core/archive/CONTEXT_INJECTOR.yaml +2 -2
- package/.agent/core/archive/CONTEXT_LOADER.yaml +1 -1
- package/.agent/core/archive/CONTEXT_OPTIMIZATION.yaml +1 -1
- package/.agent/core/archive/CONTEXT_PRIORITY.yaml +2 -2
- package/.agent/core/archive/FLOW_ENGINE.yaml +1 -1
- package/.agent/core/archive/GRAPH_MEMORY.yaml +1 -1
- package/.agent/core/archive/HYBRID_ROUTER.yaml +1 -1
- package/.agent/core/archive/INTENT_DETECTION.yaml +1 -1
- package/.agent/core/archive/MEMORY_CONSOLIDATION.yaml +3 -3
- package/.agent/core/archive/MEMORY_ENGINE.yaml +2 -2
- package/.agent/core/archive/MEMORY_UTILS.yaml +1 -1
- package/.agent/core/archive/REFLECTION_ENGINE.yaml +1 -1
- package/.agent/core/archive/ROUTER.yaml +4 -4
- package/.agent/core/archive/SCORING_FORMULA.yaml +2 -2
- package/.agent/core/archive/SEMANTIC_ENGINE.yaml +1 -1
- package/.agent/core/archive/SKILLS_FLOW.yaml +1 -1
- package/.agent/core/archive/STATE_MACHINE.yaml +1 -1
- package/.agent/core/archive/SUMMARIZATION_ENGINE.yaml +2 -2
- package/.agent/core/archive/TOKEN_BUDGETS.yaml +2 -2
- package/.agent/core/archive/TOKEN_LOADING.yaml +2 -2
- package/.agent/core/archive/TOKEN_SUMMARY.yaml +2 -2
- package/.agent/core/reference/CODING_STYLES.yaml +1 -1
- package/.agent/core/reference/LIBRARY_REGISTRY.yaml +1 -1
- package/.agent/core/reference/MCP_TOOLS.yaml +2 -2
- package/.agent/core/reference/PATTERNS.yaml +1 -1
- package/.agent/core/reference/SKILL_SCHEMA.yaml +1 -1
- package/.agent/i18n/en.yaml +6 -6
- package/.agent/i18n/vi.yaml +6 -6
- package/.agent/ide/README.md +1 -1
- package/.agent/ide/amazonq.json +1 -1
- package/.agent/ide/amp.json +1 -1
- package/.agent/ide/antigravity.json +1 -1
- package/.agent/ide/augment.json +1 -1
- package/.agent/ide/claude.json +1 -1
- package/.agent/ide/cline.json +1 -1
- package/.agent/ide/cody.json +1 -1
- package/.agent/ide/continue.json +1 -1
- package/.agent/ide/cursor.json +1 -1
- package/.agent/ide/gemini.json +1 -1
- package/.agent/ide/jetbrains.json +1 -1
- package/.agent/ide/kiro.json +1 -1
- package/.agent/ide/opencode.json +1 -1
- package/.agent/ide/roo.json +1 -1
- package/.agent/ide/tabnine.json +1 -1
- package/.agent/ide/trae.json +1 -1
- package/.agent/ide/vscode.json +1 -1
- package/.agent/ide/windsurf.json +1 -1
- package/.agent/ide/zed.json +1 -1
- package/.agent/manifest.yaml +1 -1
- package/.agent/personas/README.md +1 -1
- package/.agent/personas/architect.md +1 -1
- package/.agent/personas/auditor.md +1 -1
- package/.agent/personas/debugger.md +1 -1
- package/.agent/personas/developer.md +1 -1
- package/.agent/personas/devops.md +1 -1
- package/.agent/personas/documenter.md +1 -1
- package/.agent/personas/orchestrator.md +1 -1
- package/.agent/personas/persona.schema.yaml +1 -1
- package/.agent/personas/planner.md +1 -1
- package/.agent/personas/researcher.md +1 -1
- package/.agent/personas/security.md +1 -1
- package/.agent/personas/tester.md +1 -1
- package/.agent/rules/README.md +1 -1
- package/.agent/rules/archive/constitutional/tier-0-core.yaml +5 -5
- package/.agent/rules/archive/constitutional/tier-1-safety.yaml +5 -5
- package/.agent/rules/archive/constitutional/tier-2-execution.yaml +6 -6
- package/.agent/rules/archive/context-management.yaml +1 -1
- package/.agent/rules/archive/duplication-prevention.md +1 -1
- package/.agent/rules/archive/evidence.yaml +1 -1
- package/.agent/rules/archive/project-detection.md +1 -1
- package/.agent/rules/archive/reflection.yaml +1 -1
- package/.agent/rules/archive/versioning.yaml +5 -5
- package/.agent/rules/data/build-systems.yaml +2 -2
- package/.agent/rules/modules/agent-delegation.yaml +2 -2
- package/.agent/rules/modules/edit-verification.yaml +1 -1
- package/.agent/rules/modules/git-workflow.yaml +1 -1
- package/.agent/rules/modules/language.yaml +1 -1
- package/.agent/rules/modules/online-research.yaml +1 -1
- package/.agent/rules/modules/performance-optimization.yaml +2 -2
- package/.agent/rules/modules/quality.yaml +1 -1
- package/.agent/rules/modules/stop-conditions.yaml +1 -1
- package/.agent/rules/modules/terminal-safety.yaml +1 -1
- package/.agent/rules/modules/yagni.yaml +1 -1
- package/.agent/rules/validation-framework.md +1 -1
- package/.agent/skills/README.md +1 -1
- package/.agent/skills/_categories.yaml +2 -2
- package/.agent/skills/ai-ml/rag-patterns/META.yaml +2 -0
- package/.agent/skills/core/api-design/META.yaml +1 -1
- package/.agent/skills/core/authentication/META.yaml +1 -1
- package/.agent/skills/core/error-handling/META.yaml +1 -1
- package/.agent/skills/core/logging/META.yaml +1 -1
- package/.agent/skills/core/observability/META.yaml +1 -1
- package/.agent/skills/core/security/META.yaml +1 -1
- package/.agent/skills/core/security/SKILL.md +1 -1
- package/.agent/skills/cross-cutting/accessibility/META.yaml +1 -1
- package/.agent/skills/cross-cutting/audit-pro/META.yaml +9 -1
- package/.agent/skills/cross-cutting/audit-pro/SKILL.md +61 -5
- package/.agent/skills/cross-cutting/bun/META.yaml +17 -8
- package/.agent/skills/cross-cutting/bun/SKILL.md +1 -1
- package/.agent/skills/cross-cutting/coding-rules/META.yaml +1 -1
- package/.agent/skills/cross-cutting/database/META.yaml +42 -1
- package/.agent/skills/cross-cutting/database/SKILL.md +44 -628
- package/.agent/skills/cross-cutting/database/references/nosql-patterns.md +194 -0
- package/.agent/skills/cross-cutting/database/references/orms-patterns.md +278 -0
- package/.agent/skills/cross-cutting/database/references/postgresql.md +144 -0
- package/.agent/skills/cross-cutting/deno/META.yaml +19 -10
- package/.agent/skills/cross-cutting/deno/SKILL.md +1 -1
- package/.agent/skills/cross-cutting/domyh-design/META.yaml +1 -1
- package/.agent/skills/cross-cutting/domyh-design/data/desktop-colors.yaml +1 -1
- package/.agent/skills/cross-cutting/electron/SKILL.md +15 -616
- package/.agent/skills/cross-cutting/electron/references/ipc-testing.md +114 -0
- package/.agent/skills/cross-cutting/electron/references/native-integrations.md +216 -0
- package/.agent/skills/cross-cutting/electron/references/performance-accessibility.md +118 -0
- package/.agent/skills/cross-cutting/electron/references/updates-persistence.md +165 -0
- package/.agent/skills/cross-cutting/seo/META.yaml +1 -1
- package/.agent/skills/cross-cutting/skill-creator/META.yaml +37 -0
- package/.agent/skills/cross-cutting/skill-creator/SKILL.md +163 -0
- package/.agent/skills/cross-cutting/skill-creator/references/patterns.md +58 -0
- package/.agent/skills/cross-cutting/skill-creator/references/schema-v2.md +44 -0
- package/.agent/skills/cross-cutting/sql/META.yaml +1 -1
- package/.agent/skills/cross-cutting/sql/SKILL.md +1 -1
- package/.agent/skills/cross-cutting/tailwind/META.yaml +1 -1
- package/.agent/skills/cross-cutting/tailwind/SKILL.md +1 -1
- package/.agent/skills/cross-cutting/tdd-workflow/META.yaml +1 -1
- package/.agent/skills/cross-cutting/testing/META.yaml +7 -1
- package/.agent/skills/cross-cutting/testing/SKILL.md +1 -1
- package/.agent/skills/cross-cutting/testing/data/frameworks.yaml +1 -1
- package/.agent/skills/cross-cutting/web-perf/META.yaml +1 -1
- package/.agent/skills/cross-cutting/web-perf/SKILL.md +1 -1
- package/.agent/skills/devops/aws/META.yaml +1 -1
- package/.agent/skills/devops/aws/SKILL.md +101 -16
- package/.agent/skills/devops/azure/SKILL.md +96 -30
- package/.agent/skills/devops/ci-cd/META.yaml +1 -1
- package/.agent/skills/devops/ci-cd/SKILL.md +114 -8
- package/.agent/skills/devops/docker/META.yaml +1 -1
- package/.agent/skills/devops/docker/SKILL.md +96 -8
- package/.agent/skills/devops/gcp/SKILL.md +106 -30
- package/.agent/skills/devops/kubernetes/META.yaml +1 -1
- package/.agent/skills/devops/kubernetes/SKILL.md +125 -8
- package/.agent/skills/frameworks/angular/META.yaml +1 -1
- package/.agent/skills/frameworks/angular/SKILL.md +1 -1
- package/.agent/skills/frameworks/flutter/META.yaml +1 -1
- package/.agent/skills/frameworks/flutter/SKILL.md +1 -1
- package/.agent/skills/frameworks/nextjs/META.yaml +1 -1
- package/.agent/skills/frameworks/nextjs/SKILL.md +1 -1
- package/.agent/skills/frameworks/nuxt/META.yaml +1 -1
- package/.agent/skills/frameworks/nuxt/SKILL.md +1 -1
- package/.agent/skills/frameworks/react/META.yaml +1 -1
- package/.agent/skills/frameworks/react/SKILL.md +24 -1
- package/.agent/skills/frameworks/react-native/META.yaml +1 -1
- package/.agent/skills/frameworks/react-native/SKILL.md +1 -1
- package/.agent/skills/frameworks/svelte/META.yaml +1 -1
- package/.agent/skills/frameworks/svelte/SKILL.md +1 -1
- package/.agent/skills/frameworks/vue/META.yaml +1 -1
- package/.agent/skills/frameworks/vue/SKILL.md +1 -1
- package/.agent/skills/index.json +2 -2
- package/.agent/skills/languages/asm/META.yaml +1 -1
- package/.agent/skills/languages/asm/SKILL.md +27 -436
- package/.agent/skills/languages/asm/references/advanced-architectures.md +191 -0
- package/.agent/skills/languages/asm/references/build-structure.md +150 -0
- package/.agent/skills/languages/asm/references/simd-programming.md +92 -0
- package/.agent/skills/languages/c/META.yaml +1 -1
- package/.agent/skills/languages/c/SKILL.md +14 -356
- package/.agent/skills/languages/c/references/data-structures.md +63 -0
- package/.agent/skills/languages/c/references/memory-management.md +74 -0
- package/.agent/skills/languages/c/references/platform-headers.md +230 -0
- package/.agent/skills/languages/clojure/META.yaml +1 -1
- package/.agent/skills/languages/clojure/SKILL.md +1 -1
- package/.agent/skills/languages/cpp/META.yaml +1 -1
- package/.agent/skills/languages/cpp/SKILL.md +22 -753
- package/.agent/skills/languages/cpp/references/headers-optimization.md +229 -0
- package/.agent/skills/languages/cpp/references/memory-concurrency.md +85 -0
- package/.agent/skills/languages/cpp/references/modern-cpp-features.md +126 -0
- package/.agent/skills/languages/cpp/references/platform-headers.md +202 -0
- package/.agent/skills/languages/cpp/references/stl-containers.md +57 -0
- package/.agent/skills/languages/crystal/META.yaml +1 -1
- package/.agent/skills/languages/crystal/SKILL.md +1 -1
- package/.agent/skills/languages/csharp/META.yaml +1 -1
- package/.agent/skills/languages/csharp/SKILL.md +1 -1
- package/.agent/skills/languages/elixir/META.yaml +1 -1
- package/.agent/skills/languages/elixir/SKILL.md +1 -1
- package/.agent/skills/languages/fsharp/META.yaml +1 -1
- package/.agent/skills/languages/fsharp/SKILL.md +1 -1
- package/.agent/skills/languages/go/META.yaml +1 -1
- package/.agent/skills/languages/go/SKILL.md +1 -1
- package/.agent/skills/languages/haskell/META.yaml +1 -1
- package/.agent/skills/languages/haskell/SKILL.md +1 -1
- package/.agent/skills/languages/java/META.yaml +1 -1
- package/.agent/skills/languages/java/SKILL.md +1 -1
- package/.agent/skills/languages/javascript/META.yaml +1 -1
- package/.agent/skills/languages/javascript/SKILL.md +1 -1
- package/.agent/skills/languages/julia/META.yaml +1 -1
- package/.agent/skills/languages/julia/SKILL.md +1 -1
- package/.agent/skills/languages/kotlin/META.yaml +1 -1
- package/.agent/skills/languages/kotlin/SKILL.md +1 -1
- package/.agent/skills/languages/lua/META.yaml +1 -1
- package/.agent/skills/languages/lua/SKILL.md +3 -3
- package/.agent/skills/languages/nim/META.yaml +1 -1
- package/.agent/skills/languages/nim/SKILL.md +1 -1
- package/.agent/skills/languages/ocaml/META.yaml +1 -1
- package/.agent/skills/languages/ocaml/SKILL.md +1 -1
- package/.agent/skills/languages/perl/META.yaml +1 -1
- package/.agent/skills/languages/perl/SKILL.md +1 -1
- package/.agent/skills/languages/php/META.yaml +1 -1
- package/.agent/skills/languages/php/SKILL.md +1 -1
- package/.agent/skills/languages/python/META.yaml +1 -1
- package/.agent/skills/languages/python/SKILL.md +1 -1
- package/.agent/skills/languages/r/META.yaml +1 -1
- package/.agent/skills/languages/r/SKILL.md +1 -1
- package/.agent/skills/languages/ruby/META.yaml +1 -1
- package/.agent/skills/languages/ruby/SKILL.md +1 -1
- package/.agent/skills/languages/rust/META.yaml +1 -1
- package/.agent/skills/languages/rust/SKILL.md +1 -1
- package/.agent/skills/languages/scala/META.yaml +1 -1
- package/.agent/skills/languages/scala/SKILL.md +1 -1
- package/.agent/skills/languages/solidity/META.yaml +1 -1
- package/.agent/skills/languages/solidity/SKILL.md +1 -1
- package/.agent/skills/languages/swift/META.yaml +1 -1
- package/.agent/skills/languages/swift/SKILL.md +1 -1
- package/.agent/skills/languages/typescript/META.yaml +19 -1
- package/.agent/skills/languages/typescript/SKILL.md +23 -1
- package/.agent/skills/languages/zig/META.yaml +1 -1
- package/.agent/skills/languages/zig/SKILL.md +1 -1
- package/.agent/templates/README.md +2 -2
- package/.agent/templates/chains/feature/step1-requirements.md +76 -0
- package/.agent/templates/chains/feature/step2-design.md +75 -0
- package/.agent/templates/chains/feature/step3-planning.md +81 -0
- package/.agent/templates/chains/feature/step4-implementation.md +74 -0
- package/.agent/templates/chains/feature/step5-testing.md +81 -0
- package/.agent/templates/debug-report.md +1 -1
- package/.agent/templates/deploy-plan.md +1 -1
- package/.agent/templates/doc-template.md +1 -1
- package/.agent/templates/feature-lifecycle.md +53 -0
- package/.agent/templates/index.yaml +53 -2
- package/.agent/templates/migrate-plan.md +1 -1
- package/.agent/templates/phase-template.md +1 -1
- package/.agent/templates/tasks/audit.yaml +1 -1
- package/.agent/templates/tasks/bug_fix.yaml +1 -1
- package/.agent/templates/tasks/code_implementation.yaml +1 -1
- package/.agent/templates/tasks/feature_development.yaml +89 -0
- package/.agent/templates/tasks/refactor.yaml +1 -1
- package/.agent/templates/test-report.md +1 -1
- package/.agent/workflows/doctor.md +124 -0
- package/.agent/workflows/feature.md +130 -0
- package/.agent/workflows/help.md +7 -5
- package/dist/commands/install.js +1 -1
- package/dist/commands/install.js.map +1 -1
- package/dist/constants/ide-install-specs.js +30 -30
- package/dist/constants/ide-install-specs.js.map +1 -1
- package/dist/constants/ides.d.ts.map +1 -1
- package/dist/constants/ides.js +7 -5
- package/dist/constants/ides.js.map +1 -1
- package/dist/constants.d.ts +1 -1
- package/dist/constants.js +1 -1
- package/dist/types/ide-install.d.ts +1 -1
- package/dist/types/ide-install.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
---
|
|
1
|
+
---
|
|
2
2
|
name: c
|
|
3
3
|
detect: ["*.c", "*.h", "Makefile", "CMakeLists.txt"]
|
|
4
|
-
version: "6.2.
|
|
4
|
+
version: "6.2.7"
|
|
5
5
|
category: language
|
|
6
6
|
tier: 1
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
# C Language Patterns
|
|
9
|
+
# C Language Patterns DOMYH Awesome Code
|
|
10
10
|
|
|
11
|
-
> Pure C (ISO C23) development patterns
|
|
11
|
+
> Pure C (ISO C23) development patterns NOT C++
|
|
12
12
|
|
|
13
|
-
##
|
|
13
|
+
## 🔍 Language Identification
|
|
14
14
|
|
|
15
15
|
```yaml
|
|
16
16
|
# C vs C++ distinction (CRITICAL)
|
|
@@ -60,7 +60,7 @@ cpp_indicators: # Switch to C++ skill if detected
|
|
|
60
60
|
|
|
61
61
|
---
|
|
62
62
|
|
|
63
|
-
##
|
|
63
|
+
## 🆕 C23 New Features
|
|
64
64
|
|
|
65
65
|
### nullptr (replaces NULL)
|
|
66
66
|
|
|
@@ -261,144 +261,16 @@ free(copy);
|
|
|
261
261
|
|
|
262
262
|
---
|
|
263
263
|
|
|
264
|
-
##
|
|
265
|
-
|
|
266
|
-
### RAII Pattern (Resource Acquisition Is Initialization)
|
|
267
|
-
|
|
268
|
-
```c
|
|
269
|
-
// ✅ Cleanup attribute (GCC/Clang extension, common in Linux kernel)
|
|
270
|
-
#define AUTO_FREE __attribute__((cleanup(cleanup_free)))
|
|
271
|
-
|
|
272
|
-
static void cleanup_free(void *p) {
|
|
273
|
-
free(*(void **)p);
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
void process_data(void) {
|
|
277
|
-
AUTO_FREE char *buf = malloc(1024);
|
|
278
|
-
if (!buf) return;
|
|
279
|
-
|
|
280
|
-
// buf automatically freed when function returns
|
|
281
|
-
// No need for explicit free()
|
|
282
|
-
}
|
|
283
|
-
```
|
|
284
|
-
|
|
285
|
-
### Error Handling with goto (Linux Kernel Style)
|
|
286
|
-
|
|
287
|
-
```c
|
|
288
|
-
// ✅ Standard C pattern for resource cleanup
|
|
289
|
-
int process_file(const char *path) {
|
|
290
|
-
int ret = 0;
|
|
291
|
-
FILE *fp = NULL;
|
|
292
|
-
char *buf = NULL;
|
|
293
|
-
|
|
294
|
-
fp = fopen(path, "r");
|
|
295
|
-
if (!fp) {
|
|
296
|
-
ret = -errno;
|
|
297
|
-
goto out;
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
buf = malloc(BUFFER_SIZE);
|
|
301
|
-
if (!buf) {
|
|
302
|
-
ret = -ENOMEM;
|
|
303
|
-
goto out_close;
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
// Do processing...
|
|
307
|
-
if (some_error) {
|
|
308
|
-
ret = -EINVAL;
|
|
309
|
-
goto out_free;
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
// Success path
|
|
313
|
-
ret = 0;
|
|
314
|
-
|
|
315
|
-
out_free:
|
|
316
|
-
free(buf);
|
|
317
|
-
out_close:
|
|
318
|
-
fclose(fp);
|
|
319
|
-
out:
|
|
320
|
-
return ret;
|
|
321
|
-
}
|
|
322
|
-
```
|
|
323
|
-
|
|
324
|
-
### Memory Debugging
|
|
325
|
-
|
|
326
|
-
```bash
|
|
327
|
-
# Valgrind (memory leak detection)
|
|
328
|
-
valgrind --leak-check=full ./program
|
|
329
|
-
|
|
330
|
-
# AddressSanitizer (compile-time)
|
|
331
|
-
gcc -fsanitize=address -g program.c -o program
|
|
332
|
-
|
|
333
|
-
# UndefinedBehaviorSanitizer
|
|
334
|
-
gcc -fsanitize=undefined -g program.c -o program
|
|
335
|
-
```
|
|
336
|
-
|
|
337
|
-
---
|
|
338
|
-
|
|
339
|
-
## 🏗️ Data Structures
|
|
264
|
+
## 📚 Deep-Dive References
|
|
340
265
|
|
|
341
|
-
|
|
266
|
+
- **Memory Management** — malloc/free patterns, arena allocators, memory pools
|
|
267
|
+
→ See [references/memory-management.md](references/memory-management.md)
|
|
342
268
|
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
// In header file (user.h)
|
|
346
|
-
typedef struct User User;
|
|
347
|
-
User *user_create(const char *name);
|
|
348
|
-
void user_destroy(User *user);
|
|
349
|
-
const char *user_get_name(const User *user);
|
|
350
|
-
|
|
351
|
-
// In implementation file (user.c)
|
|
352
|
-
struct User {
|
|
353
|
-
char *name;
|
|
354
|
-
int id;
|
|
355
|
-
// Private implementation details
|
|
356
|
-
};
|
|
357
|
-
|
|
358
|
-
User *user_create(const char *name) {
|
|
359
|
-
User *u = malloc(sizeof(*u));
|
|
360
|
-
if (!u) return NULL;
|
|
361
|
-
|
|
362
|
-
u->name = strdup(name);
|
|
363
|
-
if (!u->name) {
|
|
364
|
-
free(u);
|
|
365
|
-
return NULL;
|
|
366
|
-
}
|
|
367
|
-
u->id = generate_id();
|
|
368
|
-
return u;
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
void user_destroy(User *user) {
|
|
372
|
-
if (user) {
|
|
373
|
-
free(user->name);
|
|
374
|
-
free(user);
|
|
375
|
-
}
|
|
376
|
-
}
|
|
377
|
-
```
|
|
269
|
+
- **Data Structures** — Linked lists, hash maps, ring buffers in C
|
|
270
|
+
→ See [references/data-structures.md](references/data-structures.md)
|
|
378
271
|
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
```c
|
|
382
|
-
// ✅ C99+ pattern for variable-length data
|
|
383
|
-
struct Message {
|
|
384
|
-
size_t length;
|
|
385
|
-
uint32_t type;
|
|
386
|
-
char data[]; // Flexible array member (MUST be last)
|
|
387
|
-
};
|
|
388
|
-
|
|
389
|
-
struct Message *create_message(const char *text) {
|
|
390
|
-
size_t len = strlen(text) + 1;
|
|
391
|
-
struct Message *msg = malloc(sizeof(*msg) + len);
|
|
392
|
-
if (!msg) return NULL;
|
|
393
|
-
|
|
394
|
-
msg->length = len;
|
|
395
|
-
msg->type = MSG_TYPE_TEXT;
|
|
396
|
-
memcpy(msg->data, text, len);
|
|
397
|
-
return msg;
|
|
398
|
-
}
|
|
399
|
-
```
|
|
400
|
-
|
|
401
|
-
---
|
|
272
|
+
- **Platform Headers** — Windows/POSIX specifics, \_REENTRANT, signal handling
|
|
273
|
+
→ See [references/platform-headers.md](references/platform-headers.md)
|
|
402
274
|
|
|
403
275
|
## 🔒 Security Best Practices
|
|
404
276
|
|
|
@@ -516,220 +388,6 @@ endif()
|
|
|
516
388
|
|
|
517
389
|
---
|
|
518
390
|
|
|
519
|
-
## ⚠️ Platform-Specific Headers (CRITICAL)
|
|
520
|
-
|
|
521
|
-
### Windows Headers Conflicts
|
|
522
|
-
|
|
523
|
-
> **CRITICAL**: Windows headers have many conflicts. Follow this order exactly!
|
|
524
|
-
|
|
525
|
-
#### 1. Include Order (winsock2.h BEFORE windows.h)
|
|
526
|
-
|
|
527
|
-
```c
|
|
528
|
-
// ✅ CORRECT ORDER - winsock2.h MUST come before windows.h
|
|
529
|
-
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff
|
|
530
|
-
#define NOMINMAX // Prevent min/max macros (for C++ compat)
|
|
531
|
-
#define STRICT // Enable strict type checking
|
|
532
|
-
#define UNICODE // Use Unicode APIs
|
|
533
|
-
#define _UNICODE
|
|
534
|
-
|
|
535
|
-
#include <winsock2.h> // 1st - Winsock 2.0
|
|
536
|
-
#include <ws2tcpip.h> // 2nd - TCP/IP extensions
|
|
537
|
-
#include <windows.h> // 3rd - Windows API
|
|
538
|
-
|
|
539
|
-
#pragma comment(lib, "ws2_32.lib") // Link Winsock library
|
|
540
|
-
|
|
541
|
-
// ❌ WRONG - causes redefinition errors!
|
|
542
|
-
#include <windows.h> // includes winsock.h (1.1)
|
|
543
|
-
#include <winsock2.h> // conflicts with winsock.h!
|
|
544
|
-
```
|
|
545
|
-
|
|
546
|
-
#### 2. Essential Macros
|
|
547
|
-
|
|
548
|
-
```c
|
|
549
|
-
// Define BEFORE any Windows includes (in pch.h or first in source)
|
|
550
|
-
#ifndef WIN32_LEAN_AND_MEAN
|
|
551
|
-
#define WIN32_LEAN_AND_MEAN // Excludes: Cryptography, DDE, RPC, Shell, Winsock 1.1
|
|
552
|
-
#endif
|
|
553
|
-
|
|
554
|
-
#ifndef STRICT
|
|
555
|
-
#define STRICT // Strict type checking for HANDLE types
|
|
556
|
-
#endif
|
|
557
|
-
|
|
558
|
-
#include <windows.h>
|
|
559
|
-
```
|
|
560
|
-
|
|
561
|
-
#### 3. Windows Socket Initialization
|
|
562
|
-
|
|
563
|
-
```c
|
|
564
|
-
#include <winsock2.h>
|
|
565
|
-
#include <ws2tcpip.h>
|
|
566
|
-
|
|
567
|
-
int init_winsock(void) {
|
|
568
|
-
WSADATA wsaData;
|
|
569
|
-
int result = WSAStartup(MAKEWORD(2, 2), &wsaData);
|
|
570
|
-
if (result != 0) {
|
|
571
|
-
fprintf(stderr, "WSAStartup failed: %d\n", result);
|
|
572
|
-
return -1;
|
|
573
|
-
}
|
|
574
|
-
return 0;
|
|
575
|
-
}
|
|
576
|
-
|
|
577
|
-
void cleanup_winsock(void) {
|
|
578
|
-
WSACleanup();
|
|
579
|
-
}
|
|
580
|
-
```
|
|
581
|
-
|
|
582
|
-
### Windows Headers Quick Reference
|
|
583
|
-
|
|
584
|
-
| Header | Purpose | Notes |
|
|
585
|
-
| -------------- | ------------------- | -------------------------------- |
|
|
586
|
-
| `<windows.h>` | Core Windows API | Use with WIN32_LEAN_AND_MEAN |
|
|
587
|
-
| `<winsock2.h>` | Sockets (Winsock 2) | MUST include BEFORE windows.h |
|
|
588
|
-
| `<ws2tcpip.h>` | TCP/IP, getaddrinfo | Include after winsock2.h |
|
|
589
|
-
| `<process.h>` | Process control | \_beginthreadex, \_getpid |
|
|
590
|
-
| `<io.h>` | Low-level I/O | \_open, \_read, \_write, \_close |
|
|
591
|
-
| `<direct.h>` | Directory | \_mkdir, \_rmdir, \_getcwd |
|
|
592
|
-
| `<conio.h>` | Console I/O | \_getch, \_kbhit |
|
|
593
|
-
|
|
594
|
-
---
|
|
595
|
-
|
|
596
|
-
### Linux/POSIX Headers
|
|
597
|
-
|
|
598
|
-
#### 1. Feature Test Macros (Define FIRST)
|
|
599
|
-
|
|
600
|
-
```c
|
|
601
|
-
// Define BEFORE any system headers!
|
|
602
|
-
#define _GNU_SOURCE // GNU extensions (Linux-specific)
|
|
603
|
-
#define _POSIX_C_SOURCE 200809L // POSIX.1-2008 compliance
|
|
604
|
-
#define _REENTRANT // Thread-safe libc functions
|
|
605
|
-
#define _XOPEN_SOURCE 700 // X/Open SUSv4 + POSIX 2008
|
|
606
|
-
|
|
607
|
-
#include <stdio.h>
|
|
608
|
-
#include <stdlib.h>
|
|
609
|
-
#include <unistd.h>
|
|
610
|
-
#include <pthread.h>
|
|
611
|
-
```
|
|
612
|
-
|
|
613
|
-
#### 2. Signal Handling with Threads (Critical)
|
|
614
|
-
|
|
615
|
-
```c
|
|
616
|
-
#include <pthread.h>
|
|
617
|
-
#include <signal.h>
|
|
618
|
-
#include <stdio.h>
|
|
619
|
-
|
|
620
|
-
volatile sig_atomic_t shutdown_flag = 0;
|
|
621
|
-
|
|
622
|
-
// ✅ Block signals in worker threads, handle in dedicated thread
|
|
623
|
-
int main(void) {
|
|
624
|
-
sigset_t set;
|
|
625
|
-
sigemptyset(&set);
|
|
626
|
-
sigaddset(&set, SIGINT);
|
|
627
|
-
sigaddset(&set, SIGTERM);
|
|
628
|
-
|
|
629
|
-
// Block signals in main thread (inherited by child threads)
|
|
630
|
-
pthread_sigmask(SIG_BLOCK, &set, NULL);
|
|
631
|
-
|
|
632
|
-
// Create worker threads (they inherit blocked signals)
|
|
633
|
-
pthread_t worker;
|
|
634
|
-
pthread_create(&worker, NULL, worker_func, NULL);
|
|
635
|
-
|
|
636
|
-
// Handle signals in main thread with sigwait
|
|
637
|
-
int sig;
|
|
638
|
-
while (sigwait(&set, &sig) == 0) {
|
|
639
|
-
if (sig == SIGINT || sig == SIGTERM) {
|
|
640
|
-
shutdown_flag = 1;
|
|
641
|
-
break;
|
|
642
|
-
}
|
|
643
|
-
}
|
|
644
|
-
|
|
645
|
-
pthread_join(worker, NULL);
|
|
646
|
-
return 0;
|
|
647
|
-
}
|
|
648
|
-
|
|
649
|
-
// ❌ AVOID: Signal handlers with threads (race conditions!)
|
|
650
|
-
```
|
|
651
|
-
|
|
652
|
-
#### 3. Common POSIX Headers
|
|
653
|
-
|
|
654
|
-
| Header | Purpose | Key Functions |
|
|
655
|
-
| ---------------- | ---------------- | ----------------------------------- |
|
|
656
|
-
| `<unistd.h>` | POSIX API | read, write, close, fork, exec |
|
|
657
|
-
| `<pthread.h>` | Threads | pthread*create, pthread_mutex*\* |
|
|
658
|
-
| `<signal.h>` | Signals | sigaction, sigwait, pthread_sigmask |
|
|
659
|
-
| `<fcntl.h>` | File control | open, fcntl, O\_\* flags |
|
|
660
|
-
| `<sys/types.h>` | Type definitions | pid_t, size_t, ssize_t |
|
|
661
|
-
| `<sys/socket.h>` | Sockets | socket, bind, listen, accept |
|
|
662
|
-
| `<netinet/in.h>` | Internet addr | sockaddr_in, htons, ntohs |
|
|
663
|
-
| `<arpa/inet.h>` | IP conversion | inet_pton, inet_ntop |
|
|
664
|
-
| `<sys/stat.h>` | File status | stat, fstat, mkdir |
|
|
665
|
-
| `<sys/mman.h>` | Memory mapping | mmap, munmap, mprotect |
|
|
666
|
-
| `<dlfcn.h>` | Dynamic loading | dlopen, dlsym, dlclose |
|
|
667
|
-
| `<errno.h>` | Error codes | errno, ENOENT, EINVAL |
|
|
668
|
-
| `<dirent.h>` | Directory ops | opendir, readdir, closedir |
|
|
669
|
-
|
|
670
|
-
---
|
|
671
|
-
|
|
672
|
-
### Cross-Platform C Code
|
|
673
|
-
|
|
674
|
-
```c
|
|
675
|
-
// Platform detection
|
|
676
|
-
#if defined(_WIN32) || defined(_WIN64)
|
|
677
|
-
#define PLATFORM_WINDOWS 1
|
|
678
|
-
#elif defined(__linux__)
|
|
679
|
-
#define PLATFORM_LINUX 1
|
|
680
|
-
#elif defined(__APPLE__)
|
|
681
|
-
#define PLATFORM_MACOS 1
|
|
682
|
-
#else
|
|
683
|
-
#define PLATFORM_UNIX 1
|
|
684
|
-
#endif
|
|
685
|
-
|
|
686
|
-
// Platform-specific includes
|
|
687
|
-
#ifdef PLATFORM_WINDOWS
|
|
688
|
-
#define WIN32_LEAN_AND_MEAN
|
|
689
|
-
#include <windows.h>
|
|
690
|
-
#include <winsock2.h>
|
|
691
|
-
#include <ws2tcpip.h>
|
|
692
|
-
#pragma comment(lib, "ws2_32.lib")
|
|
693
|
-
#else
|
|
694
|
-
#include <unistd.h>
|
|
695
|
-
#include <sys/socket.h>
|
|
696
|
-
#include <netinet/in.h>
|
|
697
|
-
#include <pthread.h>
|
|
698
|
-
#include <errno.h>
|
|
699
|
-
#endif
|
|
700
|
-
|
|
701
|
-
// Cross-platform sleep
|
|
702
|
-
static inline void sleep_ms(unsigned int ms) {
|
|
703
|
-
#ifdef PLATFORM_WINDOWS
|
|
704
|
-
Sleep(ms);
|
|
705
|
-
#else
|
|
706
|
-
usleep(ms * 1000);
|
|
707
|
-
#endif
|
|
708
|
-
}
|
|
709
|
-
|
|
710
|
-
// Cross-platform thread type
|
|
711
|
-
#ifdef PLATFORM_WINDOWS
|
|
712
|
-
typedef HANDLE thread_t;
|
|
713
|
-
typedef DWORD thread_ret_t;
|
|
714
|
-
#else
|
|
715
|
-
typedef pthread_t thread_t;
|
|
716
|
-
typedef void* thread_ret_t;
|
|
717
|
-
#endif
|
|
718
|
-
|
|
719
|
-
// Cross-platform socket type
|
|
720
|
-
#ifdef PLATFORM_WINDOWS
|
|
721
|
-
typedef SOCKET socket_t;
|
|
722
|
-
#define INVALID_SOCKET_VAL INVALID_SOCKET
|
|
723
|
-
#define close_socket(s) closesocket(s)
|
|
724
|
-
#else
|
|
725
|
-
typedef int socket_t;
|
|
726
|
-
#define INVALID_SOCKET_VAL (-1)
|
|
727
|
-
#define close_socket(s) close(s)
|
|
728
|
-
#endif
|
|
729
|
-
```
|
|
730
|
-
|
|
731
|
-
---
|
|
732
|
-
|
|
733
391
|
## ✅ Production Checklist
|
|
734
392
|
|
|
735
393
|
- [ ] No memory leaks (Valgrind clean)
|
|
@@ -745,4 +403,4 @@ static inline void sleep_ms(unsigned int ms) {
|
|
|
745
403
|
|
|
746
404
|
---
|
|
747
405
|
|
|
748
|
-
_DOMYH Awesome Code
|
|
406
|
+
_DOMYH Awesome Code C Language (ISO C23) 2025-2026_
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
## 🏗️ Data Structures
|
|
2
|
+
|
|
3
|
+
### Struct Patterns
|
|
4
|
+
|
|
5
|
+
```c
|
|
6
|
+
// ✅ Opaque pointer pattern (information hiding)
|
|
7
|
+
// In header file (user.h)
|
|
8
|
+
typedef struct User User;
|
|
9
|
+
User *user_create(const char *name);
|
|
10
|
+
void user_destroy(User *user);
|
|
11
|
+
const char *user_get_name(const User *user);
|
|
12
|
+
|
|
13
|
+
// In implementation file (user.c)
|
|
14
|
+
struct User {
|
|
15
|
+
char *name;
|
|
16
|
+
int id;
|
|
17
|
+
// Private implementation details
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
User *user_create(const char *name) {
|
|
21
|
+
User *u = malloc(sizeof(*u));
|
|
22
|
+
if (!u) return NULL;
|
|
23
|
+
|
|
24
|
+
u->name = strdup(name);
|
|
25
|
+
if (!u->name) {
|
|
26
|
+
free(u);
|
|
27
|
+
return NULL;
|
|
28
|
+
}
|
|
29
|
+
u->id = generate_id();
|
|
30
|
+
return u;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
void user_destroy(User *user) {
|
|
34
|
+
if (user) {
|
|
35
|
+
free(user->name);
|
|
36
|
+
free(user);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Flexible Array Member (FAM)
|
|
42
|
+
|
|
43
|
+
```c
|
|
44
|
+
// ✅ C99+ pattern for variable-length data
|
|
45
|
+
struct Message {
|
|
46
|
+
size_t length;
|
|
47
|
+
uint32_t type;
|
|
48
|
+
char data[]; // Flexible array member (MUST be last)
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
struct Message *create_message(const char *text) {
|
|
52
|
+
size_t len = strlen(text) + 1;
|
|
53
|
+
struct Message *msg = malloc(sizeof(*msg) + len);
|
|
54
|
+
if (!msg) return NULL;
|
|
55
|
+
|
|
56
|
+
msg->length = len;
|
|
57
|
+
msg->type = MSG_TYPE_TEXT;
|
|
58
|
+
memcpy(msg->data, text, len);
|
|
59
|
+
return msg;
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
---
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
## 📦 Memory Management Patterns
|
|
2
|
+
|
|
3
|
+
### RAII Pattern (Resource Acquisition Is Initialization)
|
|
4
|
+
|
|
5
|
+
```c
|
|
6
|
+
// ✅ Cleanup attribute (GCC/Clang extension, common in Linux kernel)
|
|
7
|
+
#define AUTO_FREE __attribute__((cleanup(cleanup_free)))
|
|
8
|
+
|
|
9
|
+
static void cleanup_free(void *p) {
|
|
10
|
+
free(*(void **)p);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
void process_data(void) {
|
|
14
|
+
AUTO_FREE char *buf = malloc(1024);
|
|
15
|
+
if (!buf) return;
|
|
16
|
+
|
|
17
|
+
// buf automatically freed when function returns
|
|
18
|
+
// No need for explicit free()
|
|
19
|
+
}
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### Error Handling with goto (Linux Kernel Style)
|
|
23
|
+
|
|
24
|
+
```c
|
|
25
|
+
// ✅ Standard C pattern for resource cleanup
|
|
26
|
+
int process_file(const char *path) {
|
|
27
|
+
int ret = 0;
|
|
28
|
+
FILE *fp = NULL;
|
|
29
|
+
char *buf = NULL;
|
|
30
|
+
|
|
31
|
+
fp = fopen(path, "r");
|
|
32
|
+
if (!fp) {
|
|
33
|
+
ret = -errno;
|
|
34
|
+
goto out;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
buf = malloc(BUFFER_SIZE);
|
|
38
|
+
if (!buf) {
|
|
39
|
+
ret = -ENOMEM;
|
|
40
|
+
goto out_close;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// Do processing...
|
|
44
|
+
if (some_error) {
|
|
45
|
+
ret = -EINVAL;
|
|
46
|
+
goto out_free;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Success path
|
|
50
|
+
ret = 0;
|
|
51
|
+
|
|
52
|
+
out_free:
|
|
53
|
+
free(buf);
|
|
54
|
+
out_close:
|
|
55
|
+
fclose(fp);
|
|
56
|
+
out:
|
|
57
|
+
return ret;
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Memory Debugging
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
# Valgrind (memory leak detection)
|
|
65
|
+
valgrind --leak-check=full ./program
|
|
66
|
+
|
|
67
|
+
# AddressSanitizer (compile-time)
|
|
68
|
+
gcc -fsanitize=address -g program.c -o program
|
|
69
|
+
|
|
70
|
+
# UndefinedBehaviorSanitizer
|
|
71
|
+
gcc -fsanitize=undefined -g program.c -o program
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
---
|