コード例 #1
0
static int make_file_list (void)
{
    const char *datlist = "datalist";
    FILE *fp;
    char line[32];
    int err = 0;

    fp = fopen(datlist, "r");

    if (fp == NULL) {
	fprintf(stderr, "Couldn't open '%s'\n", datlist);
	return 1;
    }

    while (fgets(line, sizeof line, fp)) {
	tail_strip(line);
	if (!is_blank(line)) {
	    if (add_file_to_list(line)) {
		err = 1;
		break;
	    }
	}
    }

    fclose(fp);

    return err;
}
コード例 #2
0
ファイル: hmdpbuilder.c プロジェクト: ablochha/Resume
// Reads a body from a HMDP message
// @param buffer the remaining buffer
// @return a linked list containing the body of the message
csv_record* read_body(char **buffer) {
    
    csv_record *list = NULL;    // Root of the linked list
    
    char *filename;             // Filename to be read
    char *checksum;             // Checksum to be read
    
    // Continously read more of the message
    while (1) {
        
        filename = strsep(buffer, "\n\0");
        
        // Stop reading if we run out of information
        if (filename == NULL) {
            
            break;
            
        } //end if
        
        checksum = strsep(buffer, "\n\0");

        // Stop reading if we run out of information
        if (checksum == NULL) {
            
            break;
            
        } //end if
        
        add_file_to_list(&list, strdup(filename), strdup(checksum));
        
    } //end while
    
    return list;
    
} //end read_body
コード例 #3
0
ファイル: execute-command.c プロジェクト: daifu/OSProject
// add io file of c into dependencies list 
// recursive call to add all the file from sub-command to the dependencies list too
void
add_dependencies(command_t c, command_list_t cmd_list) 
{
	if (c->type == SIMPLE_COMMAND)
	{
		if(c->input != 0)
		{
			add_file_to_list(c->input, cmd_list, IS_READ);
			//if(cmd_list->file_list == NULL)
				//printf("NULL in add_dependencies\n");
		}
		if(c->output != 0)
		{
			add_file_to_list(c->output, cmd_list, IS_WRITTEN);
		}
		int i = 1;
		while( c->u.word[i]!= NULL)
    {
			add_file_to_list(c->u.word[i], cmd_list, IS_READ);
			i++;
		}
	}
	else if (c->type == SUBSHELL_COMMAND)
	{
		if(c->input != 0)
		{
			add_file_to_list(c->input, cmd_list, IS_READ);
		}
		if(c->output != 0)
		{
			add_file_to_list(c->output, cmd_list, IS_WRITTEN);
		}
		add_dependencies(c->u.subshell_command, cmd_list);
	}
	else if (c->type == AND_COMMAND || c->type == OR_COMMAND || c->type == PIPE_COMMAND || c->type == SEQUENCE_COMMAND)
	{
		add_dependencies(c->u.command[0], cmd_list);
		add_dependencies(c->u.command[1], cmd_list);
	}
	else // unregconized command type
	{
		error(1, 0, "Error: unregconized command type %d", c->type);
	}
}
コード例 #4
0
ファイル: init_parsing.c プロジェクト: athomaj/rtracer
int		parsing(t_all *infos, char *file)
{
  FILE		*fd;
  int		err;

  if (add_file_to_list(&infos->files, file) == -1)
    {
      fprintf(stderr, "%s : file already opened\n", file);
      return (-1);
    }
  if ((fd = fopen(infos->files->name, "r")) == NULL)
    return (error_function(OPEN, -1, -1));
  err = start_parsing(infos, fd, infos->files->name);
  if (fclose(fd) == -1)
    return (error_function(CLOSE, -1, -1));
  return ((err == -1) ? err : 0);
}
コード例 #5
0
ファイル: tab_scratch.c プロジェクト: dss91/omgps
void do_screenshot()
{
	#define SS_PREFIX "Save screenshot: "
	struct stat st;
	char buf[256];

	int i = 1;
	do {
		snprintf(buf, sizeof(buf), "%s/%04d%s", g_context.screenshot_dir, i++, SCREENSHOT_FILE_EXT);
	} while (stat(buf, &st) == 0);

	GError *err = NULL;

	GdkPixbuf *pixbuf = gdk_pixbuf_get_from_drawable(NULL, g_view.da->window, NULL,
		g_view.fglayer.visible.x, g_view.fglayer.visible.y, 0, 0,
		g_view.fglayer.visible.width, g_view.fglayer.visible.height);

	if (pixbuf == NULL) {
		warn_dialog(SS_PREFIX"unable to capture from window");
		return;
	}

	gboolean ret = gdk_pixbuf_save (pixbuf, buf, SCREENSHOT_FILE_TYPE, &err, "tEXt::Software", "omgps", NULL);
	gdk_pixbuf_unref(pixbuf);

	if (ret) {
		char buf1[128];
		snprintf(buf1, sizeof(buf1), SS_PREFIX"saved as: %s", buf);

		GtkTreeIter iter;
		gtk_list_store_insert (filelist_store, &iter, 0);
		add_file_to_list(&iter, buf, &buf[strlen(g_context.screenshot_dir) + 1]);
		info_dialog(buf1);
	} else {
		snprintf(buf, sizeof(buf), SS_PREFIX"unable to save, error=%s", err->message);
		g_error_free (err);
		warn_dialog(buf);
	}
}
コード例 #6
0
ファイル: tab_scratch.c プロジェクト: dss91/omgps
GtkWidget * scratch_tab_create()
{
	GtkWidget *vbox = gtk_vbox_new(FALSE, 5);

	/* file list treeview */

	filelist_treeview = gtk_tree_view_new ();
	gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (filelist_treeview), TRUE);
	gtk_tree_view_set_reorderable(GTK_TREE_VIEW (filelist_treeview), FALSE);

	GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(filelist_treeview));
	gtk_tree_selection_set_mode (sel, GTK_SELECTION_SINGLE);

	g_signal_connect (G_OBJECT(filelist_treeview), "cursor-changed",
		G_CALLBACK (filelist_treeview_row_selected), NULL);

	filelist_treeview_sw = new_scrolled_window (NULL);
	gtk_container_add (GTK_CONTAINER (filelist_treeview_sw), filelist_treeview);

	/* add columns to the tree view */
	GtkCellRenderer *renderer;
	GtkTreeViewColumn *col;
	int i;
	int col_count = sizeof (filelist_treeview_col_names) / sizeof (char *);

	for (i=0; i<col_count; i++) {
		renderer = gtk_cell_renderer_text_new();
		col = gtk_tree_view_column_new_with_attributes (filelist_treeview_col_names[i],
			renderer, "text", i, NULL);
		if (i == 0) {
			gtk_tree_view_column_set_clickable(col, TRUE);
			gtk_tree_view_column_set_sort_order(col, GTK_SORT_DESCENDING);
			gtk_tree_view_column_set_sort_column_id(col, 0);
			gtk_tree_view_column_set_sort_indicator(col, TRUE);
		} else {
			gtk_tree_view_column_set_clickable(col, FALSE);
		}
		gtk_tree_view_append_column (GTK_TREE_VIEW(filelist_treeview), col);
	}

	filelist_store = gtk_list_store_new (col_count,	G_TYPE_STRING, G_TYPE_STRING);
	GtkTreeSortable *sortable = GTK_TREE_SORTABLE(filelist_store);
	gtk_tree_sortable_set_sort_column_id(sortable, 0, GTK_SORT_DESCENDING);

	gtk_tree_view_set_model(GTK_TREE_VIEW(filelist_treeview), GTK_TREE_MODEL(filelist_store));

	GtkWidget *hbox = gtk_hbox_new(TRUE, 5);

	GtkWidget *scratch_button = gtk_button_new_with_label("Scratch on map");
	g_signal_connect (G_OBJECT (scratch_button), "clicked",
		G_CALLBACK (scratch_button_clicked), NULL);

	view_button = gtk_button_new_with_label("View");
	g_signal_connect (G_OBJECT(view_button), "clicked",
		G_CALLBACK (view_button_clicked), NULL);

	delete_button = gtk_button_new_with_label("Delete");
	g_signal_connect (G_OBJECT(delete_button), "clicked",
		G_CALLBACK (delete_button_clicked), NULL);

	gtk_container_add(GTK_CONTAINER(hbox), view_button);
	gtk_container_add(GTK_CONTAINER(hbox), delete_button);
	gtk_container_add(GTK_CONTAINER(hbox), scratch_button);

	gtk_box_pack_start(GTK_BOX(vbox), filelist_treeview_sw, TRUE, TRUE, 0);
	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);

	/* populate files into filelist treeview */

	GtkTreeIter iter;
	struct dirent *ep;
	char buf[256];
	char *file_path = NULL;
	int len, ext_len = strlen(SCREENSHOT_FILE_EXT);
	char *fname;
	struct stat st;

	DIR *dp = opendir (g_context.screenshot_dir);
	if (dp == NULL) {
		if (stat(buf, &st) == 0)
			warn_dialog("unable to list screenshot files");
	} else {
		while ((ep = readdir (dp))) {
			fname = ep->d_name;
			len = strlen(fname);
			if (ep->d_type == DT_REG && len > ext_len &&
				(strncmp(&fname[len-ext_len], SCREENSHOT_FILE_EXT, ext_len) == 0)) {

				gtk_list_store_prepend (filelist_store, &iter);

				file_path = get_full_path(buf, sizeof(buf), fname);
				add_file_to_list(&iter, file_path, fname);
			}
		}
		closedir (dp);
	}

	notebook = gtk_notebook_new();
	gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook), FALSE);
	gtk_notebook_set_show_border(GTK_NOTEBOOK(notebook), FALSE);

	GtkWidget *label;

	label = gtk_label_new("screen shot list");
	gtk_notebook_append_page (GTK_NOTEBOOK (notebook), vbox, label);

	GtkWidget *image_box = gtk_vbox_new(FALSE, 0);
	screenshot_label = gtk_label_new("");
	screenshot_image = gtk_image_new();
	gtk_box_pack_start(GTK_BOX(image_box), screenshot_label, FALSE, FALSE, 0);

	GtkWidget *sw = new_scrolled_window (screenshot_image);

	/* stretch */
	gtk_box_pack_start(GTK_BOX(image_box), sw, TRUE, TRUE, 0);

	label = gtk_label_new("view screen shot");
	gtk_notebook_append_page (GTK_NOTEBOOK (notebook), image_box, label);

	return notebook;
}
コード例 #7
0
ファイル: tab_track.c プロジェクト: dss91/omgps
/**
 * May be called by polling thread or main thread. protected by gdk UI lock.
 */
