void add_pre_buffer(const char *fmt, ...) { va_list args; unsigned int size; struct token *begin, *end; char buffer[4096]; va_start(args, fmt); size = vsnprintf(buffer, sizeof(buffer), fmt, args); va_end(args); begin = tokenize_buffer(buffer, size, &end); if (!pre_buffer_begin) pre_buffer_begin = begin; if (pre_buffer_end) pre_buffer_end->next = begin; pre_buffer_end = end; }
static rc_t tokenize_file_and_progname_into_argv( const char * filename, const char * progname, int * argc, char *** argv ) { rc_t rc2, rc = 0; VFSManager *vfs_mgr; ( *argv ) = NULL; ( *argc ) = 0; rc = VFSManagerMake ( &vfs_mgr ); if ( rc != 0 ) LOGERR( klogInt, rc, "VFSManagerMake() failed" ); else { VPath * vfs_path; rc = VFSManagerMakePath ( vfs_mgr, &vfs_path, "%s", filename ); if ( rc != 0 ) LOGERR( klogInt, rc, "VPathMake() failed" ); else { struct KFile const *my_file; rc = VFSManagerOpenFileRead ( vfs_mgr, &my_file, vfs_path ); if ( rc != 0 ) LOGERR( klogInt, rc, "VFSManagerOpenFileRead() failed" ); else { tokenzr *t; uint64_t pos = 0; char buffer[ 4096 + 1 ]; size_t num_read; rc = make_tokenzr( &t, argc, argv ); if ( rc != 0 ) LOGERR( klogInt, rc, "make_tokenzr() failed" ); else { if ( progname != NULL ) rc = add_string_to_argv( t, progname, string_size( progname ) ); if ( rc == 0 ) { do { rc = KFileRead ( my_file, pos, buffer, ( sizeof buffer ) - 1, &num_read ); if ( rc != 0 ) LOGERR( klogInt, rc, "KFileRead() failed" ); else if ( num_read > 0 ) { buffer[ num_read ] = 0; rc = tokenize_buffer( t, buffer, num_read ); if ( rc != 0 ) LOGERR( klogInt, rc, "tokenize_buffer() failed" ); pos += num_read; } } while ( rc == 0 && num_read > 0 ); } if ( rc == 0 && t->used > 0 ) { rc = add_token_to_argv( t ); if ( rc != 0 ) LOGERR( klogInt, rc, "add_token_to_argv() failed" ); } free_tokenzr( t ); } rc2 = KFileRelease ( my_file ); if ( rc2 != 0 ) LOGERR( klogInt, rc2, "KFileRelease() failed" ); } rc2 = VPathRelease ( vfs_path ); if ( rc2 != 0 ) LOGERR( klogInt, rc2, "VPathRelease() failed" ); } rc2 = VFSManagerRelease ( vfs_mgr ); if ( rc2 != 0 ) LOGERR( klogInt, rc2, "VFSManagerRelease() failed" ); } return rc; }