Changeset 8247 for trunk/libtransmission/utils.c
- Timestamp:
- Apr 16, 2009, 9:00:48 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/libtransmission/utils.c
r8087 r8247 1353 1353 tr_utf8clean( const char * str, int max_len, tr_bool * err ) 1354 1354 { 1355 const char zero = '\0';1356 1355 char * ret; 1357 struct evbuffer * buf = evbuffer_new( );1358 1356 const char * end; 1357 1358 if( max_len < 0 ) 1359 max_len = (int) strlen( str ); 1359 1360 1360 1361 if( err != NULL ) 1361 1362 *err = FALSE; 1362 1363 1363 if( max_len < 0 ) 1364 max_len = (int) strlen( str ); 1365 1366 while( !tr_utf8_validate ( str, max_len, &end ) ) 1367 { 1368 const int good_len = end - str; 1369 1370 evbuffer_add( buf, str, good_len ); 1371 max_len -= ( good_len + 1 ); 1372 str += ( good_len + 1 ); 1373 evbuffer_add( buf, "?", 1 ); 1374 1375 if( err != NULL ) 1376 *err = TRUE; 1377 } 1378 1379 evbuffer_add( buf, str, max_len ); 1380 evbuffer_add( buf, &zero, 1 ); 1381 ret = tr_memdup( EVBUFFER_DATA( buf ), EVBUFFER_LENGTH( buf ) ); 1364 if( tr_utf8_validate( str, max_len, &end ) ) 1365 { 1366 ret = tr_strndup( str, max_len ); 1367 } 1368 else 1369 { 1370 const char zero = '\0'; 1371 struct evbuffer * buf = evbuffer_new( ); 1372 1373 while( !tr_utf8_validate ( str, max_len, &end ) ) 1374 { 1375 const int good_len = end - str; 1376 1377 evbuffer_add( buf, str, good_len ); 1378 max_len -= ( good_len + 1 ); 1379 str += ( good_len + 1 ); 1380 evbuffer_add( buf, "?", 1 ); 1381 1382 if( err != NULL ) 1383 *err = TRUE; 1384 } 1385 1386 evbuffer_add( buf, str, max_len ); 1387 evbuffer_add( buf, &zero, 1 ); 1388 ret = tr_memdup( EVBUFFER_DATA( buf ), EVBUFFER_LENGTH( buf ) ); 1389 evbuffer_free( buf ); 1390 } 1391 1382 1392 assert( tr_utf8_validate( ret, -1, NULL ) ); 1383 evbuffer_free( buf );1384 1393 return ret; 1385 1394 }
Note: See TracChangeset
for help on using the changeset viewer.