int track_save(gboolean all, gboolean _free)
{
	int i, count = 0;

	if (! tracks || tracks->count == 0)
		goto END;

	struct stat st;
	gboolean empty = (stat(track_file_path, &st) < 0) || st.st_size == 0;

	/* append, create file if not exists */
	FILE *fp = fopen(track_file_path, "a");

	if (! fp) {
		log_warn("can't open track records file: %s", track_file_path);
		return 0;
	}

	if (empty) {
		fprintf(fp, TRACK_HEAD_LABEL_1"%-10u\n"
			TRACK_HEAD_LABEL_2"%-10u\n"
			TRACK_HEAD_LABEL_3"%-10u\n", (U4)tracks->starttime, 0u, 0u);
	}

	count = all? tracks->count : tracks->count / 3;
	for (i=0; i<count; i++) {
		fprintf(fp, "%f\t%f\t%u\n", tracks->tps[i].wgs84.lat,
			tracks->tps[i].wgs84.lon, tracks->tps[i].time_offset);
	}

	fclose(fp);

	/* update end time and count */
	fp = fopen(track_file_path, "r+");

	/* end time: time of last valid record */
	time_t endtime = tracks->starttime + tracks->tps[tracks->count - 1].time_offset;

	int offset = strlen(TRACK_HEAD_LABEL_1) + 11 + strlen(TRACK_HEAD_LABEL_2);
	fseek(fp, offset, SEEK_SET);
	fprintf(fp, "%-10u", (U4)endtime);
	offset += 11 + strlen(TRACK_HEAD_LABEL_3);
	fseek(fp, offset, SEEK_SET);
	fprintf(fp, "%-10u", (U4)(tracks->total_count - (tracks->count - count)));

	fclose(fp);

	/* add to list */

	if (all) {
		GtkTreeIter iter;
		gtk_list_store_insert (filelist_store, &iter, 0);
		add_file_to_list(&iter, track_file_path, track_file_name);
	}

END:

	if (_free) {
		free(tracks);
		tracks = NULL;
		free(track_file_path);
		track_file_path = NULL;
	}

	return count;
}
コード例 #8
0
ファイル: tab_track.c プロジェクト: dss91/omgps
static GtkWidget * create_replay_pane()
{
	GtkWidget *vbox = gtk_vbox_new(FALSE, 5);

	/* file list treeview */

	filelist_treeview = gtk_tree_view_new ();
	gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (filelist_treeview), TRUE);
	gtk_tree_view_set_reorderable(GTK_TREE_VIEW (filelist_treeview), FALSE);

	GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(filelist_treeview));
	gtk_tree_selection_set_mode (sel, GTK_SELECTION_SINGLE);

	g_signal_connect (G_OBJECT(filelist_treeview), "cursor-changed",
		G_CALLBACK (replay_filelist_treeview_row_selected), NULL);

	filelist_treeview_sw = new_scrolled_window (NULL);
	gtk_container_add (GTK_CONTAINER (filelist_treeview_sw), filelist_treeview);

	/* add columns to the tree view */
	GtkCellRenderer *renderer;
	GtkTreeViewColumn *col;
	int i;
	int col_count = sizeof (filelist_treeview_col_names) / sizeof (char *);

	for (i=0; i<col_count; i++) {
		renderer = gtk_cell_renderer_text_new();
		col = gtk_tree_view_column_new_with_attributes (filelist_treeview_col_names[i],
			renderer, "text", i, NULL);
		if (i == 0) {
			gtk_tree_view_column_set_clickable(col, TRUE);
			gtk_tree_view_column_set_sort_order(col, GTK_SORT_DESCENDING);
			gtk_tree_view_column_set_sort_column_id(col, 0);
			gtk_tree_view_column_set_sort_indicator(col, TRUE);
		} else {
			gtk_tree_view_column_set_clickable(col, FALSE);
		}
		gtk_tree_view_append_column (GTK_TREE_VIEW(filelist_treeview), col);
	}

	filelist_store = gtk_list_store_new (col_count,
		G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT);

	GtkTreeSortable *sortable = GTK_TREE_SORTABLE(filelist_store);
	gtk_tree_sortable_set_sort_column_id(sortable, 0, GTK_SORT_DESCENDING);

	gtk_tree_view_set_model(GTK_TREE_VIEW(filelist_treeview), GTK_TREE_MODEL(filelist_store));

	GtkWidget *hbox = gtk_hbox_new(TRUE, 5);

	replay_button = gtk_button_new_with_label("Replay");
	g_signal_connect (G_OBJECT(replay_button), "clicked",
		G_CALLBACK (replay_button_clicked), NULL);

	delete_button = gtk_button_new_with_label("Delete");
	g_signal_connect (G_OBJECT(delete_button), "clicked",
		G_CALLBACK (delete_button_clicked), NULL);

	export_gpx_button = gtk_button_new_with_label("Export .gpx");
	g_signal_connect (G_OBJECT(	export_gpx_button), "clicked",
		G_CALLBACK (export_gpx_button_clicked), NULL);

	gtk_container_add(GTK_CONTAINER(hbox), replay_button);
	gtk_container_add(GTK_CONTAINER(hbox), delete_button);
	gtk_container_add(GTK_CONTAINER(hbox), export_gpx_button);

	gtk_box_pack_start(GTK_BOX(vbox), filelist_treeview_sw, TRUE, TRUE, 0);
	gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);

	/* populate files into filelist treeview */

	GtkTreeIter iter;
	struct dirent *ep;
	char buf[256];
	char *file_path = NULL;
	int len, ext_len = strlen(TRACK_FILE_EXT);
	char *fname;

	DIR *dp = opendir (g_context.track_dir);
	if (dp == NULL) {
		warn_dialog("unable to list track record files");
	} else {
		while ((ep = readdir (dp))) {
			fname = ep->d_name;
			len = strlen(fname);
			if (ep->d_type == DT_REG && len > ext_len &&
				(strncmp(&fname[len-ext_len], TRACK_FILE_EXT, ext_len) == 0)) {

				gtk_list_store_prepend (filelist_store, &iter);

				file_path = get_full_path(buf, sizeof(buf), fname);
				add_file_to_list(&iter, file_path, fname);

				if (replay_file && strcmp(replay_file, fname) == 0)
					gtk_tree_selection_select_iter (sel, &iter);
			}
		}
		closedir (dp);
	}

	return vbox;
}
コード例 #9
0
/**
 * Reads the list of files from the host IDE runs on,
 * creates files, fills internal file table
 */
