14887Schin /*********************************************************************** 24887Schin * * 34887Schin * This software is part of the ast package * 4*8462SApril.Chin@Sun.COM * Copyright (c) 1985-2008 AT&T Intellectual Property * 54887Schin * and is licensed under the * 64887Schin * Common Public License, Version 1.0 * 7*8462SApril.Chin@Sun.COM * by AT&T Intellectual Property * 84887Schin * * 94887Schin * A copy of the License is available at * 104887Schin * http://www.opensource.org/licenses/cpl1.0.txt * 114887Schin * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) * 124887Schin * * 134887Schin * Information and Software Systems Research * 144887Schin * AT&T Research * 154887Schin * Florham Park NJ * 164887Schin * * 174887Schin * Glenn Fowler <gsf@research.att.com> * 184887Schin * David Korn <dgk@research.att.com> * 194887Schin * Phong Vo <kpv@research.att.com> * 204887Schin * * 214887Schin ***********************************************************************/ 224887Schin #include "sfhdr.h" 234887Schin 244887Schin /* Print data with a given format 254887Schin ** 264887Schin ** Written by Kiem-Phong Vo. 274887Schin */ 284887Schin 294887Schin #if __STD_C 304887Schin int sfprintf(Sfio_t* f, const char* form, ...) 314887Schin #else 324887Schin int sfprintf(va_alist) 334887Schin va_dcl 344887Schin #endif 354887Schin { 364887Schin va_list args; 374887Schin reg int rv; 384887Schin 394887Schin #if __STD_C 404887Schin va_start(args,form); 414887Schin #else 424887Schin reg Sfio_t* f; 434887Schin reg char* form; 444887Schin va_start(args); 454887Schin f = va_arg(args,Sfio_t*); 464887Schin form = va_arg(args,char*); 474887Schin #endif 484887Schin rv = sfvprintf(f,form,args); 494887Schin 504887Schin va_end(args); 514887Schin return rv; 524887Schin } 534887Schin 544887Schin #if __STD_C 554887Schin ssize_t sfvsprintf(char* s, size_t n, const char* form, va_list args) 564887Schin #else 574887Schin ssize_t sfvsprintf(s, n, form, args) 584887Schin char* s; 594887Schin size_t n; 604887Schin char* form; 614887Schin va_list args; 624887Schin #endif 634887Schin { 644887Schin Sfio_t *f; 654887Schin ssize_t rv; 664887Schin 674887Schin /* make a temp stream */ 684887Schin if(!(f = sfnew(NIL(Sfio_t*),NIL(char*),(size_t)SF_UNBOUND, 694887Schin -1,SF_WRITE|SF_STRING)) ) 704887Schin return -1; 714887Schin 72*8462SApril.Chin@Sun.COM if((rv = sfvprintf(f,form,args)) >= 0 ) 73*8462SApril.Chin@Sun.COM { if(s && n > 0) 74*8462SApril.Chin@Sun.COM { if((rv+1) >= n) 75*8462SApril.Chin@Sun.COM n--; 76*8462SApril.Chin@Sun.COM else 77*8462SApril.Chin@Sun.COM n = rv; 78*8462SApril.Chin@Sun.COM memcpy(s, f->data, n); 79*8462SApril.Chin@Sun.COM s[n] = 0; 80*8462SApril.Chin@Sun.COM } 81*8462SApril.Chin@Sun.COM _Sfi = rv; 824887Schin } 834887Schin 844887Schin sfclose(f); 854887Schin 864887Schin return rv; 874887Schin } 884887Schin 894887Schin #if __STD_C 904887Schin ssize_t sfsprintf(char* s, size_t n, const char* form, ...) 914887Schin #else 924887Schin ssize_t sfsprintf(va_alist) 934887Schin va_dcl 944887Schin #endif 954887Schin { 964887Schin va_list args; 974887Schin ssize_t rv; 984887Schin 994887Schin #if __STD_C 1004887Schin va_start(args,form); 1014887Schin #else 1024887Schin reg char* s; 1034887Schin reg size_t n; 1044887Schin reg char* form; 1054887Schin va_start(args); 1064887Schin s = va_arg(args,char*); 1074887Schin n = va_arg(args,size_t); 1084887Schin form = va_arg(args,char*); 1094887Schin #endif 1104887Schin 1114887Schin rv = sfvsprintf(s,n,form,args); 1124887Schin va_end(args); 1134887Schin 1144887Schin return rv; 1154887Schin } 116