texture_file_types::format texture_file_types::determine_file_format(const char* pFilename) { dynamic_string ext; if (!file_utils::split_path(pFilename, NULL, NULL, NULL, &ext)) return cFormatInvalid; if (ext.is_empty()) return cFormatInvalid; if (ext[0] == '.') ext.right(1); for (uint i = 0; i < cNumFileFormats; i++) if (ext == get_extension(static_cast<format>(i))) return static_cast<format>(i); return cFormatInvalid; }
/* load_bitmap: * Loads a bitmap from disk. */ BITMAP *load_bitmap(AL_CONST char *filename, RGB *pal) { char tmp[32], *aext; BITMAP_TYPE_INFO *iter; ASSERT(filename); aext = uconvert_toascii(get_extension(filename), tmp); for (iter = bitmap_type_list; iter; iter = iter->next) { if (stricmp(iter->ext, aext) == 0) { if (iter->load) return iter->load(filename, pal); return NULL; } } return NULL; }
int GUIAPI LoadMyBitmapFromFile (PMYBITMAP my_bmp, RGB* pal, const char* file_name) { MG_RWops* area; const char* ext; int ret_val; if ((ext = get_extension (file_name)) == NULL) return ERR_BMP_UNKNOWN_TYPE; if (!(area = MGUI_RWFromFile (file_name, "rb"))) { return ERR_BMP_FILEIO; } ret_val = LoadMyBitmapEx (my_bmp, pal, area, ext); MGUI_RWclose (area); return ret_val; }
bool scan_check_file_extension(const wchar* file_name) { const wchar* ext = get_extension(file_name); if(ext == NULL) return false; const wchar** test_ext = scan_file_extensions; while(*test_ext != NULL) { if(str_icompare(ext, *test_ext) == 0) return true; test_ext++; } return false; }
/* load_font: * Loads a font from disk. Will try to load a font from a bitmap if all else * fails. */ FONT *load_font(AL_CONST char *filename, RGB *pal, void *param) { char tmp[32], *aext; FONT_TYPE_INFO *iter; ASSERT(filename); aext = uconvert_toascii(get_extension(filename), tmp); for (iter = font_type_list; iter; iter = iter->next) { if (stricmp(iter->ext, aext) == 0) { if (iter->load) return iter->load(filename, pal, param); return NULL; } } /* Try to load the file as a bitmap image and grab the font from there */ return load_bitmap_font(filename, pal, param); }
/* save_bitmap: * Writes a bitmap to disk. */ int save_bitmap(AL_CONST char *filename, BITMAP *bmp, AL_CONST RGB *pal) { char tmp[32], *aext; BITMAP_TYPE_INFO *iter; ASSERT(filename); ASSERT(bmp); aext = uconvert_toascii(get_extension(filename), tmp); for (iter = bitmap_type_list; iter; iter = iter->next) { if (stricmp(iter->ext, aext) == 0) { if (iter->save) return iter->save(filename, bmp, pal); return 1; } } return 1; }
/* m_replace_extension: * Replaces the extension (any text after last dot in string and after last * path separator) in path with the new one. If there's no dot in path, path * and extension will be concatenated like '"%s.%s", path, extension'. * Returns the created string, which has to be freed. Usage example: * char *dest = m_replace_extension(argv[2], "html"); */ char *m_replace_extension(const char *path, const char *extension) { char *p; assert(path); assert(extension); p = get_extension(path); if(*p) { int len = p - path; char *temp = m_xmalloc(len + 1 + strlen(extension)); strncpy(temp, path, len); strcpy(temp+len, extension); return temp; } else { char *temp = m_xmalloc(strlen(path) + 2 + strlen(extension)); sprintf(temp, "%s.%s", path, extension); return temp; } }
void tape_load(char *fn) { int c = 0; char *p; if (!fn) return; p = get_extension(fn); if (!p) return; bem_debugf("Loading %s %s\n", fn, p); while (loaders[c].ext) { if (!strcasecmp(p, loaders[c].ext)) { tape_loader = c; loaders[c].load(fn); return; } c++; } tape_loaded = 0; }
const char *lookup_mimetype(const char *filename) { int i; const char *extension; if(!filename) { return NULL; } extension = get_extension(filename); if(!extension) return DEFAULT_MIME_TYPE; for(i=0; i< ARRAY_SIZE(uh_mime_types); i++) { if(strcmp(extension, uh_mime_types[i].extn) == 0) { return uh_mime_types[i].mime; } } return DEFAULT_MIME_TYPE; }
Image* open_image(const std::string& filename) { Image* image = new Image; memset(image, 0, sizeof(Image)); int error = 0; char bit_depth = 0; std::string ext = get_extension(filename); if (ext.length() == 0) { error = 10; } if (ext == "jpg" || ext == "jpeg") { image->buffer = jpeg_read(filename, image->width, image->height, error); } if (ext == "png") { image->buffer = png_read(filename, image->width, image->height, bit_depth, error); image->type = IMAGE_TYPE::PNG; } if (ext == "exr") { error = 5; } if (error) { delete image; return NULL; } return image; }
const char *get_mime_type(const char *filename) { static struct { const char *ext; const char *mime; } map[] = { { "css", "text/css" }, { "html", "text/html" }, { "htm", "text/html" }, { "c", "text/plain" }, { "cpp", "text/plain" }, { "cxx", "text/plain" }, { "h", "text/plain" }, { "java", "text/plain" }, { "txt", "text/plain" }, { "xml", "text/xml" }, { "rtf", "text/rtf" }, { "sgml", "text/sgml" }, { "jpeg", "image/jpeg" }, { "jpg", "image/jpeg" }, { "png", "image/png" }, { "tiff", "image/tiff" }, { "gif", "image/gif" }, }; size_t i, nelem = sizeof map / sizeof *map; char ext[100]; if (get_extension(filename, ext, sizeof ext)) { for (i = 0; i < nelem; i++) { if (strcmp(map[i].ext, ext) == 0) { return map[i].mime; } } } return "application/octet-stream"; }
CoglBool rut_file_info_is_asset (GFileInfo *info, const char *name) { const char *content_type = g_file_info_get_content_type (info); char *mime_type = g_content_type_get_mime_type (content_type); const char *ext; if (mime_type) { if (strncmp (mime_type, "image/", 6) == 0) { g_free (mime_type); return TRUE; } g_free (mime_type); } ext = get_extension (name); if (ext && strcmp (ext, "ply") == 0) return TRUE; return FALSE; }
static void loadsave_song_changed(void) { int r = 4; /* what? */ int i; const char *ext; const char *ptr = song_get_filename(); if (!ptr) return; ext = get_extension(ptr); if (ext[0] && ext[1]) { for (i = 0; song_save_formats[i].label; i++) { if (strcasecmp(ext, song_save_formats[i].ext) == 0) { /* ugh :) offset to the button for the file type on the save module page is (position in diskwriter driver array) + 4 */ r = i + 4; break; } } } togglebutton_set(widgets_savemodule, r, 0); }
void scan(char *file_name) { t_file file; t_list_content *t; t_list_reason *r; t = malloc(sizeof(t_list_content)); r = malloc(sizeof(t_list_reason)); file.name = file_name; init_lists(t, r); get_extension(&file, r); if (file.is_valid) { if (ft_open_file(&file, t)) { ft_print_name(file.name); scan_file_type(&file, t, r, file.extension); } } view_reason_list(&file, r); clear_reason_list(r); }
environment push_scope(environment const & env, io_state const & ios, scope_kind k, name const & n) { if (k == scope_kind::Namespace && in_section(env)) throw exception("invalid namespace declaration, a namespace cannot be declared inside a section"); name new_n = get_namespace(env); if (k == scope_kind::Namespace) new_n = new_n + n; scope_mng_ext ext = get_extension(env); bool save_ns = false; if (!ext.m_namespace_set.contains(new_n)) { save_ns = true; ext.m_namespace_set.insert(new_n); } ext.m_namespaces = cons(new_n, ext.m_namespaces); ext.m_headers = cons(n, ext.m_headers); ext.m_scope_kinds = cons(k, ext.m_scope_kinds); environment r = update(env, ext); for (auto const & t : get_exts()) { r = std::get<0>(t)(r, ios, k); } if (save_ns) r = module::add(r, *g_new_namespace_key, [=](environment const &, serializer & s) { s << new_n; }); return r; }
char *associated_cue(const char *filename) { FILE *fp; const char *ext; char buf[4096] = {0}; const char *dot; ext = get_extension(filename); if (ext != NULL && strcmp(ext, "cue") == 0) return NULL; dot = strrchr(filename, '.'); if (dot == NULL) return NULL; snprintf(buf, sizeof buf, "%.*s.cue", (int) (dot - filename), filename); fp = fopen(buf, "r"); if (!fp) snprintf(buf, sizeof buf, "%s.cue", filename); else fclose(fp); return xstrdup(buf); }
int setup_stream_test_create_metadata(u64 userId, u64 deviceId, media_metadata::CatalogType_t catType, const std::string &collectionId, const std::string &testFilesFolder) { int rv = 0; { ccd::BeginCatalogInput req; req.set_catalog_type(catType); rv = CCDIMSABeginCatalog(req); if (rv != 0) { LOG_ERROR("MSABeginCatalog failed: %d", rv); goto end; } } { ccd::BeginMetadataTransactionInput req; req.set_collection_id(collectionId); req.set_collection_timestamp(VPLTime_GetTime()); req.set_reset_collection(false); rv = CCDIMSABeginMetadataTransaction(req); if (rv != 0) { LOG_ERROR("MSABeginMetadataTransaction failed: %d", rv); goto end; } } { VPLFS_dir_t dir; VPLFS_dirent_t dirent; rv = VPLFS_Opendir(testFilesFolder.c_str(), &dir); if (rv != 0) { LOG_ERROR("VPLFS_OpenDir failed: %d", rv); goto end; } while (VPLFS_Readdir(&dir, &dirent) == 0) { if (dirent.type != VPLFS_TYPE_FILE) continue; ccd::UpdateMetadataInput req; media_metadata::ContentDirectoryObject *o = req.mutable_metadata(); media_metadata::VideoItemFields *v = o->mutable_video_item(); std::string filepath = testFilesFolder + "/" + dirent.filename; o->set_object_id(dirent.filename); o->set_source(media_metadata::MEDIA_SOURCE_LIBRARY); v->set_absolute_path(filepath); v->set_title(dirent.filename); v->set_album_name("SampleVideos"); v->set_file_format(get_extension(filepath)); rv = CCDIMSAUpdateMetadata(req); if (rv != 0) { LOG_ERROR("MSAUpdateMetadata failed: %d", rv); goto end; } LOG_INFO("Added %s", filepath.c_str()); } VPLFS_Closedir(&dir); } rv = CCDIMSACommitMetadataTransaction(); if (rv != 0) { LOG_ERROR("MSACommitMetadataTransaction failed: %d", rv); goto end; } LOG_INFO("Committed metadata"); { ccd::CommitCatalogInput ccInput; ccInput.set_catalog_type(catType); rv = CCDIMSACommitCatalog(ccInput); if (rv != 0) { LOG_ERROR("MSACommitCatalog failed: %d", rv); goto end; } LOG_INFO("Committed catalog"); } LOG_INFO("Logged out of MSA"); end: return rv; }
/* --------------------------------------------------------------------- * Callback when the menu item is clicked. * --------------------------------------------------------------------- */ static void menu_item_activate(guint key_id) { GeanyDocument* current_doc = document_get_current(); GeanyDocument* new_doc = NULL; guint nb_documents = geany->documents_array->len; gchar* extension = NULL; /* e.g. : "hpp" */ GSList* p_extensions_to_test = NULL; /* e.g. : ["cpp", "cxx", ...] */ GSList* filenames_to_test = NULL; /* e.g. : ["f.cpp", "f.cxx", ...] */ GSList* iter_lang = NULL; GSList* iter_ext = NULL; GSList* iter_filename = NULL; gint i=0; gchar* dirname = NULL; gchar* basename = NULL; gchar* basename_no_extension = NULL; gchar* p_str = NULL; /* Local variables, used as temporary buffers */ gchar* p_str2 = NULL; log_func(); log_debug("current_doc->file_name == %s", current_doc->file_name); log_debug("geany->documents_array->len == %d", geany->documents_array->len); if(current_doc != NULL && current_doc->file_name != NULL && current_doc->file_name[0] != '\0') { /* Get the basename, e.g. : "/home/me/file.cpp" -> "file.cpp" */ basename = g_path_get_basename(current_doc->file_name); if(g_utf8_strlen(basename, -1) < 2) goto free_mem; log_debug("basename == %s", basename); /* Get the extension , e.g. : "cpp" */ extension = get_extension(basename); if(extension == NULL || g_utf8_strlen(extension, -1) == 0) goto free_mem; log_debug("extension == %s", extension); /* Get the basename without any extension */ basename_no_extension = copy_and_remove_extension(basename); if(basename_no_extension == NULL || g_utf8_strlen(basename_no_extension, -1) == 0) goto free_mem; /* Identify the language and whether the file is a header or an implementation. */ /* For each recognized language : */ for(iter_lang = languages ; iter_lang != NULL ; iter_lang = iter_lang->next) { Language* lang = (Language*)(iter_lang->data); /* Test the headers : */ if(g_slist_find_custom(lang->head_extensions, extension, (GCompareFunc)(&compare_strings)) != NULL) { p_extensions_to_test = lang->impl_extensions; break; } /* Test the implementations : */ else if(g_slist_find_custom(lang->impl_extensions, extension, (GCompareFunc)(&compare_strings)) != NULL) { p_extensions_to_test = lang->head_extensions; break; } } if(p_extensions_to_test == NULL) goto free_mem; #ifdef CODE_NAVIGATION_DEBUG log_debug("extension known !"); log_debug("p_extensions_to_test : "); g_slist_foreach(p_extensions_to_test, (GFunc)(&log_debug), NULL); #endif /* Build a list of filenames to test : */ filenames_to_test = NULL; for(iter_ext = p_extensions_to_test ; iter_ext != NULL ; iter_ext = iter_ext->next) { p_str = g_strdup_printf("%s.%s", basename_no_extension, (const gchar*)(iter_ext->data)); filenames_to_test = g_slist_prepend(filenames_to_test, p_str); } filenames_to_test = g_slist_reverse(filenames_to_test); #ifdef CODE_NAVIGATION_DEBUG log_debug("filenames to test :"); g_slist_foreach(filenames_to_test, (GFunc)(&log_debug), NULL); #endif /* First : look for a corresponding file in the opened files. * If found, open it. */ for(i=0 ; i < nb_documents ; i++) { new_doc = document_index(i); for(iter_filename = filenames_to_test ; iter_filename != NULL ; iter_filename = iter_filename->next) { p_str = g_path_get_basename(new_doc->file_name); log_debug("comparing \"%s\" and \"%s\"", (const gchar*)(iter_filename->data), p_str); if(utils_str_equal((const gchar*)(iter_filename->data), p_str)) { log_debug("FOUND !"); g_free(p_str); p_str = g_locale_from_utf8(new_doc->file_name, -1, NULL, NULL, NULL); document_open_file(p_str, FALSE, NULL, NULL); g_free(p_str); goto free_mem; } g_free(p_str); } } /* Second : if not found, look for a corresponding file in the same directory. * If found, open it. */ /* -> compute dirname */ dirname = g_path_get_dirname(current_doc->real_path); if(dirname == NULL) goto free_mem; log_debug("dirname == \"%s\"", dirname); /* -> try all the extensions we should test */ for(iter_ext = p_extensions_to_test ; iter_ext != NULL ; iter_ext = iter_ext->next) { p_str = g_strdup_printf( "%s" G_DIR_SEPARATOR_S "%s.%s", dirname, basename_no_extension, (const gchar*)(iter_ext->data)); p_str2 = g_locale_from_utf8(p_str, -1, NULL, NULL, NULL); g_free(p_str); log_debug("trying to open the file \"%s\"\n", p_str2); /* Try without read-only and in read-only mode */ if( document_open_file(p_str2, FALSE, NULL, NULL) != NULL || document_open_file(p_str2, TRUE, NULL, NULL) != NULL) { g_free(p_str2); goto free_mem; } g_free(p_str2); } /* Third : if not found, ask the user if he wants to create it or not. */ { p_str = g_strdup_printf("%s.%s", basename_no_extension, (const gchar*)(p_extensions_to_test->data)); GtkWidget* dialog = gtk_message_dialog_new( GTK_WINDOW(geany_data->main_widgets->window), GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION, GTK_BUTTONS_OK_CANCEL, _("%s not found, create it?"), p_str); gtk_window_set_title(GTK_WINDOW(dialog), "Geany"); if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK) { p_str2 = g_strdup_printf( "%s" G_DIR_SEPARATOR_S "%s", dirname, p_str); document_new_file(p_str2, current_doc->file_type, NULL); document_set_text_changed(document_get_current(), TRUE); g_free(p_str2); } log_debug("DESTROY"); gtk_widget_destroy(dialog); g_free(p_str); } /* Free the memory */ free_mem: g_slist_foreach(filenames_to_test, (GFunc)(&g_free), NULL); g_free(dirname); g_free(basename_no_extension); g_free(extension); g_free(basename); } }
static void set_dialog_properties (GtkAppChooserDialog *self) { gchar *label; gchar *name; gchar *extension; gchar *description; gchar *default_text; gchar *string; gboolean unknown; PangoFontDescription *font_desc; name = NULL; extension = NULL; label = NULL; description = NULL; unknown = TRUE; if (self->priv->gfile != NULL) { name = g_file_get_basename (self->priv->gfile); extension = get_extension (name); } if (self->priv->content_type) { description = g_content_type_get_description (self->priv->content_type); unknown = g_content_type_is_unknown (self->priv->content_type); } gtk_window_set_title (GTK_WINDOW (self), ""); if (name != NULL) { /* Translators: %s is a filename */ label = g_strdup_printf (_("Select an application to open \"%s\""), name); string = g_strdup_printf (_("No applications available to open \"%s\""), name); } else { /* Translators: %s is a file type description */ label = g_strdup_printf (_("Select an application for \"%s\" files"), unknown ? self->priv->content_type : description); string = g_strdup_printf (_("No applications available to open \"%s\" files"), unknown ? self->priv->content_type : description); } font_desc = pango_font_description_new (); pango_font_description_set_weight (font_desc, PANGO_WEIGHT_BOLD); gtk_widget_override_font (self->priv->label, font_desc); pango_font_description_free (font_desc); if (self->priv->heading != NULL) gtk_label_set_markup (GTK_LABEL (self->priv->label), self->priv->heading); else gtk_label_set_markup (GTK_LABEL (self->priv->label), label); default_text = g_strdup_printf ("<big><b>%s</b></big>\n%s", string, _("Click \"Show other applications\", for more options, or " "\"Find applications online\" to install a new application")); gtk_app_chooser_widget_set_default_text (GTK_APP_CHOOSER_WIDGET (self->priv->app_chooser_widget), default_text); g_free (label); g_free (name); g_free (extension); g_free (description); g_free (string); g_free (default_text); }
optional<name> hidden_to_user_name(environment const & env, name const & n) { auto it = get_extension(env).m_inv_map.find(n); return it ? optional<name>(*it) : optional<name>(); }
bool is_namespace(environment const & env, name const & n) { return get_extension(env).m_namespace_set.contains(n); }
name_set get_opened_namespaces(environment const & env) { return get_extension(env).m_opened_namespaces; }
environment mark_namespace_as_open(environment const & env, name const & n) { scope_mng_ext ext = get_extension(env); ext.m_opened_namespaces.insert(n); return update(env, ext); }
bool in_section(environment const & env) { scope_mng_ext const & ext = get_extension(env); return !is_nil(ext.m_scope_kinds) && head(ext.m_scope_kinds) == scope_kind::Section; }
list<name> const & get_namespaces(environment const & env) { return get_extension(env).m_namespaces; }
bool_t filename_is_playlist (const char * filename) { const char * ext = get_extension (filename); return (ext && playlist_plugin_for_extension (ext)) ? TRUE : FALSE; }
static bool is_module(std::string file) { return boost::ends_with(file, get_extension()); }
name_map<projection_info> const & get_projection_info_map(environment const & env) { return get_extension(env).m_info; }
int ftpsession(struct Url *url,struct HTTPrecord *cache,char *uploadfile) { longword host; char str[256]; char buffer[BUFLEN+2]; tcp_Socket datasocket; word dataport=0; int rv=0,len; char *ptr,*datahostptr,datahost[80]; char isdir=0,retry=0;//,ascii=0; long total=0; //!!glennmcc: Nov 11, 2007 -- for 'dblp code' below int dblp=0; //!!glennmcc: end //!!glennmcc: Nov 13, 2007 -- for EZNOS2 fix below int eznos2=0; //!!glennmcc: end int log; if(!tcpip)return 0; free_socket(); if((!url->file[0] || url->file[strlen(url->file)-1]=='/') && !uploadfile) isdir=1; sprintf(str,msg_askdns,url->host); outs(str); GlobalLogoStyle=0; //SDL set resolve animation host=resolve_fn( url->host, (sockfunct_t) TcpIdleFunc ); //SDL // host=resolve( url->host ); if(!host) { DNSerr(url->host); return 0; } // if(!uploadfile) //!glennmcc: Oct 20, 2012 - commented-out to make upload log more verbose log=a_open("FTP.LOG",O_BINARY|O_WRONLY|O_CREAT|O_TRUNC,S_IREAD|S_IWRITE); GlobalLogoStyle=2; //SDL set connect animation if (!tcp_open( socket, locport(), host, url->port, NULL )) { sprintf(str,msg_errcon,url->host); outs(str); return 0; } sprintf(str,msg_con,url->host,url->port); outs(str); write(log,str,strlen(str)); write(log,"\r\n",2); sock_wait_established(socket, sock_delay, (sockfunct_t) TcpIdleFunc, &status); //SDL GlobalLogoStyle=1; //SDL set data animation sock_mode( socket, TCP_MODE_ASCII ); outs(MSG_LOGIN); do { sock_wait_input( socket, sock_delay, (sockfunct_t) TcpIdleFunc, &status ); //SDL sock_gets( socket, (unsigned char *)buffer, sizeof( buffer )); outs(buffer); write(log,buffer,strlen(buffer)); write(log,"\r\n",2); // printf("FTP daemon said>"); // puts(buffer); if ( *buffer != '2' && buffer[0]!=' ') goto quit; } while(buffer[3]=='-' || buffer[0]==' '); //continued message! if(!url->user[0]) ptr="anonymous"; else ptr=url->user; sprintf( str, "USER %s", ptr); write(log,str,strlen(str)); write(log,"\r\n",2); sock_puts(socket,(unsigned char *)str); sock_wait_input( socket, sock_delay, (sockfunct_t) TcpIdleFunc, &status ); //SDL sock_gets( socket, (unsigned char *)buffer, sizeof( buffer )); outs(buffer); write(log,buffer,strlen(buffer)); write(log,"\r\n",2); // printf("FTP daemon said>"); // puts(buffer); //!!glennmcc: May 11, 2005 //removed due to the fact that not all sites use '3' //see additional info below with respect to anonymous password // if ( *buffer != '3' ) goto quit; //!!glennmcc: end //open cache filename: //!glennmcc: Oct 20, 2012 - commented-out to make upload log more verbose // if(uploadfile) // strcpy(cache->locname,"FTP.LOG"); // else //!glennmcc end: Oct 20, 2012 { //!!glennmcc: Oct 22, 2008 -- strchr() was preventing the use of 'CachePath .\cache\' // ptr=strchr(cache->locname,'.'); ptr=strrchr(cache->locname,'.'); //!!glennmcc: end if(ptr) { strcpy(&ptr[1],"FTP"); strcpy(cache->rawname,cache->locname); } } cache->handle=a_open(cache->locname,O_BINARY|O_WRONLY|O_CREAT|O_TRUNC,S_IREAD|S_IWRITE); if(cache->handle<0) goto quit; strcpy(cache->mime,"text/plain"); if(url->password[0]) ptr=url->password; else { if(url->user[0] && !strcmp(url->host,AUTHENTICATION->host) && !strcmp(AUTHENTICATION->realm,"$ftp")) ptr=AUTHENTICATION->password; else { ptr=configvariable(&ARACHNEcfg,"FakeFTPeMail",NULL); if(!ptr || !strchr(ptr,'@')) { ptr=configvariable(&ARACHNEcfg,"eMail",NULL); if(!ptr) ptr="@"; } } } //!!glennmcc: May 11, 2005 //some sites do not require a password after 'anonymous' //therefer, this entire block is now within this 'if()' so that //the password (email address), will only be sent if asked for //!!glennmcc: Nov 13, 2007 -- EZNOS2 says "Enter PASS command" if (strstr(buffer,"sword") || strstr(buffer,"Enter PASS command")) //if (strstr(buffer,"sword"))//original line { sprintf( str, "PASS %s", ptr); sock_puts(socket,(unsigned char *)str); write(log,str,strlen(str)); write(log,"\r\n",2); }//!!glennmcc: inserted Mar 02, 2008 //Some servers need the following 'do/while' section, //therefore, only the section above for sending the password needs to be //'blocked' when no password was requested. do { sock_wait_input( socket, sock_delay, (sockfunct_t) TcpIdleFunc, &status ); //SDL sock_gets( socket, (unsigned char *)buffer, sizeof( buffer )); outs(buffer); write(log,buffer,strlen(buffer)); write(log,"\r\n",2); // printf("FTP daemon said>"); // puts(buffer); if (strstr(buffer,"Enter PASS command")) eznos2=1; if (*buffer != '2' && buffer[0]!=' ' && !eznos2) { write(cache->handle,buffer,strlen(buffer)); rv=1; goto quit; } else if ((buffer[3]=='-' || buffer[0]==' ') && (isdir || uploadfile)) { strcat(buffer,"\r\n"); rv=1; write(cache->handle,buffer,strlen(buffer)); } } while(buffer[3]=='-' || buffer[0]==' ' || buffer[0]=='3'); //continued message! //}//!!glennmcc: end May 11, 2005 -- removed on Mar 02, 2008 //ask server where we have to connect: sock_puts(socket,(unsigned char *)"PASV"); sock_wait_input( socket, sock_delay, (sockfunct_t) TcpIdleFunc, &status ); //SDL sock_gets( socket, (unsigned char *)buffer, sizeof( buffer )); outs(buffer); write(log,buffer,strlen(buffer)); write(log,"\r\n",2); // printf("FTP daemon said>"); // puts(buffer); //2xx Entering passive mode (a,b,c,d,x,y) if ( *buffer != '2' ) goto quit; datahostptr=strchr(buffer,'('); //!!glennmcc: Nov 13, 2007 -- EZNOS2 doesn't enclose the info in () //therefore, if '(' is not found... look for the last 'space'. if(!datahostptr) {datahostptr=strrchr(buffer,' '); eznos2=1;} //if that still fails... 'quit' //!!glennmcc: end if(!datahostptr) goto quit;//original line ptr=++datahostptr; { int carka=0; char *portptr=NULL; while(*ptr) { if(*ptr==',') { carka++; if(carka<4) *ptr='.'; else if(carka==4) { *ptr='\0'; portptr=ptr+1; } else if (carka==5) { *ptr='\0'; dataport=256*(word)atoi(portptr); // ,x,y -> 256*x+y portptr=ptr+1; //!!glennmcc: Nov 13, 2007 -- part of above fix for EZNO2 info not in () if(eznos2) dataport+=atoi(portptr); // ,x,y -> 256*x+y //!!glennmcc: end } } else if(*ptr==')' && portptr) { //!!glennmcc: Nov 11, 2007 -- some servers have double ')' // at the end of the port address info... // this 'dblp code' will prevent that from adding the final set twice //eg: (99,167,219,186,234,255)) instead of.... (99,167,219,186,234,255) //without this fix ... 255 gets added a 2nd time and //we end-up-with... port 60414 instead of the correct port of 60159 *ptr='\0'; if(!dblp)//!!glennmcc: Nov 11, 2007 dataport+=atoi(portptr); // ,x,y -> 256*x+y dblp=1;//!!glennmcc: Nov 11, 2007 } ptr++; } } if(!dataport) goto quit; //!!glennmcc: Aug 31, 2009 //EZNOS2 sends the IP of the machine on a router as datahost //therefore we need to go back to the original host if(eznos2) { makestr(datahost,url->host,79); outs(datahost); Piip(); } else //!!glennmcc:end makestr(datahost,datahostptr,79);//original line retry: if(isdir) { if(url->file[0]) { //!!glennmcc: Oct 15, 2007 -- fix problems with CWD on FTP servers //which interpret the leading '/' as an attempted CD to 'root' if(url->file[0]=='/') sprintf( str, "CWD %s", url->file+1); else //!!glennmcc: end Oct 15, 2007 sprintf( str, "CWD %s", url->file); sock_puts(socket,(unsigned char *)str); do { sock_wait_input( socket, sock_delay, (sockfunct_t) TcpIdleFunc, &status ); //SDL sock_gets( socket, (unsigned char *)buffer, sizeof( buffer )); outs(buffer); //!!glennmcc: Apr 08, 2005 -- commented-out this block // to fix the problem of 'broken dir listing' when the // 'FTP welcome message' contains linefeeds // such as at ftp://ftp.cdrom.com/.2/simtelnet/ /* if ( *buffer != '2' && buffer[0]!=' ') { write(cache->handle,buffer,strlen(buffer)); rv=1; goto quit; } else if (buffer[3]=='-' || buffer[0]==' ') */ //!!glennmcc: end { strcat(buffer,"\r\n"); rv=1; write(cache->handle,buffer,strlen(buffer)); } } //!!glennmcc: Apr 08, 2005 -- added a test for !=' ' which is also // needed for the same fix at ftp://ftp.cdrom.com/.2/simtelnet/ while(buffer[3]=='-' || buffer[3]!=' ' || buffer[0]==' '); //continued message! // while(buffer[3]=='-' || buffer[0]==' '); //continued message! //!!glennmcc: end } strcpy(cache->mime,"ftp/list"); sprintf( str, "LIST"); } else { char *fnameptr; char mimestr[80]="ftp/binary"; fnameptr=strrchr(url->file,'/'); if(!fnameptr) { fnameptr=strrchr(url->file,'\\'); if(!fnameptr) fnameptr=url->file; else fnameptr++; } else fnameptr++; sprintf( str, "TYPE I"); if(fnameptr) { char ext[5]; strcpy(mimestr,"file/"); strncat(mimestr,fnameptr,70); mimestr[79]='\0'; get_extension(mimestr,ext); if(!strncmpi(ext,"TXT",3) || !strncmpi(ext,"HTM",3)) { //!!glennmcc: begin June 09, 2002 //optionally upload TXT and HTM in binary mode ptr=configvariable(&ARACHNEcfg,"UseBinaryFTP",NULL); if(!ptr || toupper(*ptr)=='N') //!!glennmcc: end sprintf( str, "TYPE A"); // ascii=1; } } strcpy(cache->mime,mimestr); sock_puts(socket,(unsigned char *)str); write(log,str,strlen(str)); write(log,"\r\n",2); sock_wait_input( socket, sock_delay, (sockfunct_t) TcpIdleFunc, &status ); //SDL sock_gets( socket, (unsigned char *)buffer, sizeof( buffer )); outs(buffer); write(log,buffer,strlen(buffer)); write(log,"\r\n",2); // printf("FTP daemon said>"); // puts(buffer); if ( *buffer != '2' || uploadfile) { strcat(buffer,"\n"); write(cache->handle,buffer,strlen(buffer)); } if ( *buffer != '2' ) { rv=1; goto quit; } if(!uploadfile) //!!glennmcc: Oct 17, 2007 -- fix problems with FTP servers //which interpret the leading '/' as an attempted CD to 'root' if(url->file[0]=='/') sprintf( str, "RETR %s", url->file+1); else sprintf( str, "RETR %s", url->file); //original single line above this comment //!!glennmcc: end else sprintf( str, "STOR %s", url->file); } sock_puts(socket,(unsigned char *)str); write(log,str,strlen(str)); write(log,"\r\n",2); //!!glennmcc: Oct 19, 2008 -- back to original fix //!!glennmcc: Nov 15, 2007 -- always 'close' the connection when done //with both dir listings and file downloads //Apr 10, 2007 fix did it only for dir listings if(isdir || strstr(str,"RETR")) //if(isdir) sock_puts(socket,(unsigned char *)"QUIT");//!!glennmcc: Apr 10, 2007 //!!glennmcc: end if(!retry) { //get file using datahost & dataport GlobalLogoStyle=0; //SDL set resolve animation host=resolve_fn( datahost, (sockfunct_t) TcpIdleFunc ); //SDL // host=resolve( datahost ); if(!host) goto quit; GlobalLogoStyle=2; //SDL set connect animation if (!tcp_open( &datasocket, locport(), host, dataport, NULL )) { sprintf(str,msg_errcon,datahost); outs(str); goto quit; } sprintf(str,msg_con,datahost,dataport); outs(str); write(log,str,strlen(str)); write(log,"\r\n",2); //wait for datasocket to open: sock_wait_established(&datasocket, sock_delay, (sockfunct_t) TcpIdleFunc, &status); //SDL //!!glennmcc: Sep 27, 2008 -- increase D/L speed on cable & DSL //many thanks to 'mik' for pointing me in the right direction. :) { #ifdef DEBUG char sp[80]; sprintf(sp,"Available stack = %u bytes",_SP); outs(sp); Piip(); Piip(); #endif if(_SP>(1024*SETBUFSIZE)) { char setbuf[1024*SETBUFSIZE]; sock_setbuf(&datasocket, (unsigned char *)setbuf, 1024*SETBUFSIZE); } } //!!glennmcc: end GlobalLogoStyle=1; //SDL set data animation } //wait for "110 openning connection" (or "550 ....error....") sock_wait_input( socket, sock_delay, (sockfunct_t) TcpIdleFunc, &status ); //SDL sock_gets( socket, (unsigned char *)buffer, sizeof( buffer )); outs(buffer); write(log,buffer,strlen(buffer)); write(log,"\r\n",2); // printf("FTP daemon said>"); // puts(buffer); if ( *buffer != '1' || uploadfile) { strcat(buffer,"\n"); write(cache->handle,buffer,strlen(buffer)); } if ( *buffer != '1' ) { if(!strncmp(buffer,"550",3) && !retry) { retry=1; isdir=1-isdir; if(isdir) strcat(url->file,"/"); else { int i=strlen(url->file); if(i>0 && url->file[i-1]=='/') url->file[i-1]='\0'; } goto retry; } strcpy(cache->mime,"text/plain"); rv=1; goto dataquit; } if(!uploadfile) //-------------------------------------- download --------------- { while ( 1 ) { xChLogoTICK(1); if(GUITICK()) if(GLOBAL.gotolocation || GLOBAL.abort) goto dataquit; if (sock_dataready( &datasocket )) { len = sock_fastread( &datasocket, (unsigned char*)buffer, BUFLEN ); write(cache->handle,buffer,len); total+=len; sprintf(str,MSG_BYTESR,MSG_DOWNLD,total); outs(str); } else sock_tick( &datasocket, &status ); //shift TCP/IP } } else //-------------------------------------- upload ------------------ { int f,lenread,done; long length; char pom[256]; /* if(ascii) f=a_sopen(uploadfile,O_RDONLY|O_TEXT, SH_DENYNO, S_IREAD); else*/ f=a_sopen(uploadfile,O_RDONLY|O_BINARY, SH_DENYNO, S_IREAD); if(f<0) goto dataquit; lenread=done=0; length=0l; { long filel=a_filelength(f); while(1) { sprintf(pom,MSG_UPLOAD,length,filel); outs(pom); //!!glennmcc:Oct 23, 2008 -- 'reversed the logic' // to keep from overflowing at 21megs if(filel>100) percentbar((int)(length/(filel/100))); // percentbar((int)(100*length/filel)); lenread=a_read(f,buffer,BUFLEN); length+=lenread; if(lenread<=0) done=1; //wait until we can write to socket: while(sock_tbleft(&datasocket)<lenread) //SDL // while( datasocket.datalen > 1024) { sock_tick(&datasocket,&status); xChLogoTICK(1); // animation of logo if(GUITICK()) goto dataquit; } if(done) { sock_close( &datasocket ); a_close(f); goto dataclose; } sock_fastwrite(&datasocket,(unsigned char *)buffer,lenread); sock_tick(&datasocket,&status); }//loop } } dataquit: //!!glennmcc: Nov 15, 2007 -- removed sock_abort because it was // sometimes preventing the connection from being closed, // therefore preventing access to several files within a short time // due to too many connections open from the same IP // sock_abort( &datasocket );//original line //!!glennmcc: end dataclose: outs(MSG_CLOSE); sock_puts(socket,(unsigned char *)"QUIT");//!!glennmcc: Dec 04, 2006 sock_wait_closed( &datasocket, sock_delay, (sockfunct_t) TcpIdleFunc, &status ); //SDL if(uploadfile) { sock_wait_input( socket, sock_delay, (sockfunct_t) TcpIdleFunc, &status ); //SDL sock_gets( socket, (unsigned char *)buffer, sizeof( buffer )); outs(buffer); } quit: sock_puts(socket,(unsigned char *)"QUIT"); sock_close( socket ); closing[socknum]=1; sock_keepalive[socknum][0]='\0'; // sock_wait_closed( socket, sock_delay, NULL, &status ); //we will better wait because we are about to deallocate datasocket sock_err: switch (status) { case 1 : /* foreign host closed */ write(log,MSG_CLOSE,strlen(MSG_CLOSE)); write(log,"\r\n",2); close(log); break; case -1: /* timeout */ sprintf(str,MSG_TCPERR, sockerr(socket)); outs(str); write(log,str,strlen(str)); write(log,"\r\n",2); close(log); break; } if(total) { cache->knowsize=1; cache->size=total; rv=1; } if(cache->handle>=0) { a_close(cache->handle); rv=1; } return rv; }
name const & get_scope_header(environment const & env) { scope_mng_ext const & ext = get_extension(env); return !is_nil(ext.m_namespaces) ? head(ext.m_headers) : name::anonymous(); }