static int init_files() {
    trace("Files list initialization\n");
    int bufsize = PATH_MAX + 32;
    char buffer[bufsize];
    int success = false;
    file_elem* list = NULL;
    file_elem* tail = NULL;
    start_adding_file_data();
    while (1) {
        if( !fgets(buffer, bufsize, stdin)) {
            report_error("protocol error while reading file info: unexpected EOF\n");
            return false;
        }
        if (buffer[0] == '\n') {
            success = true;
            break;
        }
        trace("\tFile init: %s", buffer); // no trailing LF since it's in the buffer
        // remove trailing LF
        char* lf = strchr(buffer, '\n');
        if (lf) {
            *lf = 0;
        }
        if (strchr(buffer, '\r')) {
            report_error("protocol error: unexpected CR: %s\n", buffer);
            return false;
        }

        enum file_state state;
        int file_size;
        char *path;
        struct timeval file_time;
        file_time.tv_sec = file_time.tv_usec = 0;

        if (!scan_line(buffer, bufsize, &state, &file_size, &file_time, (const char**) &path)) {
            report_error("protocol error: %s\n", buffer);
            break;
        }
        trace("\t\tpath=%s size=%d state=%c (0x%x) time=%d.%d\n", path, file_size, (char) state, (char) state, file_time.tv_sec, file_time.tv_usec);

        if (state == -1) {
            report_error("protocol error: %s\n", buffer);
            break;
        } else if (state == DIRECTORY) { // directory
            create_dir(path);
        } else if (state == LINK) { // symbolic link
            char lnk_src[bufsize]; // it is followed by a line that contains the link source
            if( !fgets(lnk_src, sizeof lnk_src, stdin)) {
                report_error("protocol error while reading link info: unexpected EOF\n");
                return false;
            }
            char* lf = strchr(lnk_src, '\n');
            if (lf) {
                *lf = 0;
            }
            if (strchr(buffer, '\r')) {
                report_error("protocol error: unexpected CR: %s\n", buffer);
                return false;
            }
            create_lnk(path, lnk_src);
        } else { // plain file
            int touch = false;
            if (state == INITIAL) {
                touch = true;
            } else if (state == COPIED || state == TOUCHED) {
                touch = !file_exists(path, file_size);
            } else if (state == UNCONTROLLED || state == INEXISTENT) {
                // nothing
            } else {
                report_error("protocol error: %s\n", buffer);
            }

            enum file_state new_state = state;
            if (touch) {
                if (touch_file(path, file_size, &file_time)) {
                    new_state = TOUCHED;
                } else {
                    new_state = ERROR;
                }
            }

            if (*path == '/') {
                char real_path [PATH_MAX + 1];
                if (state == UNCONTROLLED || state == INEXISTENT) {
                    char *dir = path;
                    char *file = path;
                    // find trailing zero
                    while (*file) {
                        file++;
                    }
                    // we'll find '/' for sure - at least the starting one
                    while(*file != '/') {
                        file--;
                    }
                    if (file == path) { // the file resides in root directory
                        strcpy(real_path, path);
                    } else {
                        // NB: we modify the path! but we'll restore later
                        char *pfile_start = file; // save file start char
                        char file_start = *file;  // save file start char
                        *file = 0; // replace the '/' that separates file from dir by zero
                        file++; 
                        if (!realpath(dir, real_path)) {
                            report_unresolved_path(dir);
                            break;
                        }
                        char *p = real_path;
                        while (*p) {
                            p++;
                        }
                        *(p++) = '/';
                        strncpy(p, file, sizeof real_path - (p - real_path));
                        *pfile_start = file_start; // restore file start char
                    }
                } else {
                    if (!realpath(path, real_path)) {
                       report_unresolved_path(path);
                       break; 
                    }
                }
                trace("\t\tadding %s with state '%c' (0x%x) -> %s\n", path, (char) new_state, (char) new_state, real_path);
                add_file_data(real_path, new_state);
                // send real path to local controller
                tail = add_file_to_list(tail, path, new_state, real_path);
                //trace("\t\tadded to list %s with state '%c' (0x%x) -> %s\n", tail->filename, tail->state, tail->state, tail->real_path);
                if (list == NULL) {
                    list = tail;
                }
            } else {
                report_error("protocol error: %s is not absoulte\n", path);
                break;
            }
        }
    }
    stop_adding_file_data();
    trace("Files list initialization done\n");
    if (success) {
        // send info about touched files which were passed as copied files
        tail = list;
        while (tail != NULL) {
            fprintf(stdout, "*%c%s\n%s\n", tail->state, tail->filename, tail->real_path);
            fflush(stdout);
            tail = tail->next;
        }
        free_file_list(list);
        // empty line as indication of finished files list
        fprintf(stdout, "\n");
        fflush(stdout);
    }
    return success;
}