Субъективный Си / Говнокод #10400 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
+ (void) playMovieWithResourceFile: (NSString *) file
{
    const char *source = [ file cStringUsingEncoding: [NSString defaultCStringEncoding] ];
    size_t length = strlen( source );
    
    char *str = malloc( sizeof( char) * (length + 1)  );
    memcpy( str, source, sizeof (char) * (length + 1) );
    
    char *type = strstr( str, "."); 
    *type = 0;
    type++; //< now we have extension in type, and name in str cStrings
    
    NSAutoreleasePool *pool = [NSAutoreleasePool new];
    NSString *sName, *sType;
	
    sName = [ NSString stringWithUTF8String: str ];
    sType = [ NSString stringWithUTF8String: type];
    [self playMovieWithName: sName Type: sType];
    
    // free str, but do not free type - it is a part of str
    free( str );
    
    [pool release];    
}

Вроде бы серьезный проект cocos2d-extensions https://github.com/cocos2d/cocos2d-iphone-extensions
Отрезаем расширение у файла :)

Или я что-то не понимаю…

Запостил: pilot34 pilot34, (Updated )

Комментарии (10) RSS

  • Вот, Тарас, вот тебе пример программы, в которой совершенно без повода используют байтоёбство!

    Автор пишет так, как будто в NSString нет какого-нибудь substring'а. Я вот objective C совершенно не знаю, но предполагаю, что он там есть. А в лучшем случае там где-то в модулях есть и разбиение пути на папку, имя файла и расширение...

    > free str, but do not free type - it is a part of str
    Какой дельный комментарий, я бы никогда не догадался об этом из строки 9, и освободил type...
    Ответить
      • > *type = 0;
        Разбиение строки на две путем выкалывания байта. Чем не байтоёбство?
        Ответить
        • Разбиение строки на подстроки через выкалывание - неплохой метод.
          Ответить
          • Метод то хороший, но не в случаях, когда ради этого приходится копировать строку в новый буфер, а потом еще раз копировать куски.

            Тупой как валенок код с двумя сабстрингами в данном случае был бы и проще, и понятней и эффективней.

            Каждому алгоритму есть своё место.
            Ответить

Добавить комментарий

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8