13aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/** 23aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * \file pathutils.c 33aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * 43aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Copyright (C) 2005-2008 Linus Walleij <triad@df.lth.se> 53aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Copyright (C) 2006 Chris A. Debenham <chris@adebenham.com> 63aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * 73aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * This library is free software; you can redistribute it and/or 83aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * modify it under the terms of the GNU Lesser General Public 93aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * License as published by the Free Software Foundation; either 103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * version 2 of the License, or (at your option) any later version. 113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * 123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * This library is distributed in the hope that it will be useful, 133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * but WITHOUT ANY WARRANTY; without even the implied warranty of 143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Lesser General Public License for more details. 163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * 173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * You should have received a copy of the GNU Lesser General Public 183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * License along with this library; if not, write to the 193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Free Software Foundation, Inc., 59 Temple Place - Suite 330, 203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Boston, MA 02111-1307, USA. 213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev */ 223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#include "common.h" 233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#include "pathutils.h" 243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#include <stdlib.h> 253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#include <limits.h> 263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#include <string.h> 273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#include <libgen.h> 283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Find the folder_id of a given path 303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev * Runs by walking through folders structure */ 313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstatic uint32_t 323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevlookup_folder_id (LIBMTP_folder_t * folder, char * path, char * parent) 333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev char * current; 353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev uint32_t ret = (uint32_t) -1; 363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (strcmp(path,"/")==0) 383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return 0; 393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (folder == NULL) { 413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return ret; 423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev current = malloc (strlen(parent) + strlen(folder->name) + 2); 453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev sprintf(current,"%s/%s",parent,folder->name); 463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (strcasecmp (path, current) == 0) { 473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev free (current); 483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return folder->folder_id; 493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (strncasecmp (path, current, strlen (current)) == 0) { 513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ret = lookup_folder_id (folder->child, path, current); 523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev free (current); 543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (ret != (uint32_t) (-1)) { 553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return ret; 563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ret = lookup_folder_id (folder->sibling, path, parent); 583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return ret; 593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Parses a string to find item_id */ 623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevint 633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevparse_path (char * path, LIBMTP_file_t * files, LIBMTP_folder_t * folders) 643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev char *rest; 663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev uint32_t item_id; 673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev // Check if path is an item_id 693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (*path != '/') { 703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev item_id = strtoul(path, &rest, 0); 713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev // really should check contents of "rest" here... 723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev /* if not number, assume a file name */ 733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (item_id == 0) { 743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev LIBMTP_file_t * file = files; 753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev /* search for matching name */ 773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev while (file != NULL) { 783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (strcasecmp (file->filename, path) == 0) { 793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return file->item_id; 803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev file = file->next; 823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return item_id; 853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev // Check if path is a folder 873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev item_id = lookup_folder_id(folders,path,""); 883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (item_id == (uint32_t) -1) { 893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev char * dirc = strdup(path); 903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev char * basec = strdup(path); 913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev char * parent = dirname(dirc); 923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev char * filename = basename(basec); 933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev uint32_t parent_id = lookup_folder_id(folders,parent,""); 943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev LIBMTP_file_t * file; 953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev file = files; 973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev while (file != NULL) { 983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (file->parent_id == parent_id) { 993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (strcasecmp (file->filename, filename) == 0) { 1003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev free(dirc); 1013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev free(basec); 1023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return file->item_id; 1033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 1043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 1053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev file = file->next; 1063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 1073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev free(dirc); 1083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev free(basec); 1093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } else { 1103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return item_id; 1113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 1123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 1133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return -1; 1143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 1153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 1163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevint progress (const uint64_t sent, const uint64_t total, void const * const data) 1173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 1183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev int percent = (sent*100)/total; 1193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#ifdef __WIN32__ 1203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev printf("Progress: %I64u of %I64u (%d%%)\r", sent, total, percent); 1213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#else 1223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev printf("Progress: %llu of %llu (%d%%)\r", sent, total, percent); 1233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#endif 1243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev fflush(stdout); 1253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return 0; 1263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 1273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 1283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Find the file type based on extension */ 1293aa430dc5437a98734b36f996f9b17081a589143Yavor GoulishevLIBMTP_filetype_t 1303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevfind_filetype (const char * filename) 1313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev{ 1323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev char *ptype; 1333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev LIBMTP_filetype_t filetype; 1343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 1353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#ifdef __WIN32__ 1363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ptype = strrchr(filename, '.'); 1373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#else 1383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ptype = rindex(filename,'.'); 1393aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#endif 1403aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev // This accounts for the case with a filename without any "." (period). 1413aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (!ptype) { 1423aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ptype = ""; 1433aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } else { 1443aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev ++ptype; 1453aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 1463aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 1473aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev /* This need to be kept constantly updated as new file types arrive. */ 1483aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (!strcasecmp (ptype, "wav")) { 1493aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev filetype = LIBMTP_FILETYPE_WAV; 1503aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } else if (!strcasecmp (ptype, "mp3")) { 1513aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev filetype = LIBMTP_FILETYPE_MP3; 1523aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } else if (!strcasecmp (ptype, "wma")) { 1533aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev filetype = LIBMTP_FILETYPE_WMA; 1543aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } else if (!strcasecmp (ptype, "ogg")) { 1553aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev filetype = LIBMTP_FILETYPE_OGG; 1563aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } else if (!strcasecmp (ptype, "mp4")) { 1573aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev filetype = LIBMTP_FILETYPE_MP4; 1583aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } else if (!strcasecmp (ptype, "wmv")) { 1593aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev filetype = LIBMTP_FILETYPE_WMV; 1603aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } else if (!strcasecmp (ptype, "avi")) { 1613aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev filetype = LIBMTP_FILETYPE_AVI; 1623aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } else if (!strcasecmp (ptype, "mpeg") || !strcasecmp (ptype, "mpg")) { 1633aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev filetype = LIBMTP_FILETYPE_MPEG; 1643aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } else if (!strcasecmp (ptype, "asf")) { 1653aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev filetype = LIBMTP_FILETYPE_ASF; 1663aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } else if (!strcasecmp (ptype, "qt") || !strcasecmp (ptype, "mov")) { 1673aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev filetype = LIBMTP_FILETYPE_QT; 1683aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } else if (!strcasecmp (ptype, "wma")) { 1693aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev filetype = LIBMTP_FILETYPE_WMA; 1703aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } else if (!strcasecmp (ptype, "jpg") || !strcasecmp (ptype, "jpeg")) { 1713aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev filetype = LIBMTP_FILETYPE_JPEG; 1723aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } else if (!strcasecmp (ptype, "jfif")) { 1733aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev filetype = LIBMTP_FILETYPE_JFIF; 1743aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } else if (!strcasecmp (ptype, "tif") || !strcasecmp (ptype, "tiff")) { 1753aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev filetype = LIBMTP_FILETYPE_TIFF; 1763aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } else if (!strcasecmp (ptype, "bmp")) { 1773aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev filetype = LIBMTP_FILETYPE_BMP; 1783aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } else if (!strcasecmp (ptype, "gif")) { 1793aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev filetype = LIBMTP_FILETYPE_GIF; 1803aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } else if (!strcasecmp (ptype, "pic") || !strcasecmp (ptype, "pict")) { 1813aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev filetype = LIBMTP_FILETYPE_PICT; 1823aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } else if (!strcasecmp (ptype, "png")) { 1833aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev filetype = LIBMTP_FILETYPE_PNG; 1843aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } else if (!strcasecmp (ptype, "wmf")) { 1853aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev filetype = LIBMTP_FILETYPE_WINDOWSIMAGEFORMAT; 1863aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } else if (!strcasecmp (ptype, "ics")) { 1873aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev filetype = LIBMTP_FILETYPE_VCALENDAR2; 1883aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } else if (!strcasecmp (ptype, "exe") || !strcasecmp (ptype, "com") || 1893aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev !strcasecmp (ptype, "bat") || !strcasecmp (ptype, "dll") || 1903aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev !strcasecmp (ptype, "sys")) { 1913aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev filetype = LIBMTP_FILETYPE_WINEXEC; 1923aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } else if (!strcasecmp (ptype, "aac")) { 1933aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev filetype = LIBMTP_FILETYPE_AAC; 1943aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } else if (!strcasecmp (ptype, "mp2")) { 1953aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev filetype = LIBMTP_FILETYPE_MP2; 1963aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } else if (!strcasecmp (ptype, "flac")) { 1973aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev filetype = LIBMTP_FILETYPE_FLAC; 1983aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } else if (!strcasecmp (ptype, "m4a")) { 1993aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev filetype = LIBMTP_FILETYPE_M4A; 2003aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } else if (!strcasecmp (ptype, "doc")) { 2013aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev filetype = LIBMTP_FILETYPE_DOC; 2023aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } else if (!strcasecmp (ptype, "xml")) { 2033aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev filetype = LIBMTP_FILETYPE_XML; 2043aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } else if (!strcasecmp (ptype, "xls")) { 2053aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev filetype = LIBMTP_FILETYPE_XLS; 2063aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } else if (!strcasecmp (ptype, "ppt")) { 2073aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev filetype = LIBMTP_FILETYPE_PPT; 2083aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } else if (!strcasecmp (ptype, "mht")) { 2093aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev filetype = LIBMTP_FILETYPE_MHT; 2103aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } else if (!strcasecmp (ptype, "jp2")) { 2113aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev filetype = LIBMTP_FILETYPE_JP2; 2123aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } else if (!strcasecmp (ptype, "jpx")) { 2133aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev filetype = LIBMTP_FILETYPE_JPX; 2143aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } else if (!strcasecmp (ptype, "bin")) { 2153aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev filetype = LIBMTP_FILETYPE_FIRMWARE; 2163aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } else if (!strcasecmp (ptype, "vcf")) { 2173aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev filetype = LIBMTP_FILETYPE_VCARD3; 2183aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } else { 2193aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev /* Tagging as unknown file type */ 2203aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev filetype = LIBMTP_FILETYPE_UNKNOWN; 2213aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev } 2223aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev printf("type: %s, %d\n", ptype, filetype); 2233aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return filetype; 2243aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 2253aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 2263aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev/* Function that compensate for missing libgen.h on Windows */ 2273aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#ifndef HAVE_LIBGEN_H 2283aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishevstatic char *basename(char *in) { 2293aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev char *p; 2303aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev 2313aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev if (in == NULL) 2323aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return NULL; 2333aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev p = in + strlen(in) - 1; 2343aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev while (*p != '\\' && *p != '/' && *p != ':') 2353aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev { p--; } 2363aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev return ++p; 2373aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev} 2383aa430dc5437a98734b36f996f9b17081a589143Yavor Goulishev#endif 239