A modern Music Player Daemon based on Rockbox open source high quality audio player
libadwaita audio rust zig deno mpris rockbox mpd
at master 80 lines 2.2 kB view raw
1/*************************************************************************** 2 * __________ __ ___. 3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___ 4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / 5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < 6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ 7 * \/ \/ \/ \/ \/ 8 * $Id$ 9 * 10 * Copyright (C) 2002 by Gary Czvitkovicz 11 * 12 * This program is free software; you can redistribute it and/or 13 * modify it under the terms of the GNU General Public License 14 * as published by the Free Software Foundation; either version 2 15 * of the License, or (at your option) any later version. 16 * 17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 18 * KIND, either express or implied. 19 * 20 ****************************************************************************/ 21 22/* 23 * Minimal printf and snprintf formatting functions 24 * 25 * These support %c %s %l %d %u and %x(%p) 26 * Field width and zero-padding flag only 27 */ 28 29#include <stdio.h> 30#include <stdarg.h> 31#include <stdbool.h> 32#include <limits.h> 33#include "format.h" 34 35struct for_snprintf { 36 unsigned char *ptr; /* where to store it */ 37 size_t bytes; /* amount already stored */ 38 size_t max; /* max amount to store */ 39}; 40 41static int sprfunc(void *ptr, unsigned char letter) 42{ 43 struct for_snprintf *pr = (struct for_snprintf *)ptr; 44 if(pr->bytes < pr->max) { 45 *pr->ptr = letter; 46 pr->ptr++; 47 pr->bytes++; 48 return true; 49 } 50 return false; /* filled buffer */ 51} 52 53 54int snprintf(char *buf, size_t size, const char *fmt, ...) 55{ 56 int len; 57 va_list ap; 58 59 va_start(ap, fmt); 60 len = vsnprintf(buf, size, fmt, ap); 61 va_end(ap); 62 63 return len; 64} 65 66int vsnprintf(char *buf, size_t size, const char *fmt, va_list ap) 67{ 68 struct for_snprintf pr; 69 70 pr.ptr = (unsigned char *)buf; 71 pr.bytes = 0; 72 pr.max = size; 73 74 format(sprfunc, &pr, fmt, ap); 75 76 /* make sure it ends with a trailing zero */ 77 pr.ptr[(pr.bytes < pr.max) ? 0 : -1] = '\0'; 78 79 return pr.bytes; 80}