LINUX.ORG.RU

История изменений

Исправление vertexua, (текущая версия) :

#include <dirent.h>
#include <stdio.h>

#include <glib.h>

void g_string_free_default(GString* data) {
        g_string_free(data, TRUE);
}

void print_g_string(GString* gstr, gpointer userdata) {
        printf("%s\n", gstr->str);
}

int main(int argc, char* argv[]) {
        if (argc != 2) {
                fprintf(stderr, "Usage %s DIR\n", argv[0]);
                return 1;
        }
        DIR* dir = opendir(argv[1]);
        if (dir==NULL) {
                perror("opendir");
                return 1;
        }

        GPtrArray* array = g_ptr_array_new_with_free_func(
                (GDestroyNotify)g_string_free_default);

        for (struct dirent* ent = readdir(dir); ent != NULL; ent = readdir(dir)) {
                g_ptr_array_add(array, g_string_new(ent->d_name));
        }
        closedir(dir);

        g_ptr_array_foreach(array, (GFunc)print_g_string, NULL);

        g_ptr_array_free(array, TRUE);
        return 0;


}

;) Вот он код на С, в стиле функционального программирования. Шутка конечно.

Но тебе незачет за такой банальный подход, мол вот фичи в языке нету сейчас заставлю кого-то написать короткий код который в это упирается.

Исходная версия vertexua, :

#include <dirent.h>
#include <stdio.h>

#include <glib.h>

void g_string_free_default(GString* data) {
        g_string_free(data, TRUE);
}

void print_g_string(gpointer ptr, gpointer userdata) {
        printf("%s\n", ((GString*)ptr)->str);
}

int main(int argc, char* argv[]) {
        if (argc != 2) {
                fprintf(stderr, "Usage %s DIR\n", argv[0]);
                return 1;
        }
        DIR* dir = opendir(argv[1]);
        if (dir==NULL) {
                perror("opendir");
                return 1;
        }

        GPtrArray* array = g_ptr_array_new_with_free_func(
                (GDestroyNotify)g_string_free_default);

        for (struct dirent* ent = readdir(dir); ent != NULL; ent = readdir(dir)) {
                g_ptr_array_add(array, g_string_new(ent->d_name));
        }
        closedir(dir);

        g_ptr_array_foreach(array, print_g_string, NULL);

        g_ptr_array_free(array, TRUE);
        return 0;


}

;) Вот он код на С, в стиле функционального программирования. Шутка конечно.

Но тебе незачет за такой банальный подход, мол вот фичи в языке нету сейчас заставлю кого-то написать короткий код который в это упирается.