/* Copyright (C) 2015-2020, Dirk Krause SPDX-License-Identifier: BSD-3-Clause */ /* WARNING: This file was generated by the dkct program (see http://dktools.sourceforge.net/ for details). Changes you make here will be lost if dkct is run again! You should modify the original source and run dkct on it. Original source: dk4maodo.ctr */ /** @file dk4maodo.c The dk4maodo module. */ #line 63 "dk4maodo.ctr" #include "dk4conf.h" #include "dk4maodo.h" #if DK4_HAVE_ASSERT_H #ifndef ASSERT_H_INCLUDED #include #define ASSERT_H_INCLUDED 1 #endif #endif #line 76 "dk4maodo.ctr" int dk4ma_write_octal_unsigned( dkChar *dptr, size_t sz, dk4_um_t val, size_t padsz, dk4_er_t *erp ) { dkChar buf[4*sizeof(dk4_um_t)+16]; /* Buffer */ size_t used = 0; /* Number of used chars */ size_t i = 0; /* Copy buffer to destination */ int cc = 1; /* Flag: Can continue */ int err = 0; /* Flag: Error occured */ int back = 0; /* Result */ #if DK4_USE_ASSERT assert(NULL != dptr); assert(0 < sz); #endif if ((NULL != dptr) && (0 < sz)) { *dptr = dkT('\0'); } if (1 == padsz) { padsz = (8 * sizeof(dk4_um_t)) / 3; if (0 != ((8 * sizeof(dk4_um_t)) % 3)) { padsz++; } } if ((NULL != dptr) && (0 < sz) && (padsz < sz)) { do { switch ((int)(val % (dk4_um_t)8UL)) { case 0: { if (used < sizeof(buf)) { buf[used++] = dkT('0'); } else { err = 1; } } break; case 1: { if (used < sizeof(buf)) { buf[used++] = dkT('1'); } else { err = 1; } } break; case 2: { if (used < sizeof(buf)) { buf[used++] = dkT('2'); } else { err = 1; } } break; case 3: { if (used < sizeof(buf)) { buf[used++] = dkT('3'); } else { err = 1; } } break; case 4: { if (used < sizeof(buf)) { buf[used++] = dkT('4'); } else { err = 1; } } break; case 5: { if (used < sizeof(buf)) { buf[used++] = dkT('5'); } else { err = 1; } } break; case 6: { if (used < sizeof(buf)) { buf[used++] = dkT('6'); } else { err = 1; } } break; case 7: { if (used < sizeof(buf)) { buf[used++] = dkT('7'); } else { err = 1; } } break; } val = val / (dk4_um_t)8UL; if ((dk4_um_t) 0UL == val) { cc = 0; } } while ((1 == cc) && (0 == err)); if (0 == err) { if (used < sz) { if ((0 < padsz) && (used < padsz)) { for (i = 0; i < (padsz - used); i++) { dptr[i] = dkT('0'); } for (i = 0; i < used; i++) { dptr[padsz - 1 -i] = buf[i]; } dptr[padsz] = dkT('\0'); back = 1; } else { for (i = 0; i < used; i++) { dptr[i] = buf[used - 1 - i]; } dptr[used] = dkT('\0'); back = 1; } } else { dk4error_set_simple_error_code(erp, DK4_E_BUFFER_TOO_SMALL); } } else { #line 154 "dk4maodo.ctr" dk4error_set_simple_error_code(erp, DK4_E_BUG); } } else { dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); } return back; }