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